您的位置:首页 > 编程语言 > Java开发

java基础之 ----对象初始化过程

2016-07-05 19:04 597 查看
Person p = new Person("zhangsan",20)
该句话都做了什么事情?
1、因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中
2、执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3、在堆内存中开辟空间,分配内存地址。
4、在堆内存中建立对象的特有属性,并进行默认初始化。
5、对属性进行显式初始化。
6、对对象进行构造代码块初始化
7、对对象进行对应的构造函数初始化。
8、对内存地址付给栈内存中的p变量。


https://img-blog.csdn.net/20160705165946350

https://img-blog.csdn.net/20160705190221531

https://img-blog.csdn.net/20160705190325887

1、栈中:有了main主函数的对象p

栈中:new Person();

2、执行静态代码块,如果有的话,给Person.class类进行初始化。

3、空间开辟,有了属性name和age,空间开辟好后,就有了内存地址比如说是0x0023。

4、默认初始化:

name = null;

age = 0;

5、显示初始化:

(如果在定义成员变量时就赋值,比如说

private static name = “lisi”;

那么

name = “lisi”;

age = 0;

)

6、构造代码块初始化

7、构造函数初始化:

name = “zhangsan”;

age = 20;

8、把内存地址值0x0023赋给了p,p就指向了Person(“zhangsan”,20)这个对象

class StaticCode {
int num = 9;
StaticCode(){
System.out.println("b");
}
//静态代码块
static{
System.out.println("a");
}

{
System.out.println("c"+this.num);
}
StaticCode(int x){
System.out.println("d");
}
public static void show(){
System.out.println("show run");
}
}
class StaticCodeDemo {
static{
System.out.println("b");
}
public static void main(String[] args){
new StaticCode(4);
new StaticCode();
new StaticCode();
System.out.println("over");
}
static {
System.out.println("c");
}
}
/*
执行结果:
b
c
a
c9
d
c9
b
c9
b
over
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: