浅谈Java变量的初始化顺序详解
2023-06-13 09:15:00 时间
规则1(无继承情况下):
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是
(静态变量、静态初始化块)>(变量、初始化块)>构造器
证明代码:
publicclassInitialOrderTest{
//静态变量
publicstaticStringstaticField="静态变量";
//变量
publicStringfield="变量";
//静态初始化块
static{
System.out.println(staticField);
System.out.println("静态初始化块");
}
//初始化块
{
System.out.println(field);
System.out.println("初始化块");
}
//构造器
publicInitialOrderTest(){
System.out.println("构造器");
}
publicstaticvoidmain(String[]args){
newInitialOrderTest();
}
}
结果显示:
静态变量
静态初始化块
变量
初始化块
构造器
规则2(有继承情况下):
子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成
classParent{
//静态变量
publicstaticStringp_StaticField="父类--静态变量";
//变量
publicStringp_Field="父类--变量";
//静态初始化块
static{
System.out.println(p_StaticField);
System.out.println("父类--静态初始化块");
}
//初始化块
{
System.out.println(p_Field);
System.out.println("父类--初始化块");
}
//构造器
publicParent(){
System.out.println("父类--构造器");
}
}//如果你想把这两个类放在同一个文件且名字起为SubClass,父类前不能加public
publicclassSubClassextendsParent{
//静态变量
publicstaticStrings_StaticField="子类--静态变量";
//变量
publicStrings_Field="子类--变量";
//静态初始化块
static{
System.out.println(s_StaticField);
System.out.println("子类--静态初始化块");
}
//初始化块
{
System.out.println(s_Field);
System.out.println("子类--初始化块");
}
//构造器
publicSubClass(){
System.out.println("子类--构造器");
}
//程序入口
publicstaticvoidmain(String[]args){
newSubClass();
}
}
结果显示:
父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
父类--变量
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器
规则2(静态变量和静态初始化块):
静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化的。同样,变量和初
始化块也遵循这个规律。
publicclasstestOrder{
//静态变量
publicstaticTestAa=newTestA();
publicTestCc=newTestC();
//静态变量
publicstaticTestBb=newTestB();
publictestOrder(){
System.out.println("inconstract");
}
//静态初始化块
static{
System.out.println("静态初始化块");
}
publicstaticvoidmain(String[]args){
newtestOrder();
}
}
classTestA{
publicTestA(){
System.out.println("Test--A");
}
}
classTestB{
publicTestB(){
System.out.println("Test--B");
}
}
classTestC{
publicTestC(){
System.out.println("Test--C");
}
}
结果显示:
Test--A
Test--B
静态初始化块
Test--C
inconstract
相关文章
- Java多线程详解_java支持多线程
- java static 变量存在哪_Java中的静态方法和静态变量存储在哪里?
- java 上传文件接口_Java接口实现文件上传
- java locale 中国_Java描述语言、国家和地理的类——Locale
- java 异步调用接口_Java接口异步调用[通俗易懂]
- java单例模式——详解JAVA单例模式及8种实现方式
- java运行环境_如何搭建Java运行环境?
- java平均的随机数_Java 随机数详解「建议收藏」
- 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」
- java事务_Java 事务详解[通俗易懂]
- java webservice接口开发教程_JAVA入门教程
- java使用xquery_如何使用Java XQuery
- java压缩与解压(Java.util.zip)详解编程语言
- Java学习笔记之九java二维数组及其多维数组的内存应用拓展延伸详解编程语言
- Java学习笔记之七java函数的语法规则总结详解编程语言
- Java学习笔记之三java中的变量和常量详解编程语言
- java中成员变量与局部变量的区别详解编程语言
- Java变量有哪些类型呢,让我们一起来看下!详解编程语言
- Java类(继承)初始化顺序详解编程语言
- java中怎么判断变量是不是String类型的详解编程语言
- java 中的 各种变量、代码块执行时机详解编程语言
- Java基础-运行原理及变量详解编程语言
- 实现使用Java实现Redis消息队列(redis消息队列java)
- Linux下查看Java进程的方法(linux查看java进程)
- Java更新提升Oracle软件性能(java更新oracle)