java Method 访问方法

来源:互联网 发布:java中的private 编辑:程序博客网 时间:2024/06/05 04:13
在通过下列一组方法访问方法时,将返回Method类型的对象或数组。每个Method对象代表一个方法,利用Method对象可以操纵相应的方法。
 getMethods()
 getMethod(String name, Class<?>... parameterTypes)
 getDeclaredMethods()
 getDeclaredMethod(String name, Class<?>... parameterTypes)
如果是访问指定的方法,需要根据该方法的名称和入口参数的类型来访问。

/** *  */package 访问方法;/** * @author tianyu * */public class Example_03 {static void staticMethod(){System.out.println("执行staticMethod()方法");}public int publicMethod(int i){System.out.println("执行staticMethod()方法");return i*100;}protected int protectedMethod(String s , int i) throws NumberFormatException{System.out.println("执行prottectedMethod()方法");return Integer.valueOf(s)+i;//字符串转型为string,返回Integer}@SuppressWarnings("unused")private String privateMethod(String ...strings){System.out.println("privateMethod()方法");StringBuffer buffer=new StringBuffer();for (int i = 0; i < strings.length; i++) {buffer.append(strings[i]);}return buffer.toString();//返回为Sting}}


/** *  */package 访问方法;import java.lang.reflect.Method;/** * @author tianyu * */public class Main_03 {/** * @param args */public static void main(String[] args) {Example_03 example_03=new Example_03();Class<?> class1 =example_03.getClass();Method[] methods=class1.getDeclaredMethods();//获取所有的构造fangfafor (int i = 0; i < methods.length; i++) {Method method = methods[i];    System.out.println("获取方法名称:"+method.getName());//获取名称System.out.println("查看方法是否充许带有可变量参数"+method.isVarArgs());System.out.println("入口程序参数类型依次为");Class<?>[] classes=method.getParameterTypes();//获取这个函数的参数类型for (int j = 0; j < classes.length; j++) {Class<?> class2 = classes[j];System.out.println(class2);}System.out.println("返回值型为:"+method.getReturnType());System.out.println("可能抛出的异常有:");Class<?>[] classes2=method.getExceptionTypes();for (int j = 0; j < classes2.length; j++) {Class<?> class2 = classes2[j];System.out.println("异常:"+class2);//有那些异常}boolean b=true;while(b){try {b=false;if("staticMethod".equals(method.getName())){//获取的方法名称去比较method.invoke(example_03);}else if("publicMethod".equals(method.getName())) {      System.out.println("返回值为:"+method.invoke(example_03, 168));}else if("protectedMethod".equals(method.getName())){System.out.println("返回值为:"+method.invoke(example_03, "7",5));}else if("privateMethod".equals(method.getName())){Object[] strings= new Object[]{new String[]{"m","q","e"}};System.out.println("返回值为:"+method.invoke(example_03,strings ));}} catch (Exception e) {System.out.println("在执行方法抛出异常,"+ "下面执行setAccessible()方法");method.setAccessible(true);b=true;}//异常}//while循环 System.out.println("====================");}//for外循环}//主方发}//类