|
||||||||||||||||||||||
|
リフレクション ~ クラス名からの Class オブジェクトの取得クラス名からの Class オブジェクトの取得さて、前回の例では Employee オブジェクトから、それに関連する Class オブジェクトを取得しました。 今回はクラスの名前から、その Class オブジェクトを取得します。 クラス名から Class オブジェクトを取得するには、 forName メソッドを利用します。 forName メソッドは文字列でクラス名を受け取り、そのクラス名に対する Class オブジェクトを返します。
package com.keicode.java.test;
public class ReflectionTestApp3 {
public static void main(String[] args) {
try {
Class<?> c;
c = Class.forName("com.keicode.java.test.Employee");
System.out.println(c.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
この実行結果は当然ながら・・・ com.keicode.java.test.Employee となります。 もしここで、存在しないクラス名 "XYZ" を渡すと、 ClassNotFoundException 例外が投げられ、 catch ブロックにて次のようなスタックトレースが出力されました。 java.lang.ClassNotFoundException: XYZ at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:186) at com.keicode.java.test.ReflectionTestApp3.main(ReflectionTestApp3.java:8) 自分で書いたコードは一番下のフレーム (ReflectionTestApp3.java:8) の箇所だけですが、 Java の実行環境の内部動作の分も見えてくるのでスタックトレースはこんな風に長くなります。 |
|
© 2010 Java 入門 |
|||||||||||||||||||