博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态变量和成员变量的区别
阅读量:6320 次
发布时间:2019-06-22

本文共 1190 字,大约阅读时间需要 3 分钟。

 

静态变量和成员变量的不同:

 

① 所属范围不同。静态变量是属于类范围的;成员变量是属于对象范围的。

② 存活时间不同。类的一生有着静态变量的伴随;而成员变量只能陪类走一程,对象产生的时候它就产生,而且它会随着对象的消亡而消亡。

③ 存储位置不同。静态变量时存储在方法区里的静态区;成员变量存储在堆栈内存区。

④ 调用方式不同。静态变量可以通过类名调用,也可以通过对象来调用;成员变量只能通过对象名调用。

 

接下来,就是稍微地理解一下上面说的这些不同啦~

①     所属范围不同

首先给出一小段代码,定义了静态变量和成员变量。

public class StaticTest{    static int num01 = 9;    public static void main(String[] args){        int num02 = 10;    }}

用javap -p反编译了一下,可以得到:

 

由此可知,静态变量是随着类的产生而产生的,而且成员变量只有在对象被创建的时候才会产生。

 

② 存活时间不同。

依然使用以上的源码,使用javap -v反编译一下:

 

由此可知,当num01产生了之后,在main()函数调用结束之后,num01还会保存下来,但是num02就会随着对象的调用而消亡。

 

③ 存储位置不同。

依然是使用以上的源码,也是经过javap -v反编译了一下:

 

此外我们可以看到,在”Constant pool”(常量池)里面只有num01的踪迹,而没有num02的踪迹。

 

④ 调用方式不同。

重新写一段代码,我们可以看到num01是一个静态变量,而且在test01()方法里面定义了成员变量num02,我们可以看到num01无论在哪里调用都行,但是成员变量只有在对象被调用的时候才会产生。

public class StaticTest{    static int num01 = 9;    public static void main(String[] args){        System.out.println("Static Num:"+num01);        StaticTest st =  new StaticTest();        num01 = 11;        st.test01();    }    public void test01(){        int num02 = 10;        System.out.println("Static Num:"+num01);        System.out.println("Member Num:"+num02);    }}

结果如下:

转载于:https://www.cnblogs.com/NYfor2018/p/9481069.html

你可能感兴趣的文章
重建二叉树
查看>>
支付宝开发
查看>>
正则小结
查看>>
overflow与min-width
查看>>
弹出窗
查看>>
记一次网站部署遇到的问题
查看>>
每天几条java题(2)
查看>>
【Flutter学习】组件学习之目录
查看>>
ios cordova报gap://ready 弹出框,一直弹
查看>>
mysql开启skip-name-resolve 导致root@127.0.0.1(localhost)访问引发的ERROR 1045 (28000)错误解决方案...
查看>>
JS与JQ的对比与提高
查看>>
Linux 高可用开源方案 Keepalived VS Heartbeat对比
查看>>
谈谈垃圾回收机制方式及内存管理
查看>>
yarn 切换 设置 镜像 源
查看>>
幸福人生讲座(八):行胜于言
查看>>
SQL触发器实例(上)
查看>>
百度搜索效果(页面传来数据地址,由服务器去获取)
查看>>
BZOJ 1040 骑士
查看>>
FJ省队集训DAY4 T1
查看>>
zookeeper 分布式计数器
查看>>