public class Test{ /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Person p =new Person("lil",23); System.out.println(p.id+" "+p.id1); Person p1 =new Person("lili",23); System.out.println(p1.id+" "+p1.id1); Person p2 =new Person("lili",23); System.out.println(p1.id+" "+p2.id1); } } class Person { private final String name; private int age; public static int id=1; public static int id1=1; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public Person(String name,int age){ this.name = name; this.age = age; } static { id1++; } { id ++; } } /////////////////////////////输出结果: 2 2 3 2 4 2 static{}(静态代码块)与{}(非静态代码块)的异同点
相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个, 一般在代码块中对一些static变量进行赋值。 不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new 一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行 |
|