Java类的初始化顺序

类初始化顺序遵循以下三个原则(优先级依次递减)
        1、静态对象(变量)优先于非静态对象(变量)初始化,其中静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次;

        2、父类优先于子类初始化;

        3、成员变量按照定义先后顺序进行初始化;

例如:静态变量、非静态变量、静态代码块、非静态代码块、构造函数、父类、子类等。

他们的初始化顺序是:父类静态变量 > 父类静态代码块 > 子类静态变量 > 子类静态代码块 > 父类非静态变量 > 父类非静态代码块 > 父类构造函数 > 子类非静态变量 > 子类非静态代码块 > 子类构造函数。
 

1.对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序是?

public class Test1 {// 静态变量public static String staticField = "静态变量";// 变量public String field = "变量";// 静态初始化块static {System.out.println(staticField);System.out.println("静态初始化块");}// 初始化块{System.out.println(field);System.out.println("初始化块");}// 构造器public Test1() {System.out.println("构造器");}public static void main(String[] args) {new Test1();}
}

执行结果如下:

2.在继承场景下,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺是?

class Parent { // 静态变量public static String p_StaticField = "父类--静态变量";// 变量public String p_Field = "父类--变量";// 静态初始化块static {System.out.println(p_StaticField);System.out.println("父类--静态初始化块");}// 初始化块{System.out.println(p_Field);System.out.println("父类--初始化块");}// 构造器public Parent() {System.out.println("父类--构造器");}
}
public class Test2 extends Parent {// 静态变量public static String s_StaticField = "子类--静态变量";// 变量public String s_Field = "子类--变量";// 静态初始化块static {System.out.println(s_StaticField);System.out.println("子类--静态初始化块");}// 初始化块{System.out.println(s_Field);System.out.println("子类--初始化块");}// 构造器public Test2() {System.out.println("子类--构造器");}// 程序入口public static void main(String[] args) {new Test2();}
}

 执行结果如下:

3.静态变量和静态初始化块之间、变量和初始化块之间的先后顺序又是怎样呢? 

public class Test3 {
// 静态变量
public static TestA a = new TestA();
// 静态初始化块
static {System.out.println("静态初始化块");
}
// 静态变量
public static TestB b = new TestB();public static void main(String[] args) {new Test3();}
}
class TestA {public TestA() {System.out.println("Test--A");}
}
class TestB {public TestB() {System.out.println("Test--B");}
}

执行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/247224.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring-事务支持

目录 一、事务概述 二、引入事务场景 三、Spring对事务的支持 Spring实现事务的两种方式 声明式事务之注解实现方式 1.在Spring配置文件中配置事务管理器 2. 在Spring配置文件引入tx命名空间 3. 在Spring配置文件中配置“事务注解驱动器”,通过注解的方式控…

容器技术发展史,编排与容器的技术演进之路——2

目录: 容器技术发展史 Jail时代 1979 年 贝尔实验室发明 chroot2000 年 FreeBSD 4.0 发行 FreeBSD Jail2001 年 Linux VServer 发行2004 年 Solaris Containers 发行云时代 2006 年 google 推出 Process Containers2008 年 LXC 推出2011 年 CloudFoundry 推出 Ward…

RH850P1X芯片学习笔记-Pin Functions

文章目录 Pin Connection Diagrams术语定义 Pin ListPort OverviewIntroductionFunctional OverviewPort CategoryOperation Mode运行模式 Port Function寄存器地址映射 Port寄存器描述Pn/JP0 — Port RegisterPPRn/JPPR0 — Port Pin Read RegisterPMn/JPM0 — Port Mode Regi…

apk和小程序渗透测试

apk和小程序渗透测试 文章目录 apk和小程序渗透测试小程序渗透测试apk和小程序的抓包安装证书apk渗透 小程序渗透测试 小程序的默认路径在 C:\Program Files (x86)\Tencent\WeChat\WeChatApp 使用UnpackMiniApp、wxappUnpacker工具完成逆向 先打开UnpackMiniApp.exe工具 选…

8.4 Windows驱动开发:文件微过滤驱动入门

MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的,传统文件过滤驱动相对来说较为复杂,且接口不清晰并不符合快速开发的需求,为了解决复杂的开发问题,微过滤驱动就此诞生,微过滤驱动在编写时更简单,…

重要通知丨JumpServer开源堡垒机V2社区版即将停止维护的通知

尊敬的JumpServer开源堡垒机用户:您好! 如《关于JumpServer开源堡垒机V2版本产品生命周期的相关说明》所示,JumpServer开源堡垒机V2版本(社区版)将于2023年12月31日停止维护支持。 在过去两年多的时间里,…

MYSQL练题笔记-聚合函数-有趣的电影

一、题目相关内容 1)相关的表和题目 2)帮助理解题目的示例,同时告诉我查询结果的格式 二、自己初步的理解 其实从题目就可以看出来,三个关键点,非,奇数,降序排列。 我去找下奇数的函数是哪一…

接口压测指南

接口压测指南 一、 为什么需要进行接口压测二 、接口压测的目标是什么三、 用什么工具进行接口压测四、 接口压测核心指标4.1 JMeter的报告模板4.2 ApiPost报告模板 五、 接口慢如何排查5.1 大体排查思路5.2 排查工具5.3 压测经验 一、 为什么需要进行接口压测 突然有一天领导…

在用户不安装 ImageMagick 的情况下使用

需要以编程的方式配置环境变量(手工配置也是一样的效果) 1、首先要配置 path 将 {ImageMagick目录} 配置到path中 2、配置 MAGICK_HOME 将 {ImageMagick目录} 配置到MAGICK_HOME中 3、配置MAGICK_CODER_MODULE_PATH 将 {ImageMagick目录}\modules\…

JVM:双亲委派(未完结)

类加载 定义 一个java文件从编写代码到最终运行,必须要经历编译和类加载的过程,如下图(图源自b站视频up主“跟着Mic学架构”)。 编译就是把.java文件变成.class文件。类加载就是把.class文件加载到JVM内存中,得到一…

大模型技术的发展与实践

一、大模型的概念 大型语言模型,也称大语言模型、大模型(Large Language Model,LLM;Large Language Models,LLMs) 。 大语言模型是一种深度学习模型,特别是属于自然语言处理(NLP)的…

【五分钟】熟练使用numpy.cumsum()函数(干货!!!)

引言 numpy.cumsum()函数用于计算输入数组的累积和。当输入是多维数组时,numpy.cumsum()函数可以沿着指定轴计算累积和。 计算一维数组的累计和 代码如下: # 计算一维数组的累计和 tmp_array np.ones((4,), dtypenp.uint8) # [1, 1, 1, 1] print(&…