static{}(静态代码块)与{}(非静态代码块)的异同点
相同点:
都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个。
一般在代码块中对一些static变量进行赋值。
不同点:
静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。
静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new
一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。
public class Testmain {
static class A{
//静态代码块
static{
System.out.println("static 代码块 A");
}
//代码块
{System.out.println("代码块 A");}
//构造器
public A(){
System.out.println("A");
}
}
static class B extends A{
//静态代码块
static{
System.out.println("static 代码块 B");
}
//代码块
{System.out.println("代码块 B");}
//构造器
public B(){
System.out.println("B");
}
}
public static void main(String[] args) {
new B();
}
}