先说结论
关于具有继续关联的类,它们的类和对象组织递次为:父类的类组织器() -> 子类的类组织器() -> 父类成员变量的赋值和实例代码块 -> 父类的组织函数 -> 子类成员变量的赋值和实例代码块 -> 子类的组织函数。
试验代码以下:
public class ExtensionTest { public static void main(String[] args) { new SubClass(); } } class SuperClass { { System.out.println("我是父类实例块"); } static { System.out.println("我是父类类组织块"); } public SuperClass() { System.out.println("我是父类组织函数块"); } } class SubClass extends SuperClass { { System.out.println("我是子类实例块"); } static { System.out.println("我是子类类组织块"); } public SubClass() { System.out.println("我是子类组织函数块"); } }
效果:
我是父类类组织块
我是子类类组织块
我是父类实例块
我是父类组织函数块
我是子类实例块
我是子类组织函数块
诠释:
类组织块是初始化类的时刻实行的,而初始化类起首得加载类(不加载类进内存固然没法初始化)。
类实例块是放在该类组织函数最前面和父类组织函数以后实行的。由于子类的组织函数挪用之前,会先挪用父类的组织函数。
基于上述两条划定规矩,我们再来看实行递次。
new SubClass()也就是要组织SubClass这个类的一个对象,而要组织这个对象,起首必需把这个类的形貌、定义加载进内存(类加载)。因而要先加载这个类(不过此时还未初始化)。
加载完这个类以后,想要组织这个类的对象。然则此时这个类的静态变量还未被初始化,因而要先初始化这个类,然则初始化这个类须要先初始化它的父类,因而此时就变成了,加载父类->初始化父类(挪用静态块,即类组织块)
->初始化子类(挪用静态块,即类组织块)。
然后就能够组织这个类的对象了,组织这个类的对象之前,要先组织父类对象,因而会先挪用父类的组织函数,而挪用父类组织函数之前又会先挪用父类的实例块。
然后就到了子类组织函数,但是实行之前一样要先挪用子类的实例块,末了才是子类的组织函数的函数体。
专栏
文章概况
16 小时前宣布
java中具有继续关联的类及其对象初始化递次
34 次浏览 · 读完须要 5 分钟
0
先说结论
关于具有继续关联的类,它们的类和对象组织递次为:父类的类组织器() -> 子类的类组织器() -> 父类成员变量的赋值和实例代码块 -> 父类的组织函数 -> 子类成员变量的赋值和实例代码块 -> 子类的组织函数。
试验代码以下:
public class ExtensionTest { public static void main(String[] args) { new SubClass(); } } class SuperClass { { System.out.println("我是父类实例块"); } static { System.out.println("我是父类类组织块"); } public SuperClass() { System.out.println("我是父类组织函数块"); } } class SubClass extends SuperClass { { System.out.println("我是子类实例块"); } static { System.out.println("我是子类类组织块"); } public SubClass() { System.out.println("我是子类组织函数块"); } }
效果:
我是父类类组织块
我是子类类组织块
我是父类实例块
我是父类组织函数块
我是子类实例块
我是子类组织函数块
诠释:
类组织块是初始化类的时刻实行的,而初始化类起首得加载类(不加载类进内存固然没法初始化)。
类实例块是放在该类组织函数最前面和父类组织函数以后实行的。由于子类的组织函数挪用之前,会先挪用父类的组织函数。
基于上述两条划定规矩,我们再来看实行递次。
new SubClass()也就是要组织SubClass这个类的一个对象,而要组织这个对象,起首必需把这个类的形貌、定义加载进内存(类加载)。因而要先加载这个类(不过此时还未初始化)。
加载完这个类以后,想要组织这个类的对象。然则此时这个类的静态变量还未被初始化,因而要先初始化这个类,然则初始化这个类须要先初始化它的父类,因而此时就变成了,加载父类->初始化父类(挪用静态块,即类组织块)
->初始化子类(挪用静态块,即类组织块)。
然后就能够组织这个类的对象了,组织这个类的对象之前,要先组织父类对象,因而会先挪用父类的组织函数,而挪用父类组织函数之前又会先挪用父类的实例块。
然后就到了子类组织函数,但是实行之前一样要先挪用子类的实例块,末了才是子类的组织函数的函数体。
你能够感兴趣的
批评
默许排序 时候排序
载入中...
显现更多批评
以上就是Java中具有继续关联的类及其对象初始化递次的代码示例的细致内容,更多请关注ki4网别的相干文章!