类加载顺序
来源:互联网 发布:谷歌网络博物馆 编辑:程序博客网 时间:2024/06/05 13:25
关于通过new获取实例,来调用该类的方法或是其继承的父类的方法,规则如下:
代码奉上,根据现象推原理
package com.wang.oop.execute;//父类:静态代码块,构造方法,普通方法,代码块public class SuperClass {public SuperClass() {System.out.println("SuperClass默认的构造方法");}public SuperClass(String str){System.out.println("SuperClass带参的构造方法");}public static void test(){System.out.println("SuperClass静态方法");}static{System.out.println("SuperClass静态代码块");}{System.out.println("SuperClass代码块");}public void sup(){System.out.println("SuperClass普通方法");}}
package com.wang.oop.execute;//子类:静态代码块,构造方法,普通方法,代码块public class SubClass extends SuperClass{public SubClass() {System.out.println("SubClass默认构造方法");}public SubClass(String str){System.out.println("SubClass带参构造方法");}static{System.out.println("SubClass静态代码块");}{System.out.println("SubClass代码块");}public void sub(){System.out.println("SubClass普通方法");}}
测试及结果
package com.wang.oop.execute;public class LoadSortTest {public static void main(String[] args) {//获取SubClass类的实例new SubClass("测试").sub();/** * new SubClass("测试").sub(); * 单执行此句输出结果: * SuperClass静态代码块 * SubClass静态代码块 * * SuperClass代码块 * SuperClass默认的构造方法 * * SubClass代码块 * SubClass带参构造方法 * SubClass普通方法 * 说明: * 调用子类,先执行父类的静态代码块子类静态代码块,父类代码块父类默认构造方法; * 子类代码块子类相应的构造方法;最后执行所调用的方法 * !!!静态代码块和静态方法不一样 * */new SubClass().sup();/** * new SubClass().sup(); * 单执行此句输出结果: * SuperClass静态代码块 * SubClass静态代码块 * * SuperClass代码块 * SuperClass默认的构造方法 * * SubClass代码块 * SubClass带参构造方法 * SubClass普通方法 * 说明: * 调用子类,先执行父类的静态代码块子类静态代码块,父类代码块父类默认构造方法; * 子类代码块子类相应的构造方法;最后执行所调用的方法 * !!!静态代码块和静态方法不一样 * *//** * new SubClass("测试").sub(); * new SubClass().sup(); * 执行这两句输出结果: * SuperClass静态代码块 * SubClass静态代码块 * * SuperClass代码块 * SuperClass默认的构造方法 * SubClass代码块 * * SubClass带参构造方法 * SubClass普通方法 * * SuperClass代码块 * SuperClass默认的构造方法 * SubClass代码块 * * SubClass默认构造方法 //获取该类实例的方式(new默认构造/new带参构造) * SuperClass普通方法 * 比较看出: * 1.静态代码块只加载一次 * 2.基类(江湖人称“老头子”)会调用代码块、默认构造方法 * 3.具体的类会调用代码块、相应的构造方法(哪种方式获取的实例) */SuperClass.test();/** * SuperClass静态方法 */}}
结论测试中已经写出,另附
1.在Java中,一个类的构造方法在如下两种情况中总是执行:
> 创建该类的对象(实例化)
> 创建该类子类的对象(子类的实例化)
换言之,JVM总会按照父类 ——>子类的顺序执行一系列的构造方法
2.子类继承父类时构造方法调用规则:
> 如子类构造方法中未出现super显式调用父类有参构造方法,也没有通过this显式调用自身其他构造方法,则系统默认调用父类无参构造方法
> 子类的构造方法中通过super显式调用父类带参构造方法,那么将执行父类相应的构造方法
> 若子类构造方法中通过this显式调用自身其他构造方法,在相应构造方法中应用以上两条规则
0 0
- 简单类加载顺序
- 类的加载顺序
- tomcat类加载顺序
- 类的加载顺序
- jdk加载类顺序
- Java类加载顺序
- 类加载顺序
- 类加载顺序
- java类加载顺序
- 类加载顺序
- Java类加载顺序
- 类加载顺序
- 类的加载顺序
- 类的加载顺序
- 类的加载顺序
- 类的加载顺序
- Java 类加载顺序
- 类中方加载顺序
- jzoj C组 2017.1.15比赛
- Android进阶之路 - Notification(通知)的详细使用方式
- https连接的前几毫秒发生了什么
- 二分法查找(Java)
- OIBH杯第三次普及组模拟赛T3 最大约数和
- 类加载顺序
- JSTL-数据库标签库
- win10的文件夹(文件资源管理器)卡住了
- 流类库结构
- VB-SolidWorks绘制一个圆
- mysql 5.7.17单实例安装
- 回归!
- 使用国内源进行pip下载,极大提升下载的速度
- Centos 7 安装Mesos 所需依赖