日常 Java 中,经常会看到下面这种类定义
JavaTester.java
class JavaTester { static int i; int j; static { i = 10; System.out.println("static block called "); } }
看到 static
和花括号 {}
里面的代码没有 ?
我第一次看到这种语法的时候很诧异,Java 竟然还有这种语法,这种语法又是什么意思呢?
Java 中的静态类
Java 中的这种语法,称之为 「 静态块 」,也可以说是 「 静态语句 」。
这种 「 静态块 」一般用于初始化 静态变量。
静态块中的代码只会执行一次:要么在第一次实例化该类的一个对象时执行,要么第一次访问类的静态成员时执行(即使我们并未初始化该类的一个实例)。
我们完善下上面的代码,写一个小范例演示以下静态块
class JavaTester { static int i; int j; static { i = 10; System.out.println("static block called "); } public static void main(String args[]) { System.out.println(JavaTester.i); } }
编译运行上面这段代码,输出结果如下
[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester static block called 10
静态快在构造方法之前执行
需要注意的是静态块的执行时机。
静态块会在构造函数之前被执行。
我们写一小段代码来演示下这个规则
class JavaTester { static int i; int j; static { i = 10; System.out.println("static block called "); } JavaTester() { System.out.println("initialize the JavaTester class"); } public static void main(String args[]) { JavaTester tester = new JavaTester(); } }
运行结果如下
[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester static block called initialize the JavaTester class
目前尚无回复