수업 시간에 방법을 얻으십시오.
공개 메소드 [] getMethods (); // 자체 및 상속을 포함한 모든 공개 메소드를 가져옵니다 (구현) - 메소드는 제네릭 <>를 지원하지 않습니다.
공개 방법 [] getDeclaredMethods (); // 모든 방법을 얻습니다 (개인, 공개, 보호, 액세스 권한과 관련이 없습니다). JDK1.8 이후에 개인 속성을 직접 얻을 수있는 상속 된 방법은 포함되지 않습니다. 권한을 설정할 필요는 없지만 GetDeclaredMethod 방법 만 메소드 방법에 대한 권한을 설정해야합니다.
공개 메소드 [] getMethod (String MethodName, Class <T> ... ParameterTypes); // 상속 된 매개 변수를 포함하여 지정된 공개 메소드를 얻는 수단 : MethodName : 획득 된 방법의 이름을 의미합니다.
ParameterTypes : 검색된 방법의 매개 변수를 나타내는 클래스 유형
공개 메소드 [] getDeclaredMethod (String MethodName, Class <T> ... ParameterTypes); //이 클래스에서 지정된 메소드를 얻는 수단 (개인, 보호, 공개, 액세스 권한과 관련이 없음) 및 상속 된 방법은 포함되지 않습니다.
클래스 Clazz = new Person (). getClass (); try {// 지정된 메소드를 호출/*@suppresswarnings ( "확인되지 않은") 메소드 me = clazz.getDeclaredMethod ( "getName", String.class); me.invoke (clazz.newinstance (), "Zhangsan"); */// 모든 메소드를 얻습니다 메소드 [] 메서드 = Clazz.getDeclaredMethods (); for (method method : methods) {system.out.println (method.getName ()); }} catch (예외 e) {e.printstacktrace (); }여러 매개 변수가있는 메소드 호출의 경우 : ParameterTypes와 GetDeclaredMethod가 클래스 유형의 공식 매개 변수로 이해할 수 있습니다. 호출을 호출함으로써 여러 매개 변수의 할당이 새로운 객체 [] {}에 가장 잘 래져 있습니다.
@SuppressWarnings ( "확인되지 않은") 메소드 메소드 메소드 = Clazz.getDeclaredMethod ( "getName", new Class [] {String.class, int.class}); method.invoke (new person (), new Object [] { "Zhangsan", 10});정적 메소드를 호출합니다
클래스 사용자 {public static void staticMethod () {System.out.println ( "static mthod invoke.");}} eG : class <user> clz = user.class; method staticMethod = clz.getMethod ( "staticMthod"); 정적 방법을 호출하는 두 가지 방법이 있습니다.
1. 정적 메소드는 모든 인스턴스 객체에 속하므로 클래스의 임의의 객체를 생성하고 객체를 통해 호출 할 수 있습니다.
staticMethod.invoke (clz.newinstance ()); // staticMethod에는 매개 변수가 없으므로 매개 변수 목록 유형이 채워지지 않습니다.
2. 기본 메소드가 정적 인 경우 지정된 OBJ 매개 변수를 무시하고 OBJ 매개 변수를 NULL로 설정할 수 있습니다.
staticMethod.invoke (null);
보다 관련된 콘텐츠 :
하나 : 반사 개념
클래스 클래스를 통해 특정 클래스의 멤버 변수 및 메소드를 얻고 호출 할 수 있습니다.
2 : 반사를 통해 방법, 변수 및 구성 방법을 얻습니다
@test // 클래스 정의 방법 가져 오기 공개 void testmethod ()는 예외 {@suppresswarnings ( "rawtypes") 클래스 clazz = class.forname ( "java.lang.string"); 메소드 [] m = clazz.getDeclaredMethods (); for (int i = 0; i <m.length; i ++) {system.out.println (m [i] .getName () + "" + m [i] .getDeclaringClass ()); }} @test // 클래스 정의 get variable public void testfield ()는 예외 {@suppresswarnings ( "rawtypes") 클래스 clazz = class.forname ( "java.lang.string"); 필드 [] fields = clazz.getfields (); for (field f : fields) {System.out.println (f.getName ()); }} @test // 반사를 통해 클래스 정의 생성자를 가져옵니다. public void testconstructor ()는 예외 {@suppresswarnings ( "rawtypes") 클래스 clazz = class.forname ( "java.lang.string"); @suppresswarnings ( "rawtypes") 생성자 [] cons = clazz.getConstructors (); for (@suppresswarnings ( "rawtypes") 생성자 c : cons) {system.out.println (c + "" + c.getDeclaringClass ()); }}3 : 반사를 통해 클래스에서 정의한 방법을 호출하십시오.
@test // 반사를 통해 클래스에서 정의한 메소드를 호출합니다. 공개 void testinVokemethod ()는 예외 {class clazz = class.forname ( "java.lang.string"); // 매개 변수 유형 클래스를 정의합니다 [] params = new Class [1]; params [0] = String.class; 메소드 m = clazz.getDeclaredMethod ( "indexof", params); // 매개 변수 객체를 설정합니다 [] p = 새 개체 [1]; p [0] = "e"; 정수 s = (정수) M.Invoke ( "HelloWorld!", P); System.out.println (s); }