java的类加载顺序

本文详细阐述了Java中创建子类对象时的加载顺序,从静态变量和静态代码块到非静态成员的初始化,再到构造函数的调用,揭示了静态与非静态成员的加载差异以及父类构造方法在子类构造方法之前的执行原则。通过示例代码展示了这一过程,并提供了具体的输出结果。
摘要由CSDN通过智能技术生成

在创建子类对象时,类的加载顺序 

1.父类静态变量显式赋值、父类静态代码块。(静态之间按定义先后顺序)
2.子类静态变量显式赋值、子类静态代码块。(按定义顺序)
3.父类非静态变量显式赋值(父类成员变量)、父类非静态代码块。(非静态之间按定义顺序)

4.父类构造函数。
5.子类非静态变量(子类成员变量)、子类非静态代码块。(按定义顺序)。

6.子类构造函数。
 

总结:1.静态总是优先于非静态被加载,所以静态方法无法访问非静态变量、方法。非静态可以访问静态。2.在创建子类对象时,会先调用父类构造方法,在调用子类构造方法。

父类

public class Animal {
	public static String name="lishi";//静态变量
	public int age=12;
	static {
		System.out.println("父类静态变量:"+name);
		System.out.println("父类静态代码块");
	}
	public Animal(){
		System.out.println("父类构造方法");
	}
}

子类

public class Dog extends Animal{
	public static String name="dog";
	static {
		System.out.println("子类静态变量:"+name);
		System.out.println("子类静态代码块");
	}
	public Dog(){
		System.out.println("子类构造方法");
	}
}

创建子类对象

public class Test {
	public static void main(String[] args){
		Dog dog=new Dog();
	}
}

输出结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IABQL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值