构造代码块
construct code block
使用{}包裹的代码区域,这里的代码区域特指位于 类中 方法外
每次创建对象都会执行
例子:
public class HelloA {
{
System.out.println("构造代码块");
}
}
作用
如果有多个构造方法(方法重载),都要执行相同的一段程序,就可以将这些代码写在构造代码块中
构造代码块 和 构造方法的执行顺序
public class HelloA {
{
System.out.println("构造代码块");
}
public HelloA(){
System.out.println("构造方法");
}
public static void main(String[] args) {
new HelloA();
System.out.println("---");
new HelloA();
}
}
执行结果:
构造代码块
构造方法
---
构造代码块
构造方法
总结:
- 先执行构造代码块,然后执行构造方法
- 每次创建对象都会执行 构造代码块
为什么构造代码块在构造方法前执行
通过反编译.class可知,在编译时,将构造代码块的代码,放到了构造方法的最开始处
static代码块
由static关键字修饰的代码块
加载类时就会执行,且执行一次
例子:
public class HelloA {
static{
System.out.println("静态代码块");
}
}
执行顺序
static代码块、构造代码块、构造方法的执行顺序
执行下面的代码,并观察打印结果
public class HelloA {
public HelloA(){
System.out.println("构造方法");
}
{
System.out.println("构造代码块");
}
static {
System.out.println("静态代码块");
}
public static void main(String[] args) {
new HelloA();
System.out.println("---");
new HelloA();
}
}
执行结果:
静态代码块
构造代码块
构造方法
---
构造代码块
构造方法
static代码块最开始执行,且仅执行一次
然后是构造方法执行
最后是构造方法执行
普通代码块
在条件语句、循环语句、方法 等用花括号括起来的部分。
将一部分代码组合成一个整体
public static void main(String[] args) {
{
int i=0;
}
int j=10;
}
感谢:
https://www.cnblogs.com/Heliner/p/10524699.html