您的位置:首页 > 其它

内存中对象实例化细节

2016-03-29 21:52 399 查看

创建一个对象的实例化过程:

eg: Student s = new Student();

1.JVM读取指定路径下的Student.class文件,并加载进内存(有定义父类先加载父类)

2.在堆内存中开辟空间,分配地址,并在对象空间中对对象属性进行系统默初始化

3.调用对应的构造函数进行初始化(super()先调用父类中的构造函数进行初始化)

4.父类初始化完成后对子类的属性进行显示初始化

5.进行子类函数的特定初始化

6.初始化完毕,将对象地址赋给引用变量

class Student
{
int schoolId = 2 ;
String name;
Student()
{
System.out.println("Student run......"+ "SchoolId = "+schoolId+ "-----name = "+name);
show();
}
void show()
{
System.out.println("Student  subject is ....");
}
}
class Graduate extends Student
{
int grade = 4;
String work;
Graduate(String work)
{
super();//“分水岭”,前面初始化父类,后面才初始化自己
//这句不写系统会自动加上
System.out.println("Student 加载完毕");
this.work = work;
System.out.println("Graduate 加载完毕");
}
void show()
{
System.out.println("Grade: " + grade+"-----Graduate work : "+ work);
}
}

class ExtendsDemo
{
public static void main(String[] args)
{
Graduate g = new Graduate(" engineer ");//初始化
//Graduate对象时,调用本类构造函数,super()先执行,初始化
//Student,Student()里的show()实际上是调用的是Graduate的
g.show();//如果子类没有覆盖父类的方法,会向上调用父类的
}
}


输出结果:

Student run……SchoolId = 2—–name = null

Grade: 0—–Graduate work : null

Student 加载完毕

Graduate 加载完毕

Grade: 4—–Graduate work : engineer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息