final关键字在JVM中的理解

Posted waibizi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了final关键字在JVM中的理解相关的知识,希望对你有一定的参考价值。

我们先来看两段代码与运行结果,根据结果去分析解释一下

 

不加final关键字:

package com.waibizi;



public class demo02 {

    public static void main(String[] args) {
        System.out.println(demo.test);
    }

}
class demo{
    public static String test="我是demo类的一个测试字符串";
    static {
        System.out.println("我是demo的静态代码块!!!");
    }
}

运行结果:

技术图片

 

 

加了final

package com.waibizi;



public class demo02 {

    public static void main(String[] args) {
        System.out.println(demo.test);
    }

}
class demo{
    public static final String test="我是demo类的一个测试字符串";
    static {
        System.out.println("我是demo的静态代码块!!!");
    }
}

结果:

技术图片

 

 

可以看到这两个的运行结果的不同,加了final关键字的java程序并不会去主动加载demo这个class类。

 

分析结果:如果加入了常量关键字,也就是final关键字,JVM会把这个常量放到demo02这个类里面的常量池当中,因此并不会主动加载demo这个类

 

 

我们来验证一下这个分析对不对吧,使用cmd编译java文件,然后再把demo这个的class文件删除,然后我们再运行一下程序,看看怎么输出的

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 

回车,出结果啦。

技术图片

以上是关于final关键字在JVM中的理解的主要内容,如果未能解决你的问题,请参考以下文章

java 中的static和final怎么使用?它们的区别?

深入理解Java中的final关键字

深入理解JVM-类加载初始化阶段-类的主动与被动引用

深入理解Java中的final关键字(转)

final .....finally ...... 和Finalize ......区别

深入理解final关键字以及一些建议