リフレクション利用時のクラスロードのタイミング
正しいかわからんけど
- ①クラス
public class StaticSample { { System.out.println("static"); } public StaticSample() { // TODO Auto-generated constructor stub System.out.println("instance化"); } public void test(){ System.out.println("method called"); } }
- ②利用
public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException { Class ss = Class.forName("jp.co.alabaster.sample.Sample"); System.out.println("01"); Method m = ss.getDeclaredMethod("test", null); System.out.println("02"); StaticSample sample = (StaticSample)ss.newInstance(); System.out.println("03"); m.invoke(sample, null); System.out.println("04"); }
- ③結果
01 02 static instance化 03 method called 04
・インスタンスを取得するまでは、ロードされない
・クラスロードされなくても、リフレクションが利用可能