Person p = new Person(“zhangsan”,20);
这句话都做了什么事情?
1). 因为new用到了Person .class,所以会先找到Person .class文件并加载到内存中
2). 执行该类中的static代码块,如果有的话,给Person .class类进行初始化
3). 在堆内存中开辟空间,分配内存地址
4). 在堆内存中建立对象的特有属性,并进行默认初始化
5). 对属性进行显示初始化
6). 对对象进行构造代码块初始化
7). 对对象进行对应的构造函数初始化
8). 将内存地址赋给栈内存中的p变量
静态代码块给类初始化的> 构造代码块给对象初始化的>构造函数给对应对象初始化的
静态代码块执行一次,构造代码块每次调用构造方法的时候都会执行。
他们的执行顺序是:静态代码块 -- 构造代码块 -- 构造方法
静态代码块特点:随着类的加载而执行,只执行一次,并优先于主函数,用于给类进行初始化 |
|