构造器,static块,匿名块执行顺序

本文探讨了Java中构造器与静态初始化块的执行顺序,通过一个实例展示了我最慢QAq、老子第二和我最快的打印顺序,揭示了Java对象创建及静态初始化的机制。
package shunXu;

public class test {

	public static void main(String[] args) {
		new executionSpeed();
	}
}


class executionSpeed{
	
	public executionSpeed() {
		System.out.println("我最慢QAq");
	}
	
	{
		System.out.println("老子第二");
	}
	
	static {
		System.out.println("我最快");
	}
}

result:
在这里插入图片描述

### 大括号内代码执行完成后的行为或状态分析 在Java编程语言中,大括号 `{}` 被用来定义代码的范围。不同的代码具有特定的作用域和生命周期,其执行完成后的行为取决于具体的代码类型[^1]。 #### 1. **局部代码** 局部代码通常用于限定某些变量的作用域或者临时封装一段逻辑。一旦该代码执行完毕,其中声明的局部变量会被销毁,释放内存资源。这意味着这些变量在其作用域之外不可访问。 ```java { int localVar = 42; // 局部变量 System.out.println(localVar); // 输出局部变量 } // 此处无法再访问localVar ``` #### 2. **构造代码** 构造代码会在每次创建对象实例时执行,并且优先于显式的构造函数调用。它主要用于初始化新对象的状态。当构造代码执行结束后,它的职责已经履行完毕,不会保留额外的状态信息。 ```java class Example { { System.out.println("This is an instance initializer block."); } public Example() { System.out.println("Constructor called."); } } new Example(); // 执行构造器前先运行上述匿名块 ``` #### 3. **静态代码 (Static Code Blocks)** 静态代码仅在一个类加载到JVM时执行一次,常用于初始化类级别的成员变量或其他一次性操作。由于它是与整个类关联而非具体某个对象,所以即使后续多次实例化也不会再次触发此部分逻辑[^4]。 ```java static { System.out.println("Static initialization..."); } ``` > 需要注意的是,在继承关系中存在的多个`static`会按照从父类至子类顺序依次只执行一遍;而普通的非静态初始器则遵循相反的方向——即由上层向下逐级覆盖并补充细节。 --- 相比之下,Python并不依赖花括号来界定语句组,而是通过一致性的缩进来实现相同功能[^3]。尽管如此,对于那些习惯C系家族风格的人来说可能会觉得不够直观明显,但实际上只要保持良好的编码规范就能很好地理解程序结构[^5]。 最后提醒一点关于跨平台移植性方面考虑的话,则建议尽量采用主流惯例书写方式以便他人阅读维护方便[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值