Java 构造器之构造器的隐式调用和显式调用
来源:互联网 发布:php统计总访问量代码 编辑:程序博客网 时间:2024/05/17 22:22
内容参考《疯狂Java程序员的基本修养》李刚 著
一、结论
当调用某个类的构造器来创建Java对象时,系统总会先调用父类的非静态初始化块进行初始化,这个调用是隐式的。接着会调用父类的一个或多个构造器执行初始化,这个调用即可通过 super 显示调用,也可隐式调用。
假设有如下继承关系:
则构造器的执行顺序为:
1、执行Object类的非静态初始化块;
2、隐式或显式调用Object类的一个或多个构造器执行初始化;
3、执行Parent累的非静态初始化块;
4、隐式或显式调用Parent类的一个或多个构造器执行初始化;
5、执行Mid累的非静态初始化块;
6、隐式或显式调用Mid类的一个或多个构造器执行初始化;
7、执行Sub累的非静态初始化块;
8、隐式或显式调用Sub类的一个或多个构造器执行初始化;
二、代码验证
代码为:
Parent类:
package com.tide.controller;/** * Created by wengliemiao on 16/3/26. */public class Parent { public Parent() { System.out.println("Parent 类无参构造器"); } public Parent(String name) { this(); System.out.println("Parent 类带一个参数构造器, name 参数为: " + name); System.out.println(); } { System.out.println("Parent 类非静态初始化块"); }}
Mid 类:
package com.tide.controller;/** * Created by wengliemiao on 16/3/31. */public class Mid extends Parent { public Mid() { System.out.println("Mid 类无参构造器"); } public Mid(String name) { super(name); System.out.println("Mid 类带一个参数构造器, name 参数: " + name); } public Mid(String name, int age) { this(name); System.out.println("Mid 类带两个参数构造器, age: " + age); System.out.println(); } { System.out.println("Mid 类非静态初始化块"); }}
Sub 类:
package com.tide.controller;/** * Created by wengliemiao on 16/3/26. */public class Sub extends Mid { public Sub() { super("哈哈哈", 2333); System.out.println("Sub 类无参构造器"); } public Sub(int a) { this(); System.out.println("Sub 类带一个参数构造器, a: " + a); System.out.println(); } { System.out.println("Sub 类非静态初始化块"); } public static void main(String[] args) { new Sub(111); }}
输出结果:
因此执行顺序为:
1、父类的非静态初始化块,构造器;
2、本类的非静态初始化块,构造器。
注:
1. super用于显示调用父类的构造器,this用于显示调用本类中另一个重载的构造器;
2. super 调用和this 调用都只能在构造器中使用,并且都必须作为构造器的第一行代码;
3. super 调用和 this 调用最多只能使用其中之一, 而且最多只能调用一次。
0 0
- Java 构造器之构造器的隐式调用和显式调用
- java的构造器调用
- 父类构造器的隐式调用和显式调用
- 父类构造器的隐式调用和显式调用
- 构造器的调用
- Java 构造器调用构造器之“找不到符号”
- Java基础之构造器调用顺序
- java 构造器中调用构造器
- think in java之构造器的真正调用顺序
- think in java之构造器的真正调用顺序
- Think in Java之构造器的真正调用顺序
- Think in Java之构造器的真正调用顺序
- Think in Java之构造器的真正调用顺序
- Java中的构造器(构造方法)的调用
- java继承之(隐式或显式)调用父类的构造函数
- java 关于继承中构造器和方法的调用
- java构造器的调用顺序
- java 构造器的调用顺序
- phpcms二次开发_创建功能模块
- 轮廓查找问题小记
- jQuery.form.js使用
- 算法:实现链表存储的回文字符串判断
- 美容护肤小技巧
- Java 构造器之构造器的隐式调用和显式调用
- iOS中GCD的使用小结
- DOM操作表格和样式
- 再生龙u盘制作及使用 - Linux - clonezilla
- STM32模拟IIC驱动OLED屏 原理+源码
- 根据并发访问量级来演变Mysql架构
- ubuntu14.04设置SublimeText3支持中文并设为默认编辑器
- Android Studio Ndk 编程
- sklearn PCA