静态变量和成员变量的区别

Posted nyfor2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态变量和成员变量的区别相关的知识,希望对你有一定的参考价值。

 

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

 

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

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

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

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

 

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

①     所属范围不同

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

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);
    }
}

结果如下:

技术分享图片

以上是关于静态变量和成员变量的区别的主要内容,如果未能解决你的问题,请参考以下文章

静态变量和成员变量的区别

静态变量和成员变量的区别

静态变量和成员变量的区别

成员变量和局部变量,静态变量的区别

静态变量和成员变量有什么区别?应该怎么调用?

Java 成员变量局部变量和静态变量的区别