Java父类、子类以及内部类加载顺序

本文探讨了Java中类的加载顺序,包括内部变量的初始化顺序,静态与非静态内容的加载时机,以及父类与子类的关系。强调了静态代码块在类加载时的执行,以及构造代码块与构造方法的执行顺序。此外,还介绍了Java内部类的使用限制和注意事项。
摘要由CSDN通过智能技术生成

1.Java类内部加载顺序

  • 首先我们看一个类内部变量的加载顺序:
  • Java的类在Java编译器中,一个基本规则是按照变量定义的顺序来觉得初始化顺序,但对于静态变量和构造方法有些特殊的规则,如下:
  1. 静态代码块,在类被加载的时候运行,因此只加载一次,且优先于其他变量,常用于运行一些项目启动时需要运行的代码,比如加载项目需要的系统资源等等。
    示例:
static{
   
	System.out.println("静态代码块");
}
  1. 构造代码块,在创建对象的时候执行,且先于构造函数执行。目的也是用于初始化对象,关于和构造函数的不同,我的理解是,如果有多个不同参数的构造函数,就可以提取他们共同的初始化语句到构造代码块,减少重复。

示例:

{
   
	System.out.println("子类构造代码块");
}
  1. 还有一种普通代码块,写在方法内部。
    示例:
public void Method(){
   
	{
   
		System.out.println("普通代码块");
	}
}

2.父类和子类的加载顺序

  • 在加载父类和子类时,父类优先于子类,但静态内容要先执行,包括静态方法和静态代码块。即:
    1. 先执行父类静态内容
    2. 再执行子类静态内容
    3. 再执行父类构造代码块,父类构造方法
    4. 再执行子类构造代码块,子类构造方法

3.Java内部类

  • Java四种内部类的介绍,我是学习的下面这篇文章
  • java内部类及类的加载顺序(二)
  • 提几点注意事项:
    1.普通成员内部类中不能有static静态变量或静态方法,除非声明为final。原因:一个静态域只有一个实例,不过对于每个外部类对象,会分别有一个单独的内部类实例;如果这个静态域不是final,它就可能不是唯一的(借鉴上面的文章)
    2.普通成员内部类中可以直接调用外部类的变量和方法,包括静态的。
    3.静态内部类中只能调用外部类的静态变量和方法。

4.代码示例及结果

//父类
public class SuperClass {
   
    static{<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值