代码块 / 初始化块
修饰符 {
方法体;
};
1、修饰符可选,且只能选择 static
2、分号可以省略
3、属于类中成员,类似于方法,将逻辑语句封装在方法体内
4、与方法不同,无方法名、返回值、参数,只有方法
5、不需要通过对象、类进行显式调用,而是加载类时或创建对象时进行隐式调用
6、相当于另外一种形式的构造器,是构造器的补充机制,可以进行初始化操作
7、应用场景:多个构造器存在重复语句,抽象到初始化块中,提高代码复用性
普通代码块
1、无 static
2、每创建一个对象,就执行
3、创建对象时被隐式调用,每创建一个对象,就调用一次
4、可调用任意成员
5、位置
(1)类中,为构造代码块
(2)方法中,为普通代码块
6、编译器会将普通代码块,嵌入到每个构造器中,嵌入位置在 super() 和构造器代码之间
静态代码块
1、有 static
2、对类初始化,随类的加载而执行,且只执行一次
3、只能调用静态成员,不会执行普通代码块
类加载时机
1、创建类的对象
2、访问类的静态成员
3、子类初始化,父类也会加载;先加载父类,后加载子类
4、反射
类加载顺序
1、外部类
(1)外部类初次加载,会初始化静态变量、静态代码块、静态方法,但不会加载内部类
(2)实例化外部类、调用外部类的静态方法、静态变量,则外部类必须先进行加载,但只加载一次
(3)直接调用静态内部类时,外部类不会加载
2、内部类
(1)在初次调用的时候加载,且只加载一次
(2)延时加载的,只会在第一次使用时加载,不使用就不加载
创建对象时,初始化顺序
1、父类静态代码块、静态属性
2、子类静态代码块、静态属性
3、父类普通代码块、普通属性
4、父类构造器
5、子类普通代码块、普通属性
6、子类构造器
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战