finalkeyword对JVM类载入器的影响

Posted zhchoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了finalkeyword对JVM类载入器的影响相关的知识,希望对你有一定的参考价值。

众所周知,当訪问一个类的变量或方法的时候。假设没有初始化该类。就会先去初始化一个类


可是,当这个类的变量为final的时候,就不一定了


请看以下的样例

package com.lala.shop;

import java.util.Random;

public class App 
{
    public static void main(String[] args)
    {
        System.out.println(User.c);
    }
}
class User
{
	public static final int b = new Random().nextInt(11);
	public static final int c = 20;
	static
	{
		System.out.println("user static init ...");
	}
}

当訪问

System.out.println(User.c);

的时候,没有输出 "user static init ..."

由于c是static final变量。且它等于20。在编译的时候就能够知道它的值。所以直接訪问a的值不会引起User类的初始化


当訪问

System.out.println(User.b);

的时候。就输出"user static init ..."

这个static final变量b由于在编译的时候无法知道它的确切的值。所以仅仅有等到执行的时候才干知道,所以自己訪问
User.b会引起User类的初始化。也就是static静态代码快的载入

以上是关于finalkeyword对JVM类载入器的影响的主要内容,如果未能解决你的问题,请参考以下文章

Java类载入器——类载入器层次与模型

类装载器ClassLoader

jvm载入过程

Java中用ClassLoader载入各种资源(类文件web资源)的方法

Java中用ClassLoader载入各种资源(类文件web资源)的方法

JVM的类加载机制