JAVA类初始化
JAVA类初始化
- 静态块只会调用一次
- 可以触发静态块的有:调用类静态非final属性;Class.forName方法;new关键字
- 非静态代码块,每次调用new关键字的时候都会调用
- 调用类字面量时和编译器常量时,不会触发静态代码块和非静态代码块
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| []import java.util.*;
class Initable{ static final int staticFinal = 47; static final int staticFinal2 = ClassInitialization.rand.nextInt(1000); static { System.out.println("Initializing Initable"); }
{ System.out.println("non static block initializing!!!!"); }
}
class Initable2{ static int staticNonFinal = 147; static{ System.out.println("Initializing Initable2"); } }
class Initable3{ static int staticNonFinal = 74; static{ System.out.println("Initializing Initable3"); } }
public class ClassInitialization{ public static Random rand = new Random(); public static void main(String[]arvg){ System.out.println("33333333333333333333333333"); Initable demo = new Initable(); System.out.println(Initable.staticFinal2); System.out.println("44444444444444444444444444"); Initable demo1 = new Initable(); System.out.println("555555555555555555555555555555"); System.out.println(Initable2.staticNonFinal); System.out.println("6666666666666666666666666666666"); try{ Class initable3 = Class.forName("Initable3"); }catch(Exception e){}
System.out.println("77777777777777777777777777777777"); try{ Class initable4 = Class.forName("Initable3"); }catch(Exception e){} System.out.println("88888888888888888888888888888888888"); System.out.println(Initable3.staticNonFinal);
} }
|