java父类子类顺序_Java中父类与子类的加载顺序

测试代码如下:

package cn.guoxj.test;

/**

* @author guoxjcn

* PersonClass是父类

*

*/

class PersonClass {

//类变量

public static String staticMethodValue=classVariableValue();

//成员变量

public String memberVariableValue = memberVariableValue();

//静态代码块

static{

System.out.println("我是PersonClass静态代码块---------------->Person");

}

//代码块

{

System.out.println("我是PersonClass代码块---------------->Person");

}

//构造器

public PersonClass(){

System.out.println("我是PersonClass构造器---------------->Person");

}

//成员变量的值

public String memberVariableValue(){

System.out.println("我是PersonClass的memberVariableValue---------------->Person");

return memberVariableValue;

}

//类变量的值

public static String classVariableValue(){

System.out.println("我是PersonClass的staticMethodValue---------------->Person");

return staticMethodValue;

}

//静态方法的值

public static void staticMethod(){

System.out.println("我是PersonClass的staticMethod方法---------------->Person");

}

}

----------------------------------------------------------------------------------------------------------------------

package cn.guoxj.test;

/**

* @author guoxjcn

* ChildClass是PersonClass的子类

*/

public class ChildClass extends PersonClass{

//类变量

public static String staticMethodValue=classVariableValue();

//成员变量

public String memberVariableValue = memberVariableValue();

//静态代码块

static{

System.out.println("我是ChildClass静态代码块---------------->Child");

}

//代码块

{

System.out.println("我是ChildClass代码块---------------->Child");

}

//构造器

public ChildClass(){

System.out.println("我是ChildClass构造器---------------->Child");

}

//成员变量的值

public String memberVariableValue(){

System.out.println("我是ChildClass的memberVariableValue---------------->Child");

return memberVariableValue;

}

//类变量的值

public static String classVariableValue(){

System.out.println("我是ChildClass的staticMethodValue---------------->Child");

return staticMethodValue;

}

//静态方法的值

public static void staticMethod(){

System.out.println("我是ChildClass的staticMethod方法---------------->Child");

}

public void saying(){

System.out.println("一切OK!");

}

}

---------------------------------------------------------------------------------------------------------------------------

package cn.guoxj.test;

public class LoadTest {

/**

* 测试父类与子类的加载顺利

*/

public static void main(String[] args) {

ChildClass childClass=new ChildClass();

childClass.saying();

}

}

------------------------------------------------------------------------------------------------------------------------------

测试结果:

我是PersonClass的staticMethodValue---------------->Person

我是PersonClass静态代码块---------------->Person

我是ChildClass的staticMethodValue---------------->Child

我是ChildClass静态代码块---------------->Child

我是ChildClass的memberVariableValue---------------->Child

我是PersonClass代码块---------------->Person

我是PersonClass构造器---------------->Person

我是ChildClass的memberVariableValue---------------->Child

我是ChildClass代码块---------------->Child

我是ChildClass构造器---------------->Child

一切OK!

说明:

父类静态变量->

类静态代码块->

子类静态变量->

子类静态代码块->

子类的成员变量->

父类的代码块->

父类的构造器->

子类的代码块->

子类的构造器

===其它见解:=====

JVM在对类初始化时调用了JVM内部的方法 和 . 是对类的类成员和

和静态语句块进行初始化(static部分);而 是对实例变量和一般语句块进行初始化的.

类在初始化时会把类变量(有static修饰的变量)静态语句块(static{   code   })放在第一位,其次是一般语句块({   code   }),然后再是构造函数,构造函数会去初始化类的一般成员变量.如果有继承关系的话,当然是先父类先初始化,

详细过程如下:                     a      父类静态成员和静态初始化块           b      子类静态成员和静态初始化块           c      父类实例成员和实例初始化块           d      父类构造方法           e     子类实例成员和实例初始化块           f      子类构造方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值