Java 中的静态块

yufei       6 年 前       1464

日常 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
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.