1. 程式人生 > >finalkeyword對JVM類載入器的影響

finalkeyword對JVM類載入器的影響

public fin port args stat gpo sys tint ()

眾所周知,當訪問一個類的變量或方法的時候。假設沒有初始化該類。就會先去初始化一個類


可是,當這個類的變量為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類載入器的影響