内存中对象实例化细节
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
相关文章推荐
- 交换机升级排障实例
- sql2008启动代理未将对象应用到实例解决方案
- Ajax教程实例详解
- 初识JQuery 实例一(first)
- JQuery入门基础小实例(1)
- Jquery具体实例介绍AJAX何时用,AJAX应该在什么地方用
- 一个小助手批处理实例代码
- XStream使用方法总结附实例代码
- asp.net得到本机数据库实例的两种方法代码
- C++多继承同名隐藏实例详细介绍
- PHP入门学习的几个不错的实例代码
- JSP发送邮件实例
- C#中的IEnumerable简介及简单实现实例
- jQuery Ajax 实例详解 ($.ajax、$.post、$.get)
- PHP中的流(streams)浅析
- PHP curl使用实例
- 非常好用的JsonToString 方法 简单实例
- 举例说明JavaScript中的实例对象与原型对象
- C#确保只有一个实例在运行的方法
- PHP中CURL的几个经典应用实例