1、介绍
java中用"{}"括起来的称为代码块,代码块可分为以下四种:静态代码块 、构造代码块、构造方法块、普通代码块
2、详细说明
代码示例
public class DemoA {
static {
System.out.println("静态代码块");
}
{
System.out.println("构造代码块A");
}
public DemoA(){
System.out.println("构造函数代码块");
}
public void getString(){
System.out.println("普通方法代码块");
}
{
System.out.println("构造代码块B");
}
public static void main(String[] args) {
DemoA d1 = new DemoA();
d1.getString();
System.out.println("----------");
DemoA d2 = new DemoA();
d2.getString();
}
}
- 运行结果:
静态代码块
构造代码块A
构造代码块B
构造函数代码块
普通方法代码块
----------
构造代码块A
构造代码块B
构造函数代码块
普通方法代码块
- 以上代码通过字节码反编译后得到:
public class DemoA {
public DemoA() {
System.out.println("构造代码块A");
System.out.println("构造代码块B");
System.out.println("构造函数代码块");
}
public void getString() {
System.out.println("普通方法代码块");
}
public static void main(String[] args) {
DemoA d1 = new DemoA();
d1.getString();
System.out.println("----------");
DemoA d2 = new DemoA();
d2.getString();
}
static {
System.out.println("静态代码块");
}
}
通过以上运行结果可得知一下结论:
1、静态代码块只会在初始化对象时候执行一次
2、构造代码块由于普通代码块执行,但在静态代码块之后执行,与自己所在的代码位置无关
3、通过字节码反编译看出,编译器会将构造代码块存放于构造函数中,优于构造函数中其他代码执行。
运行优先级从高到低为:静态代码块 > 构造代码块 > 构造方法 > 普通代码块
网友评论