java从入门到精髓 - 反射Method

import java.lang.reflect.Method;

/**
 * 
@author Administrator
 *
 
*/
public class MethodTest {

    
static void staticMethod()
    {
        System.out.println(
"执行staticMethod()方法");
    }
    
public int publicMethod(int i)
    {
        System.out.println(
"执行publicMethod()方法");
        
return i*20;
    }
    
protected int protectedMethod(String s,int  i) throws NumberFormatException{
        System.out.println(
"执行protectedMethod()方法");
        
return Integer.valueOf(s)+i;
    }
    
private String privateMethod(String...strings){
        System.out.println(
"执行privateMethod()方法");
        StringBuffer stringBuffer 
= new StringBuffer();
        
for(int i=0;i<strings.length;i++)
        {
            stringBuffer.append(strings[i]);
        }
        
return stringBuffer.toString();
    }
    
/**
     * 
@param args
     
*/
    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        
//实例化一个对象:
        MethodTest methodTest = new MethodTest();
        
        Method[] declaredMethods 
= MethodTest.class.getDeclaredMethods();  //获得所有的方法
        for(int i=0;i<declaredMethods.length;i++)
        {
            Method method 
= declaredMethods[i];
            System.out.println(
"名称:"+method.getName());   //方法名称
            System.out.println("是否允许带有可变参数变量:"+method.isVarArgs());//
            System.out.println("入口参数类型依次为:");
            Class[]parameterTypes 
= method.getParameterTypes();//获得方法所有的参数类型
            for(int j=0;j<parameterTypes.length;j++)
            {
                System.out.println(
"parameterTypes[" + j + "]" + parameterTypes[j]);
            }
            System.out.println(
"返回值类型:"+method.getReturnType()); //获得方法返回值类型
            System.out.println("可能抛出异常类型有:");
            Class []exceptionTypes 
= method.getExceptionTypes();  //获得可能抛出的所有异常类型
            for(int j=0;j<exceptionTypes.length;j++){
                System.out.println(
"exceptionTypes[" + j + "]" + exceptionTypes[j]);
            }
            
boolean isTurn = true;
            
while(isTurn)     //调用类中的方法
            {
                
try
                {
                    isTurn 
= false;
                    
if(i==0)   //请注意生成的顺序,可以先把这些语句注释掉,看下顺序再另行执行。
                    {
                        method.invoke(methodTest);
                    }    
else if(i==1)
                    {
                        System.out.println(
"返回值:" + method.invoke(methodTest,168));
                    }
else if(i==2)
                    {
                        System.out.println(
"返回值:" + method.invoke(methodTest,"7",5));
                    }
else if(i==3)
                    {
                        Object[] parameters 
= new Object[]{new String[]{"M","W","Q"}};
                        System.out.println(
"返回值:"+method.invoke(methodTest, parameters));
                    }
                }
catch(Exception e)
                {
                    System.out.println(
"在执行方法时抛出异常,执行setAccessible()方法");
                    method.setAccessible(
true);
                    isTurn 
= true;
                }
            }
            System.out.println(
"****************");
        }
    }

}

 

posted @ 2010-09-01 14:04  叮当小马  阅读(6635)  评论(0编辑  收藏  举报