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被初始化了两次:次在调用构造器前,次在构造器调用期间(第一次引用的对象将被丢弃,并作为垃圾回收)。这乍一看可能觉得效率不高,但保证了正确的初始化。试

相关推荐
折哥的程序人生 · 物流技术专研1 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
xxie1237941 小时前
return与print
开发语言·python
秋91 小时前
从 Python 后端工程师转型 AI Engineer(AI 工程化)的完整补课清单(2026实战版)
开发语言·人工智能·python
一条泥憨鱼1 小时前
【Redis】数据类型和常用命令
java·数据库·redis·后端·缓存
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【78】沙箱(Sandbox)
java·人工智能·spring
程序员二叉2 小时前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
周航宇JoeZhou2 小时前
JB3-9-SpringAI(二)
java·ai·agent·多智能体·调度·智能体·观察
好家伙VCC2 小时前
Web Components主题热切换方案揭秘
java·前端
慕木沐2 小时前
Google ADK Java 1.0版本 核心机制与实战 Demo
java·开发语言·python
想吃火锅10052 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展