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. memcpy内存拷贝及优化策略图解

    一般内存拷贝与优化 代码实现 #include<iostream> usingnamespace std; //不安全的内存拷贝(当源内存地址与目标内存地址重叠时会产生错误) void h ...

  2. ArrowDrawable

    https://github.com/wly2014/ArrowDrawable https://github.com/ChrisRenke/DrawerArrowDrawable

  3. TQ210裸机编程(2)——LED流水灯

    两个文件start.S和led.c start.S .global _start                @声明一个全局的标号 _start:     bl main               ...

  4. python抓取伯乐在线的全部文章,对标题分词后存入mongodb中

    依赖包: 1.pymongo 2.jieba # -*- coding: utf-8 -*- """ @author: jiangfuqiang "" ...

  5. android122 zhihuibeijing 新闻中心NewsCenterPager加载网络数据实现

    新闻中心NewsCenterPager.java package com.itheima.zhbj52.base.impl; import java.util.ArrayList; import an ...

  6. html笔记 横向两列布局

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

    1.kill掉列出的进程: [root@localhost mysql]# ps -a | grep -i mysql pts/ :: mysqld_safe pts/ :: mysqld <d ...

  8. svn学习总结

    安装svn subversion服务参考博客http://huihai.iteye.com/blog/1985238 一:svn版本管理的作用 a:备份程序   项目开发过程中,防止不可控因素造成的资 ...

  9. php json_encode转JSON 编码显示中文

    对变量进行 JSON 编码显示中文 /**context":"/u2345/u43245/u2345 转成中文显示 * 对变量进行 JSON 编码[{"time" ...

  10. VIM 选择多行,复制粘贴

    进入VIM,比如编辑一个文件, 1.进行选择,是V模式,按V键,进入该模式,然后选择要复制的行 2. 选择好之后,再按y键,即使复制到了 3.然后光标进入要复制的行之后,按一下P键,就粘贴了,oh y ...