Method
提供關於類或接口上單獨某個方法(以及如何訪問該方法)的信息。所反映的方法多是類方法或實例方法(包括抽象方法)。Java反射中獲取Method方法以下: a、
public Method[] getDeclaredMethods() 只獲取本類全部的方法,包括private、protected、default、public 訪問權限;不包括繼承過來的方法;public class ParentClass { private String testParPriv(String value){ return value; } public String testParPub(String value){ return value; } protected String testParPro(String value){ return value; } String testParDef(String value){ return value; } private static String testStaticParPrive(String value){ return value; } public static String testStaticParPub(String value){ return value; } }
public class SubClass extends ParentClass { private String testPriv(String value){ return value; } public String testPub(String value){ return value; } public String testPub(String value,String value1){ return value1; } protected String testPro(String value){ return value; } String testDef(String value){ return value; } private static String testStaticPriv(String value){ return value; } public static void main(String[] args) { try { Class<?> clz = SubClass.class; SubClass sub = new SubClass(); Method[] methods = clz.getDeclaredMethods(); for (Method method : methods) { System.out.println(method.toGenericString()); } System.out.println("---------------------------------------------"); Method[] publicMethods = clz.getMethods(); for (Method method : publicMethods) { System.out.println(method.toGenericString()); } } catch (Exception e) { e.printStackTrace(); } } }
運行結果: html
public static void cn.trip.core.servlet.SubClass.main(java.lang.String[]) private static java.lang.String cn.trip.core.servlet.SubClass.testStaticPriv(java.lang.String) private java.lang.String cn.trip.core.servlet.SubClass.testPriv(java.lang.String) public java.lang.String cn.trip.core.servlet.SubClass.testPub(java.lang.String,java.lang.String) public java.lang.String cn.trip.core.servlet.SubClass.testPub(java.lang.String) protected java.lang.String cn.trip.core.servlet.SubClass.testPro(java.lang.String) java.lang.String cn.trip.core.servlet.SubClass.testDef(java.lang.String) --------------------------------------------- public static void cn.trip.core.servlet.SubClass.main(java.lang.String[]) public java.lang.String cn.trip.core.servlet.SubClass.testPub(java.lang.String,java.lang.String) public java.lang.String cn.trip.core.servlet.SubClass.testPub(java.lang.String) public static java.lang.String cn.trip.core.servlet.ParentClass.testStaticParPub(java.lang.String) public java.lang.String cn.trip.core.servlet.ParentClass.testParPub(java.lang.String) public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public final void java.lang.Object.wait() throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang.Object) public java.lang.String java.lang.Object.toString() public native int java.lang.Object.hashCode() public final native java.lang.Class<?> java.lang.Object.getClass() public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll()
Method類中部分方法:java
一、public Class<?> getReturnType() 獲取方法返回值類型安全
二、public Class<?> getDeclaringClass() 獲取定義該方法的類spa
三、public Object getDefaultValue() 獲取該方法的默認返回值-----只對註解類中的方法有效code
四、public Type[] getExceptionTypes() 獲取該方法拋出的異常類型orm
五、public Class<?>[] getParameterTypes() 獲取該方法的形參參數類型htm
public class SubClass { public String testPub(String value, String value1) { return value1; } public static void main(String[] args) { try { Class<?> clz = SubClass.class; Method method = clz.getMethod("testPub", String.class, String.class); System.out.println(method.toGenericString()); Class<?> returnType = method.getReturnType(); System.out.println("方法返回值類型" + returnType.getCanonicalName()); Class<?> declareClass = method.getDeclaringClass(); System.out.println("該方法是哪一個類定義的" + declareClass.getCanonicalName()); Object defalutValue = method.getDefaultValue(); System.out.println("方法返回默認值(只對註解類中方法有效)" + defalutValue); Class<?> throwException[] = method.getExceptionTypes(); for (Class<?> class1 : throwException) { System.out.println("方法拋出的異常" + class1.getCanonicalName()); } Class<?>[] parameters = method.getParameterTypes(); for (Class<?> class1 : parameters) { System.out.println("方法形參類型" + class1.getCanonicalName()); } boolean isAccessible = method.isAccessible(); System.out.println("是否進行安全檢查" + isAccessible); } catch (Exception e) { e.printStackTrace(); } } }
運行結果: 繼承
public java.lang.String cn.trip.core.servlet.SubClass.testPub(java.lang.String,java.lang.String) 方法返回值類型java.lang.String 該方法是哪一個類定義的cn.trip.core.servlet.SubClass 方法返回默認值(只對註解類中方法有效)null 方法形參類型java.lang.String 方法形參類型java.lang.String 是否進行安全檢查false六、public Object invoke(Object obj, Object... args) 定義該方法的類的實例 obj調用該方法,形參參數爲 ... args ;
public static void main(String[] args) { try { Class<?> clz = SubClass.class; SubClass sub = new SubClass(); Method method = clz.getMethod("testPub", String.class, String.class); System.out.println(method.getName()); Object returnValue = method.invoke(sub, "A","B"); System.out.println("調用方法後返回值"+returnValue); } catch (Exception e) { e.printStackTrace(); } }
testPub 調用方法後返回值B
七、public Annotation[] getDeclaredAnnotations() 返回該方法上的全部註解接口
八、public <T extends Annotation> T getAnnotation(Class<T> annotationClass) 獲取該方法上的annotationClass類型註解ip