欢迎来到天天文库
浏览记录
ID:62033546
大小:68.00 KB
页数:7页
时间:2021-04-15
《Java对象与内存管理机制.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1。实例变量和类变量的内存分配类变量:使用static修饰的成员变量是类变量,属于该类本身实例变量:没有使用static修饰的成员变量是实例变量,属于该类的实例由于同一个JVM内每个累只对应一个Class对象,因此同一个JVM内的一个类的类变量只需一块内存空间。对于实例变量而言,该类没创建一次实例,就需要为实例变量分配一块内存空间,所以,程序中有几个实例,实例变量就需要几块内存空间。2.类变量的初始化时机总是出于实例变量的初始化之前我们先看下下面三段代码:1)因为两个实例变量都是在创建变量的时候才开始分配空间,此时num2还没有分配,所以前向引用就会出现编译错误。12intn
2、um=num2+ 3; //非法前向引用,会报错intnum2=22)因为两个类变量在JVM加载类的时候分配空间,此时num2还没有分配,所以前向引用就出现变异错误.12static intnum=num2+ 3; //非法前向引用,会报错taticintnum2 =23)因为类变量num2在JVM加载类的时候空间已经分配好,而num在创建实例的时候踩分配空间,此时num2已经分配成功了,所以num前向引用成功。12intnum=num2+3; //正确使用staticintnum2=2; 由上面三段代码块就可以验证得:类变量的初始化时机总是出于实例变量的初始化之前3.Jav
3、a对象的初始化方式及其执行顺序Java对象的初始化方式有三种:1)构造器2)初始化块 3)定义变量时指定初始化值如果这三种初始化方式同时出现,也要注意,他们也有一个执行顺序的规定:1)静态初始化块只在类第一次创建对象的时候运行一次,后面就不会再运行,而类在每次创建对象时,非静态初始化块总是会运行一次。1234567891011121314151617public class Test{ static { System.out。println(”执行--—静态初始化代码块."); } { System.out。println("执行--—非静态初始化代码块。
4、"); } publicstatic voidmain(String[]args){ for(inti=1;i<=2; i++){ System.out.println("创建第 ”+ i+”个对象"); newTest(); System.out.println(); }}} 运行结果:2)构造器每次创建对象时,构造器必然有执行的机会,此时,非静态初始化块必定也将获得机会并且运行在构造器之前123456789101112131415161718publicclass Test{ { System.out.println(”执行--—非
5、静态初始化代码块."); } public Test(){ System。out.println(”执行—--构造器."); } publicstatic voidmain(String[]args){ for(inti =1;i<=2;i++){ System.out.println("创建第”+i+" 个对象"); newTest(); System。out.println(); } } }运行结果:3)定义变量时指定的初始化值和初始化块中指定的初始值的执行顺序与他们在源程序中的排列顺序相同。验证代码一:1234567891011121314
6、1516publicclassTest{ String i="定义变量时指定的初始化值"; { i="初始化块中指定的初始值”; } publicstatic voidmain(String[] args){ for(inti=1; i<=2; i++) { System。out。println("创建第"+i+”个对象"); System。out。println(newTest()。i); System.out.println(); } } }运行结果验证代码二:12345678910111213publicclass Test{
7、 { i= ”初始化块中指定的初始值”; } String i="定义变量时指定的初始化值”; publicstaticvoid main(String[]args){ for(inti=1;i <= 2;i++) { System.out.println(”创建第"+i+"个对象”); System.out.println(newTest().i); System.out.println(); } 141516}} 运行结果:4。关于父子实例的内存控制(一般情况下是不
此文档下载收益归作者所有