java--01--final

来源:互联网 发布:李世默 知乎 编辑:程序博客网 时间:2024/06/07 20:42
class TextDemo {    static {        System.out.println("静态初始化块。。。");    }    static **final** String compileConstant="疯狂Java讲义";}public class TextDemo_01{    public static void main(String[] args){        System.out.println(TextDemo.compileConstant);    }}

这里写图片描述

class TextDemo {    static {        System.out.println("静态初始化块。。。");    }    static String compileConstant="疯狂Java讲义";}public class TextDemo_01{    public static void main(String[] args){        System.out.println(TextDemo.compileConstant);    }}

这里写图片描述

如果仔细 看两个差不多的程序就会发现,在第一个程序中的在类变量前面加了final修饰,在main方法中调用时,静态初始化代码块中的输出没有执行,发现TextDemo类没有初始化,但是在第二段程序中的compileConstant没有加final修饰,却执行了静态初始化代码块。查资料得知,对于一个final型的类变量,如果该类变量的值在编译时就可以确定下来,那么这个类变量就相当于宏变量,java编译器会在编译时直接把这个类变量出现的地方替换成它的值,因此即使程序使用该静态类变量,也不会导致该类的初始化。欢迎补充。。。
0 0
原创粉丝点击