java代码块,分为 静态代码块,构造代码块,普通代码块,同步代码块四种。
先简单介绍下
静态代码块:使用static修饰的代码块</span>
构造代码块:直接在类中编写的代码块</span>
普通代码块:在方法内部的代码块</span>
同步代码块:与线程锁线程同步有关的用synchronized修饰的代码块(未涉及)
测试比较简单,只有两个类
// 普通类
public class Parent
{
static int i = 0;
static
{
System.out.println("Parent-我是静态代码块" + i);
}
{
System.out.println("Parent-我是构造代码块" + i);
}
public Parent()
{
i++;
{
System.out.println("Parent-我是构造方法的方法代码块a");
}
System.out.println("Parent-我是构造方法");
{
System.out.println("Parent-我是构造方法的方法代码块b");
}
}
public static void show()
{
// 普通方法中肯定不能存在静态
// 在静态代码中 java编译失败,不可以存在静态代码块
// static
// {
//
// }
System.out.println("我是静态方法show");
}
}
// 主函数类
public class Main
{
static
{
System.out.println("Main-我是静态代码块");
}
{
System.out.println("Main-我是构造代码块");
}
public static void main(String[] args)
{
new Parent();
new Parent();
new Parent();
new Main();
}
}
打印结果:
Main-我是静态代码块
静态代码块:优先于main方法执行
Parent-我是静态代码块0
静态代码块:优先于构造代码块和构造方法执行,只在第一次使用本类的时候执行一次
Parent-我是构造代码块0
构造代码块:优先于构造方法执行,且每次实例化对象执行一次
Parent-我是构造方法的方法代码块a
Parent-我是构造方法
Parent-我是构造方法的方法代码块b
Parent-我是构造代码块1
Parent-我是构造方法的方法代码块a
Parent-我是构造方法
Parent-我是构造方法的方法代码块b
Parent-我是构造代码块2
Parent-我是构造方法的方法代码块a
Parent-我是构造方法
Parent-我是构造方法的方法代码块b
Mian中的静态代码块已经执行,实例化的时候不再执行,静态代码块只运行一次
Main-我是构造代码块