1,子类的实例化

  1,子父类中的构造函数的特点。

  在子类构造对象时,发现,访问子类构造函数时,父类也运行了。
  为什么呢?
  原因是:在子类的构造函数中第一行有一个默认的隐式语句。 super();

  子类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参数的构造函数。
   
  为什么子类实例化的时候要访问父类中的构造函数呢?
  那是因为子类继承了父类,获取到了父类中内容(属性),所以在使用父类内容之前,
  要先看父类是如何对自己的内容进行初始化的。

  所以子类在构造对象时,必须访问父类中的构造函数。
  为什么完成这个必须的动作,就在子类的构造函数中加入了super()语句。

  如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用
  父类中哪个构造函数。同时子类构造函数中如果使用this调用了本类构造函数时,
  那么super就没有了,因为super和this都只能定义第一行。所以只能有一个。
  但是可以保证的是,子类中肯定会有其他的构造函数访问父类的构造函数。

  注意:supre语句必须要定义在子类构造函数的第一行。因为父类的初始化动作要先完成。

    1,子类构造时会通过super()方法先构造父类(子类的所有构造函数都会访问父类中空参数的构造函数,如果父类中没有空参构造函数,在子类重要添加super()在    子类  的构造第一行)。

    2,构造函数不存在继承和覆盖

  

  

  

  2,一个对象实例化过程:
  Person p = new Person();
  1,JVM会读取指定的路径下的Person.class文件,并加载进内存,
      并会先加载Person的父类(如果有直接的父类的情况下).
  2,在堆内存中的开辟空间,分配地址。
  3,并在对象空间中,对对象中的属性进行默认初始化。
  4,调用对应的构造函数进行初始化。
  5,在构造函数中,第一行会先到调用父类中构造函数进行初始化。
  6,父类初始化完毕后,在对子类的属性进行显示初始化。
  7,在进行子类构造函数的特定初始化。
  8,初始化完毕后,将地址值赋值给引用变量.

2,代码块初始化过程

java 子类的实例化和代码块初始化过程的更多相关文章

  1. java类成员变量与代码块初始化

    首先根据下面的这个一段代码:引入关于java初始化顺序的问题public class InitationTest extends Person { public InitationTest() { S ...

  2. Java 中静态代码块初始化问题测试

    Java 中静态代码块初始化问题测试 原创 情况一:变量是 static final 修饰的"编译期常量",如 public static final String a = &qu ...

  3. java中静态代码块初始化顺序

    (一)java 静态代码块 静态方法区别    一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下, ...

  4. java 对象初始化和代码块初始化顺序

    class A { public A(){ System.out.println("测试!!!!!!!!!!!"); } } class Demo19 extends A { { ...

  5. JAVA程序执行顺序(静态代码块》非静态代码块》静态方法》构造函数)

    总结:静态代码块总是最先执行. 非静态代码块跟非静态方法一样,跟对象有关.只不过非静态代码块在构造函数之前执行. 父类非静态代码块.构造函数执行完毕后(相当于父类对象初始化完成), 才开始执行子类的非 ...

  6. 子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是

    按照先后顺序: 1,静态先于非静态代码库执行(静态代码块随着类的加载而加载,初始化只执行一次) 2,父类先于子类 3,非静态代码块优于构造函数执行 所以执行顺序如下: 父类B静态代码块->子类A ...

  7. Java子父类间静态代码块、非静态代码块、构造方法的执行顺序

    子类A继承父类B,A a=new A(); 正确的执行顺序是:父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A ...

  8. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  9. java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包

    Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...

随机推荐

  1. 并查集类的c++封装,比較union_find algorithm四种实现方法之间的性能区别

    问题描写叙述: 在计算机科学中,并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.有一个联合-查找算法(union-find algorithm ...

  2. ProgressSeekBar

    ProgressSeekBar.rar

  3. css Hack,用IE11模拟测试的,条件注释要找真IE去测,模拟的无效

    <!DOCTYPE html> <!--[if lt IE 7 ]> <html class="ie6 ie"> <![endif]--& ...

  4. Newton's Method

    在求最优解时,前面很多地方都用梯度下降(Gradient Descent)的方法,但由于最优步长很难确定,可能会出现总是在最优解附近徘徊的情况,致使最优解的搜索过程很缓慢.牛顿法(Newton's M ...

  5. Asp.Net 之 当前上下文中不存在名称" Server "

    在开发中经常用到应用程序的物理路径,在获取应用程序中文件的物理路径时最常用: string path = Server.MapPath("Document/example.doc" ...

  6. 由strupr,strlwr体会如果将字符常量转换为变量进行修改,体会常量的静态存储

    #include <stdio.h> #include <string.h> int main() { char s[]="Copywrite 1999-2000 G ...

  7. 五个在XML文档中预定义好的实体

    下面是五个在XML文档中预定义好的实体: < < 小于号 > > 大于号 & & 和 &apos; ' 单引号 " " 双引号 实体 ...

  8. Centos 6.5 安装 chrome , mplayer , alarm , clock

    http://my.oschina.net/jianweizhang/blog/306946 Chrome wget http://chrome.richardlloyd.org.uk/install ...

  9. [记录]使用setTimeout实现不同时间进行切换文本的颜色

    开始使用的是setinterval(),但是setinterval()的time是固定的,假如我想改变time,就需要每次clearInterval()一次. 如: setInterval(funct ...

  10. 浅谈用java解析xml文档(三)

    接上一篇,本文介绍使用JDOM解析xml文档, 首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初, JDOM作 ...