首页 > 代码库 > 朝花夕拾——看清java实例变量的初始化内幕

朝花夕拾——看清java实例变量的初始化内幕

    过一段时间可能就得去找实习,今天在宿舍翻开以前常放在枕头边的大砖头《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内存操作是有一定帮助的。

朝花夕拾——看清java实例变量的初始化内幕