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-子类实例化过程(内存图)的更多相关文章
- java中子类实例化过程中的内存分配
知识点: 子类继承父类之后,实例化子类时,内存中子类是如何分配内存的呢? 下面,自己会结合一个例子,解释一下,一个子类实例化过程中,内存是如何分配的 参考博客:http://www.cnblogs.c ...
- Java 子类实例化对象的过程
子类实例化是否会实例化父类? 不会.父类在子类实例化过程中是并没有被实例化,java中new子类没有实例化父类,只是调用父类的构造方法初始化了,子类从父类继承来的属性,这个调用是子类的对象调用的父类的 ...
- java继承子类实例化过程(细节解释)
1 package face_08; 2 class Fu{ 3 Fu(){ 4 super(); 5 show(); 6 return; 7 } 8 void show() { 9 System.o ...
- 基础篇:详解JAVA对象实例化过程
目录 1 对象的实例化过程 2 类的加载过程 3 触发类加载的条件 4 对象的实例化过程 5 类加载器和双亲委派规则,如何打破双亲委派规则 欢迎指正文中错误 关注公众号,一起交流 参考文章 1 对象的 ...
- 各个JAVA场景下的内存图
首先,内存模型图,如下: 其次,一句话概括各个区域的作用: 1:程序计数器(Program Counter Register),让虚拟机中的字节码解释器通过改变计数器的值来获取下一条代码指令,比如分支 ...
- C# 子类实例化过程
刚研究了一下C#子类实例化的过程. 首先我遇到了如下一个问题: 有类A,里面写了一个有参的构造函数,并没有提供默认的无参构造函数.现在类B继承了类A,没有写任何的构造函数. 这时如果想实例化类B就会产 ...
- 13.Java基础_数组内存图
单个数组内存图 new int[3]: 在堆内存里申请一块空间存储int类型的变量(初始化时值都为0) int[] array: 在栈内存申请一块内存存储堆内存里数组的首地址 array[i]: 通过 ...
- 【Java】子类实例化过程
子类对象实例化的全过程 子类继承父类以后,就获取了父类中声明的属性或方法.创建子类的对象,在堆空间中,就会加载所有父类中声明的属性. 当我们通过子类的构造器创建子类对象时,我们一定会调用其父类的构造器 ...
- Java子类实例化的过程
//继承 class Work{ public Work(){ System.out.println("父类中的方法"); } } class Worker extends Wor ...
- Java中创建对象的内存图
所有人都知道面向对象思想,Java中的对象的创建在内存中是如何创建的,传智播客的视频看了一遍,把一些讲解的比较清晰的内容记录下来,方便记忆的更加深刻,Java中创建对象的过程,首先要理解JVM中栈.堆 ...
随机推荐
- leetcode279
动态规划 public class Solution { public int NumSquares(int n) { var list = new List<int>(); list.A ...
- json&pickle&shelve模块
之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了 ...
- sendmail报错Relaying denied
配置好sendmail后,使用php的mail()发送邮件,出现 SMTP server response: 550 5.7.1 Relaying denied. IP name lookup fai ...
- 使用jQuery+huandlebars遍历数组嵌套数组
兼容ie8(很实用,复制过来,仅供技术参考,更详细内容请看源地址:http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html) & ...
- Django_Form验证(一)
Django为我们提供了一个模板来做Form验证,不需要我们再去写复杂的验证代码了 简单的提交信息html页面: <form action="/fff/Form" metho ...
- day41 mysql详细操作
复习 create table 表名( id int primary key auto_increment, 字段名 数据类型[(宽度) 约束] )engine=innodb charset=utf8 ...
- 890. Find and Replace Pattern找出匹配形式的单词
[抄题]: You have a list of words and a pattern, and you want to know which words in words matches the ...
- 442. Find All Duplicates in an Array找出数组中所有重复了两次的元素
[抄题]: Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and o ...
- [leetcode]58. Length of Last Word最后一个词的长度
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...
- saltstack 使用salt ‘*’ test.ping 报错Minion did not return(转)
原文地址:http://blog.51cto.com/4634721/2093019 saltstack 使用salt ‘*’ test.ping 报错Minion did not return. [ ...