示例代码:
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 static 13 { 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 PersonDemo 42 { 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变量。
时间: 2024-12-28 20:58:56