リフレクション利用時のクラスロードのタイミング

正しいかわからんけど

  • ①クラス
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

インスタンスを取得するまでは、ロードされない
・クラスロードされなくても、リフレクションが利用可能