java 类初始化的顺序

在类中变量定义的顺序决定了它们初始化的顺序。即使变量定义散布在方法定义之间,它们仍会在任何方法(包括构造器)被调用之前得到初始化。例如:

java 复制代码
class Window {
Window(int marker){
System.out.println("Window("+ marker + ")");
    }
}

class House {
Window w1=new Window(1);

House(){
System.out.println("House()");
w3=new Window(33);
  }


Window w2 =new Window(2);
void f(){
System.out.println("f()");

}

Window w3=new Window(3);
}

public class OrderOfInitialization {
public static void main(String[] args){
House h= new House();
h.f();
    } 
}

输出:

java 复制代码
输出:
Window(1)
Window(2)
Window(3)
House()
Window(33)
f()

在 House 类中,故意把几个 Window 对象的定义散布在各处,以证明它们全都会在调用构造器或其他方法之前得到初始化。此外,w3在构造器中被再次赋值。由输出可见,引用w3被初始化了两次:次在调用构造器前,次在构造器调用期间(第一次引用的对象将被丢弃,并作为垃圾回收)。这乍一看可能觉得效率不高,但保证了正确的初始化。试

相关推荐
阿幸软件杂货间2 分钟前
Office转PDF转换器v1.0.py
开发语言·pdf·c#
扯淡的闲人12 分钟前
多语言编码Agent解决方案(5)-IntelliJ插件实现
开发语言·python
丑小鸭是白天鹅21 分钟前
Kotlin协程详细笔记之切线程和挂起函数
开发语言·笔记·kotlin
ChillJavaGuy28 分钟前
常见限流算法详解与对比
java·算法·限流算法
sali-tec31 分钟前
C# 基于halcon的视觉工作流-章34-环状测量
开发语言·图像处理·算法·计算机视觉·c#
java搬砖工-苤-初心不变31 分钟前
基于 lua_shared_dict 的本地内存限流实现
开发语言·junit·lua
寻星探路36 分钟前
数据库造神计划第六天---增删改查(CRUD)(2)
java·大数据·数据库
毕设源码-朱学姐1 小时前
【开题答辩全过程】以 4S店汽车维修保养管理系统为例,包含答辩的问题和答案
java·spring boot·汽车
charlie1145141911 小时前
Kotlin 的 apply / with / run 详解
开发语言·kotlin·程序设计·面对对象
Tiger_shl1 小时前
【层面一】C#语言基础和核心语法-02(反射/委托/事件)
开发语言·c#