首页 > 代码库 > Java学习之对象的初始化过程

Java学习之对象的初始化过程

示例代码:

 1 class Person 2 { 3     private Person(){} 4     private String name = "hah"; 5     private int age; 6     private static  String country = "cn";
    //构造函数
7 Person(String name,int age) 8 { 9 this.name = name;10 this.age = age;11 }
    //静态代码块
12 static13 {14 System.out.println("hello, man"); 15 }
    //构造代码块
16 {17 System.out.println(name+".."+age);18 }19 public void setName(String name)20 {21 this.name = name;22 }23
    //非静态函数24 public void speak()25 {26 System.out.println(this.name+"..."+this.age);27 }28   
    //静态函数29 public static void showCountry()30 {31 System.out.println("country="+Person.country);32 Person.method();33 }34 public static void method()35 {36 System.out.println("method run");37 }38 39 }40 41 class PersonDemo42 {43 public static void main(String[] args) 44 {45 Person p = new Person("zhangsan",20);46 p.setName("lisi");47 new Person();48 }49 }

 

例如:Person p = new Person("zhangsan",20);

该句话都做了什么事情?

  1)因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。

  2)执行该类中的static代码块(如果有的话),给Person.class类进行初始化。

  3)在堆内存中开辟空间,分配内存地址(十六进制:如:0x0015)。

  4)在堆内存中建立对象的特有属性。并进行默认初始化。 (如:name = null; age = 0;)

  5)对属性进行显示初始化。(如:name = "haha";)

  6)对对象进行构造代码块初始化。

  7)对对象进行对应的构造函数初始化。

  8)将内存地址付给栈内存中的p变量。

 

Java学习之对象的初始化过程