浅谈Java中父类与子类的加载顺序详解

夜幕的黎明之末

夜幕的黎明之末

2016-02-19 09:21

下面是个浅谈Java中父类与子类的加载顺序详解教程,撑握了其技术要点,学起来就简单多了。赶紧跟着图老师小编一起来看看吧!
代码如下:

class Parent {
    // 静态变量
    public static String p_StaticField = "父类--静态变量";
    // 变量(其实这用对象更好能体同这一点,如专门写一个类的实例)
  
    //如果这个变量放在初始化块的后面,是会报错的,因为你根本没有被初始化
    public String p_Field = "父类--变量";
    // 静态初始化块
    static {
        System.out.println(p_StaticField);
        System.out.println("父类--静态初始化块");
    }
    // 初始化块
    {
        System.out.println(p_Field);
        System.out.println("父类--初始化块");
    }
    // 构造器
    public Parent() {
        System.out.println("父类--构造器");
    }
}
public class SubClass extends Parent {
    // 静态变量
    public static String s_StaticField = "子类--静态变量";
    // 变量
    public String s_Field = "子类--变量";
    // 静态初始化块
    static {
        System.out.println(s_StaticField);
        System.out.println("子类--静态初始化块");
    }
    // 初始化块
    {
        System.out.println(s_Field);
        System.out.println("子类--初始化块");
    }
    // 构造器
    public SubClass() {
        //super();
        System.out.println("子类--构造器");
    }
    // 程序入口
    public static void main(String[] args) {
        System.out.println("*************in main***************");
        new SubClass();
        System.out.println("*************second subClass***************");
        new SubClass();
    }
}

输出结果
父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
*************in main***************
父类--变量
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器
*************second subClass***************
父类--变量
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器

结果分析:
很显然在加载main方法后,静态变量不管父类还是子类的都执行了,然后才是父类和子类的的普通变量和构造器。这是因为,当要创建子类这个对象时,发现这个类需要一个父类,所以把父类的.class加载进来,然后依次初始化其普通变量和初始化代码块,最后其构造器,然后可以开始子类的工作,把子类的.class加载进来,在做子类的工作。

另外在Java中子类中都会有默认的调用父类的默认构造函数即super(),当仅仅有默认构造函数里
Java替你做了,我们可以做个实验,如果在父类中注释掉默认构造函数,加一个有参的构造函数时,如果
子类中不加super(argument),此时会报语法错误
如果我们把Main方法中的内容全注释掉,你会发现只会输出

    父类--静态变量
    父类--静态初始化块
    子类--静态变量
        子类--静态初始化块
        其它不会输出了。原因呢? 还要研究
展开更多 50%)
分享

猜你喜欢

浅谈Java中父类与子类的加载顺序详解

编程语言 网络编程
浅谈Java中父类与子类的加载顺序详解

java中子类继承父类,程序运行顺序的深入分析

编程语言 网络编程
java中子类继承父类,程序运行顺序的深入分析

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

java父类和子类初始化顺序的深入理解

编程语言 网络编程
java父类和子类初始化顺序的深入理解

Java中子类调用父类构造方法的问题分析

编程语言 网络编程
Java中子类调用父类构造方法的问题分析

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

浅谈Java变量的初始化顺序详解

编程语言 网络编程
浅谈Java变量的初始化顺序详解

初探Java类加载机制

Java JAVA基础
初探Java类加载机制

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

java中关于Map的三种遍历方法详解

java中关于Map的三种遍历方法详解

Track Image Loading效果代码分析

Track Image Loading效果代码分析
下拉加载更多内容 ↓