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

相关推荐
Datacarts4 分钟前
亚马逊爆款选品:数据采集与三方服务商对接
开发语言·人工智能·python·信息可视化
赫瑞11 分钟前
Java中的 Dijkstra 算法
java·算法
pip install USART12 分钟前
解决@Autowired注解失败导致空指针bug
java·spring·bug
摇滚侠19 分钟前
限流的方法,Redis 计算器限流算法、滑动时间窗口限流算法、漏漏桶限流算法、令牌桶限流算法,Java 开发
java·数据库·redis
IronMurphy22 分钟前
Java 泛型深度解析:编译期类型擦除机制与 PECS 准则
java·windows·python
always_TT22 分钟前
C语言保留字与标识符规则
c语言·开发语言
yang_upup24 分钟前
Matlab里simulink的元器件介绍
开发语言·matlab
滑雪的企鹅.32 分钟前
Kotlin云头条技术点剖析(项目复习02)——用户协议页面
android·开发语言·kotlin
南山love33 分钟前
spring-boot项目实现发送qq邮箱
java·服务器·前端
wuqingshun31415936 分钟前
说一下spring的bean的作用域
java·后端·spring