java中一个对象的初始化过程
- - CSDN博客编程语言推荐文章/*
该类演示了一个对象的初始化过程
*/
class Person
{. //堆内存默认初始化为null. private static String country="中国"; //静态属性,存在于方法区,随着类的加载而加载. System.out.println("静态代码块执行");. System.out.println("构造代码块执行");.
/* 该类演示了一个对象的初始化过程 */ class Person { private String name; //堆内存默认初始化为null private int age; //堆内存默认初始化为0 private static String country="中国"; //静态属性,存在于方法区,随着类的加载而加载 static //静态代码块 { System.out.println("静态代码块执行"); } //构造代码块 { System.out.println("构造代码块执行"); } Person(String name,int age) //构造函数 { this.name=name; this.age=age; } public void setName(String name) { this.name=name; } public String getName() { return name; } public void setAge(int age) { this.age=age; } public int getAge() { return age; } public void speak() { System.out.println(name+"...."+age); } public static void showCountry() { System.out.println(country); } } class PersonDemo { public static void main(String[] args) { Person p=new Person("张三",20); /* Person p=new Person("张三",20); 这句话的执行,内存中到底做了什么事情呢? 1.首先JVM以main函数为入口,把PersonDemo类加载进内存 2.在栈内存中建立引用变量变量p 3.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中 4.执行该类中的static代码块,给Person.class类进行初始化 5.在堆内存中开辟空间,分配内存地址 6.对堆内存中建立对象的特有属性,并进行默认初始化 7.对属性进行显示初始化 8.对对象进行构造代码块初始化 9.对对象进行与之对应的构造函数初始化 10.将内存地址赋给栈内存中的p变量 关于Person类中的静态属性和静态方法 静态属性和静态方法随着类的加载而加载,并存在于方法区中,方法区中存储的是静态变量和静态方法, 还有类的其他非静态函数,所以可以说方法区分为静态区和非静态区.当调用方法时,他们会被加载进 栈内存进行执行 */ } }