1、forName方法
forNameは静的メソッドであり、その役割は、呼び出しによってクラス名に対応するClassオブジェクトを取得し、同時にClassオブジェクトをロードすることです。
クラス名を文字列(xmlなど)で保存すると、プログラムの実行時にロードを動的に呼び出すことができます。
注:呼び出されたパラメーターがクラス名またはメソッドである場合にのみ使用できます。
2. newInstance()メソッド
役割:オブジェクトをインスタンス化します。戻り値の型はObjectです。newとの違いは、newはパラメータを取得できますが、newInstance()は取得できないことです。同時に非パラメータクラスを初期化します。通常、forName()と組み合わせて使用されます。
String str = "java.util.Date";
Class cl1= Class.forName(str);//加载java.util.Date类
Object obj = cl1.newInstance();//实例化cl1
3. getMethod()メソッド
getMethodメソッドはgetFieldメソッドに似ています。getFieldメソッドは、ドメイン名を表す文字列に基づいてFieldオブジェクトを返します。getMethodメソッドは、メソッド名と関連パラメーターに従って検索する必要のあるメソッドオブジェクトを見つけて返します。
getMethodとgetDeclareMethodsの違いは、後者はメソッドオブジェクトの配列を返すため、結果から必要なメソッドオブジェクトを自分で見つける必要があることです。
原型:メソッドgetMethod(String name、Class ... parameterTypes)
パラメータの説明:名前:メソッドの名前
parameterTypes:メソッドのパラメータータイプのリスト(パラメーターの順序は、メソッドが宣言されたときにパラメーターリストに従って配置する必要があります)
戻り値:メソッド名とパラメータに準拠するメソッドオブジェクト
エラーをスローします:NoSuchMethodException
理由:照会するメソッドオブジェクトが見つからなかったか、メソッド名が「<init>」または「<clinit>」です
NullPointerException
理由:照会するメソッドオブジェクトの名前がnullです
SecurityException
理由:呼び出されたクラスまたはその親クラスに呼び出し権限がありません
例:
Method m1 = Employee.class.getMethod("getName");
Method m2 = Employee.class.getMethod("raiseSalary",double.class);
上記の例では、getNameメソッドのメソッドポインタm1とm2、およびEmployeeクラスのraiseSalaryメソッドを取得しています。
4.メソッドを呼び出す
ロール:現在のMethodオブジェクトにラップされているメソッドを呼び出します。
原型:オブジェクトinvoke(Object obj、Object ... args)
パラメータの説明:obj:インスタンス化後のオブジェクト
args:メソッド呼び出しに使用されるパラメーター
戻り値:objおよびargsと呼ばれるメソッドの戻り値による
エラーをスローします:IllegalAccessException
理由:メソッドオブジェクトがJava言語の実行制御を強制するか、objオブジェクトにアクセスする権限がありません
IllegalArgumentException
理由:メソッドはインスタンス化メソッドであり、呼び出される指定されたオブジェクトはインスタンス化されたクラスまたはインターフェースではありません
例:
Class l = Class.forName("test1.A");
Object obj1 = l.newInstance();
Object[] obj2 = new Object[1];
obj2[0] = new String("hello world");
Method m = l.getMethod("a1",new Class[] { String.class });
Object obj3 = m.invoke(obj1, obj2);