1.相同点:
1)都在jvm加载类时且在构造方法执行之前执行,在类中可以定义多个
2)一般在代码块中对一些static变量进行赋值
2.不同点: 1)静态代码块在非静态代码块之前执行: 静态代码块—》非静态代码块--》构造方法 2)静态代码块只在第一次new执行一次,之后就不再执行,而非静态代码块在每new一次就执行一次。
实例:
import java.util.Scanner;
public class Main {
public Main(){
System.out.print("默认构造方法--》");
}
{
System.out.print("非静态代码块--》");
}
// 静态代码块
static{
System.out.print("静态代码块--》");
}
// 静态成员方法
public static void test(){
System.out.println("普通方法中的代码块");
}
public static void main(String[] args){
Main main1=new Main();
Main.test();
Main main2=new Main();
Main.test();
}
}
运行截图: