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静态代码快的载入

posted @ 2018-01-27 18:18  zhchoutai  阅读(129)  评论(0编辑  收藏  举报