目錄java
如下探究成員變量和局部變量在內存中的存儲狀況。性能
package com.my.pac04; /** * @author Summerday * @date 2019/12/1 13:05 */ public class ValStoreTest { public static void main(String[] args) { //分別建立兩個Value類的實例,val0和val1 Value val0 = new Value(); Value val1 = new Value(); //修改val0的num值 val0.num = 5; System.out.println("val0's num = " + val0.num);//val0'num =5 System.out.println("val1's num = " + val1.num);//val0'num =0 //直接使用類調用類變量 Value.staticNum = 10; //使用實例對象調用類成員變量,不建議使用 //val0.staticNum = 10; System.out.println("val0's staticNum =" + val0.staticNum);//10 System.out.println("val1's staticNum =" + val1.staticNum);//10 } } class Value { public int num;//實例變量 public static int staticNum;//類變量 }
上面提到成員變量分爲實例變量和類變量。這二者在內存中的存儲形式又是如何呢?學習
class Value { public int num;//實例變量 public static int staticNum;//類變量 }
實例變量code
Value val0 = new Value(); Value val1 = new Value(); //修改val0的num值 val0.num = 5; System.out.println("val0's num = " + val0.num);//val0'num =5 System.out.println("val1's num = " + val1.num);//val0'num =0
類變量對象
//直接使用類調用類變量 Value.staticNum = 10; //使用實例對象調用類成員變量,不建議使用 //val0.staticNum = 10; System.out.println("val0's staticNum =" + val0.staticNum);//10 System.out.println("val1's staticNum =" + val1.staticNum);//10
package com.my.pac04; /* ClassVal.java */ public class ClassVal { public static int value = 6; }
package com.my.pac04; /* ClassValTest01.java */ public class ClassValTest01 { public static void main(String[] args) { ClassVal val01 = new ClassVal(); val01.value = 10;//修改static修飾的值爲10 System.out.println(val01.value); } }
package com.my.pac04; /* ClassValTest02.java*/ public class ClassValTest02 { public static void main(String[] args) { ClassVal val02 = new ClassVal(); System.out.println(val02.value);//不是10,而是6 } }
關於JVM及類加載的機制,在以後的學習之中將會繼續深刻,在這裏就不發表本身的膚淺之談了,以後會進行補充哈。進程
注意:雖然大部分時間,能夠之間用成員變量來代替局部變量解決問題,可是這種作法,有幾個缺點:內存
局部變量的做用範圍越小,它在內存中停留的時間就越短,程序性能就會越好。作用域