过一段时间可能就得去找实习,今天在宿舍翻开以前常放在枕头边的大砖头《Java编程思想》打算重温下之前学的知识点,看到有关java初始化的一些知识,综合之前看过的网页和书籍,记下自己对java实例变量初始化的理解,仅供需要的朋友参考,也为自己积累一些java编程应该注意的知识点。
java中对实例变量的初始化可以在三个地方出现:定义实例变量时指定初始值;初始化块中为实例变量指定的初始值;构造器中为实例变量指定的初始值。如果理解其内部初始化的规律,一般在编程和面试中出现的变量赋值问题基本都可以解决。
初始化原则:在上述三种情况下,程序初始化总是先对实例变量进行内存分配后,再把三种情况中出现的赋值部分移到构造器中实现,其赋值顺序总是为:构造器内的赋值语句位于最后,其他两种按照程序源代码顺序。
理解起来比较抽象,下面给出代码和图示,并借助JDK提供给的javap工具查看代码的编译情况
InitTest类
public class InitTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Test a = new Test("测试", 2); System.out.println(a); } } class Test{ String name; int age; public Test(String name,int age){ this.name = name; this.age = age; weight = 5.0; } { System.out.println("执行非静态块"); weight = 3.0; } double weight = 2.3; public String toString(){ return "Test[name = "+name+",age = "+age+",weight = "+weight+"]"; } }在执行main函数后,会出Test对象进行初始化,对Test.class进行编译并查看。
先对实例变量进行申明,并为对象分配对应变量内存
然后把所有赋值的部分移动到构造器中,顺序如图示
总而言之,理解引用对象的初始化规律对学习JVM内存操作是有一定帮助的。
原文地址:http://blog.csdn.net/u010794180/article/details/43378073