dz 做企业网站,圣诞节html网页代码,手机网站免费的,河南省工程信息网官网好吧#xff0c;我承认我有赌的成分。我以为我能赌出答案#xff0c;结果赌输了。 还得利用JVM的知识点进行运算。 文章目录 1、考点#xff1a;2、局部变量和成员变量的区别3、具体的测试代码4、过程分析#xff08;重点#xff09;5、补充 1、考点#xff1a;
就近原… 好吧我承认我有赌的成分。我以为我能赌出答案结果赌输了。 还得利用JVM的知识点进行运算。 文章目录 1、考点2、局部变量和成员变量的区别3、具体的测试代码4、过程分析重点5、补充 1、考点
就近原则变量的分类 成员变量类变量、实例变量局部变量 非静态代码块的执行每次执行实例对象都会执行方法的调用规则调用一次执行一次 2、局部变量和成员变量的区别 1、声明位置 局部变量方法体{}中、形参、代码块{}中成员变量类中方法外 类变量有static修饰实例变量没有static修饰 2、修饰符 局部变量final成员变量public、protect、private、final、static、volatile、transient序列化 3、存储位置 局部变量栈实例变量堆类变量方法区 4、作用域 局部变量从声明处开始到所属的 } 结束实例变量在当前类中 “this.” 有时this.可以省略在其他类中 “对象名.” 访问类变量在当前类中 “类名.” 有时类名. 可以省略在其他类中“类名.” 或 “对象名.” 访问 5、生命周期 局部变量每一个线程每一次调用执行行都是新的生命周期实例变量随着对象的创建而初始化随着对象的被回收而消亡每一个对象的实例化变量是独立的类变量”随着类的初始化而初始化随着类的卸载而消亡该类的所有对象的类变量是共享的
补充
堆Heap
此内存区域的唯一目的就是存放实例对象几乎所有的实例对象都在这里分配内存。这一点在Java虚拟机规范中的描述是所有的对象实例以及数组都要在堆上分配
栈Stack
通常说的栈是指虚拟机栈**。虚拟机栈用于存储局部变量表等。局部变量表存放了编译期可知长度的各种基本数据类型8大基本数据类型、对象引用reference类型它不等同于对象本身是对象在堆内存的首地址。方法执行完自动释放。
方法区Method Area
用于存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码等数据 3、具体的测试代码
测试代码
package pers.mobian.questions06;public class Test01 {static int s;//成员变量类变量int i;//成员变量实例变量int j;//成员变量实例变量{int i 1; //局部变量i; //局部变量 如果此处想要成为成员变量就需要在变量前面添加一个this关键字j; //成员变量s; //成员变量}public void test(int j) {j; //局部变量 如果此处想要成为成员变量就需要在变量前面添加一个this关键字i; //成员变量s; //成员变量}public static void main(String[] args) {Test01 test01 new Test01();Test01 test02 new Test01();test01.test(10);test01.test(20);test02.test(30);System.out.println(test01.i , test01.j , test01.s);System.out.println(test02.i , test02.j , test02.s);}
}
执行结果
2,1,5
1,1,54、过程分析重点 Test01 test01 new Test01(); Test01 test02 new Test01(); 执行这两句以后对应的信息变化为下图 补充
先对该类进行初始化即会调用对应的clint方法在方法区中为s开辟一块空间实例化对象的时候会调用对应的init方法其中init方法由非静态实例变量显示赋值代码和非静态代码块、对应构造器代码组成非静态实例变量显示赋值代码i 0, j 0非静态代码块执行 {} 中的代码块在栈中开辟一个栈帧其中代码块中的 i 为局部变量代码块执行完毕消失。但是 j 为成员变量所以会进行对应的 1 操作就近原则成员变量 i 结果不变。对应构造器代码此处无参构造没有任何效果所以可以忽略 test01.test(10) test01.test(20) test02.test(30) 执行这三行代码以后内存的分配情况如下图 补充
test01调用对应的test方法的时候j 是局部变量所以 j 值为11注意区分此处的 j 和堆内存中的 j 值。test方法中的 i 值为成员变量所以会在堆内存中被修改为1test方法中的 s 值也是成员变量并且其是static变量所以 s 变量会在方法区中进行 1 操作再次执行test01中的test方法重复1-3的步骤执行test02对象中的test方法i 的 1 在堆中完成s 的 1 操作在方法区中完成j 的 1 操作在栈中完成 j 31由于 j 变量是局部变量所以在执行对应的操作以后失效 5、补充
当局部变量与xx变量重名时如何区分
局部变量与实例变量重名 在实例变量前面提添加 “this.” 关键字 局部变量与类变量重名 在类变量前面加 “类名.”