finalkeyword對JVM類載入器的影響
阿新 • • 發佈:2018-01-27
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類載入器的影響