目录

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

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
啊我不会诶几秒前
【天梯赛练习】L2-035 完全二叉树的层序遍历
算法·深度优先
小希与阿树1 分钟前
阿里云RAM账号免密登录Java最佳实践
java·数据库·阿里云
Smark.5 分钟前
数据结构之BFS广度优先算法(腐烂的苹果)
数据结构·算法·宽度优先
小咖拉眯8 分钟前
L2-033 简单计算器满分笔记
笔记·算法
敲上瘾18 分钟前
线程池的封装(c/c++)
linux·服务器·c++·算法·缓存·池化技术
进阶的小木桩19 分钟前
VSTO幻灯片退出播放(C#模拟键盘鼠标的事件)
开发语言·c#·计算机外设
何似在人间57524 分钟前
SpringAI+DeepSeek大模型应用开发——3 SpringAI简介
java·ai·大模型开发·spring ai
长安城没有风31 分钟前
从入门到精通【MySQL】 JDBC
java·mysql
代码程序猿RIP32 分钟前
C++(22)—内存管理
开发语言·数据结构·c++·算法
qq_4017808238 分钟前
1.凸包、极点、极边基础概念
算法