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