目录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及类加载的机制,在以后的学习之中将会继续深刻,在这里就不发表本身的肤浅之谈了,以后会进行补充哈。进程
注意:虽然大部分时间,能够之间用成员变量来代替局部变量解决问题,可是这种作法,有几个缺点:内存
局部变量的做用范围越小,它在内存中停留的时间就越短,程序性能就会越好。作用域