古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。这篇文章主要讲述Android-Java-子类实例化过程(内存图)相关的知识,希望能为你提供帮助。
案例一:
package android.java.oop15; // 描述Person对象 class Person {// 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了public Person() { System.out.println("Person() run..."); }}// 描述Student对象 class Student extends Person {// 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了public Student() { System.out.println("Student() run..."); }}public class DemoTest {public static void main(String[] args) {Student student = new Student(); }}
执行结果:
文章图片
案例一分析: 为什么 new Student(); 会去调用 Person的构造方法?,然后Person的构造方法先执行 Student的构造方法后执行? 答:因为Student 继承了 Person,所以在实例化Student的时候 需要先父类初始化,才能拿到父类的内容,然后在Student子类初始化;
案例二:
package android.java.oop15; // 描述Person对象 class Person {// 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了public Person(String value) { System.out.println("Person() run..."); }}// 描述Student对象 class Student extends Person {// 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了public Student() { // super(); // 报错? 不能(隐式/显示)调用Person的无参构造方法,因为Person的无参构造方法已经没有了 // 显示调用 Person(String value){} super("人名"); System.out.println("Student() run..."); }}public class DemoTest {public static void main(String[] args) {Student student = new Student(); }}
执行结果:
文章图片
案例三:
package android.java.oop15; // 描述Person对象 class Person {// 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了public Person(String value) { System.out.println("Person() run..."); }}// 描述Student对象 class Student extends Person {// 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了public Student() { this("薛刚当"); // 注意:构造方法的第一行一旦写了 this/super 隐式的super就消失了 System.out.println("Student() run..."); }public Student(String value) { // super(); // 报错? 不能(隐式/显示)调用Person的无参构造方法,因为Person的无参构造方法已经没有了 // 显示调用 Person(String value){} super(value); // 注意:构造方法的第一行一旦写了 this/super 隐式的super就消失了 }}public class DemoTest {public static void main(String[] args) {Student student = new Student(); }}
执行结果:
文章图片
案例二 案例三 分析:所有的构造方法,隐式第一行 都是 super(); --调用-> public 父类(){} , 所有构造方法 第一行一旦写了 this() this(值) super() super(值) 第一行隐式的super()消失
案例四-(子父类 有内存图):
package android.java.oop15; // 描述Person对象 class Person {public String name = "李四"; public int age = 90; // 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了public Person() { System.out.println("Person() run..."); }}// 描述Student对象 class Student extends Person {// 构造方法就算不写 默认有一个隐式的无参构造方法:public Person(){} ,一旦写了构造方法 隐式的构造方法就消失了public Student() { System.out.println("Student() run... --> name:" + this.name + " age:" + age); }}public class DemoTest {public static void main(String[] args) {Student student = new Student(); }}
执行结果:
文章图片
以上案例对应内存图:
文章图片
【Android-Java-子类实例化过程(内存图)】
推荐阅读
- 零碎*学习安卓开发——使用网咯技术
- Android-Java-饿汉式单例模式(内存图)
- android中的wrap_content,match_parent, fill_parent
- androidLoader机制
- Android的Frangment的第一种声明方式
- Android-Java-静态变量与静态方法&普通变量与普通方法(内存图 完整版)
- 19.2.4 [LeetCode 42] Trapping Rain Water
- Android-普通变量与普通方法内存图
- Android-Java-静态变量