java对象与内存管理机制

java对象与内存管理机制

ID:35514943

大小:128.50 KB

页数:7页

时间:2019-03-25

java对象与内存管理机制_第1页
java对象与内存管理机制_第2页
java对象与内存管理机制_第3页
java对象与内存管理机制_第4页
java对象与内存管理机制_第5页
资源描述:

《java对象与内存管理机制》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.实例变量和类变量的内存分配类变量:使用static修饰的成员变量是类变量,属于该类本身实例变量:没有使用static修饰的成员变量是实例变量,属于该类的实例由于同一个JVM内每个累只对应一个Class对象,因此同一个JVM内的一个类的类变量只需一块内存空间。对于实例变量而言,该类没创建一次实例,就需要为实例变量分配一块内存空间,所以,程序中有几个实例,实例变量就需要几块内存空间。2.类变量的初始化时机总是出于实例变量的初始化之前我们先看下下面三段代码:1)因为两个实例变量都是在创建变量的时候才

2、开始分配空间,此时num2还没有分配,所以前向引用就会出现编译错误。12intnum=num2+3;//非法前向引用,会报错intnum2=22)因为两个类变量在JVM加载类的时候分配空间,此时num2还没有分配,所以前向引用就出现变异错误。12staticintnum=num2+3;//非法前向引用,会报错taticintnum2=23)因为类变量num2在JVM加载类的时候空间已经分配好,而num在创建实例的时候踩分配空间,此时num2已经分配成功了,所以num前向引用成功。12intnum=

3、num2+3;//正确使用staticintnum2=2;由上面三段代码块就可以验证得:类变量的初始化时机总是出于实例变量的初始化之前3.Java对象的初始化方式及其执行顺序Java对象的初始化方式有三种:1)构造器2)初始化块3)定义变量时指定初始化值如果这三种初始化方式同时出现,也要注意,他们也有一个执行顺序的规定:1)静态初始化块只在类第一次创建对象的时候运行一次,后面就不会再运行,而类在每次创建对象时,非静态初始化块总是会运行一次。1234567891011121314151617publ

4、icclassTest{static{System.out.println("执行---静态初始化代码块.");}{System.out.println("执行---非静态初始化代码块.");}publicstaticvoidmain(String[]args){for(inti=1;i<=2;i++){System.out.println("创建第"+i+"个对象");newTest();System.out.println();}}}运行结果:2)构造器每次创建对象时,构造器必然有执行的机会,

5、此时,非静态初始化块必定也将获得机会并且运行在构造器之前123456789101112131415161718publicclassTest{{System.out.println("执行---非静态初始化代码块.");}publicTest(){System.out.println("执行---构造器.");}publicstaticvoidmain(String[]args){for(inti=1;i<=2;i++){System.out.println("创建第"+i+"个对象");newT

6、est();System.out.println();}}}运行结果:3)定义变量时指定的初始化值和初始化块中指定的初始值的执行顺序与他们在源程序中的排列顺序相同。验证代码一:12345678910111213141516publicclassTest{Stringi="定义变量时指定的初始化值";{i="初始化块中指定的初始值";}publicstaticvoidmain(String[]args){for(inti=1;i<=2;i++){System.out.println("创建第"+i+

7、"个对象");System.out.println(newTest().i);System.out.println();}}}运行结果验证代码二:1234567891011121314publicclassTest{{i="初始化块中指定的初始值";}Stringi="定义变量时指定的初始化值";publicstaticvoidmain(String[]args){for(inti=1;i<=2;i++){System.out.println("创建第"+i+"个对象");System.out.p

8、rintln(newTest().i);System.out.println();}}1516}运行结果:4.关于父子实例的内存控制(一般情况下是不用内部类来验证的,但是都是一样的啦,我偷懒下,所以使用了内部类,大家原谅哈)1)当子类重写父类方法后,父类表面上只是调用属于自己的被子类重写的方法。12345678910111213141516171819202122232425publicclassTest{classBase{Base(){this.info();}publicvo

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。