• 热门专题

使用Java的反射功能调用类中的方法

作者:  发布日期:2014-11-05 20:08:31
Tag标签:功能  方法  
  • 最近一直在搞Java的反射,今天使用反射调用方法时出现了很多问题,主要是没有详细参考官方API。所以走了很多弯路。

    所以想把这个例子记下来,供自己也供他人学习。

    package com.mine.practice.reflect;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    /**
      * 使用反射调用类中的方法
      * @author  2014-11-5 上午10:51:28 
      * @version V1.0  
      * @modify by user: {修改人} 2014-11-5
      * @modify by reason:{方法名}:{原因}
     */
    public class User{
    	
       /**用户名*/	
       String name; 
       
       @SuppressWarnings("unused")
       public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
      
    	 //1、实例化对象
    	 User user = new User();
     	
    	 //2、方法中需要的参数列表。单个参数时也可以直接使用String params = "Tom";
         String[] params = new String[]{"Tom"};
         
         //3.1需要参数的方法
         //第一个参数为方法的名字,第二个参数为方法参数的类型,单个参数时也可以直接写XXX.class或者写成数组的形式也可以。	
         Method setMethod = (User.class).getMethod("setName",new Class[]{String.class});
    
         //调用setName方法,因为没有返回值,所以可以不用使用对象接收,如果接收了返回的也是null
         setMethod.invoke(user,params);
        
         //3.2不需要参数的方法
         //第一个参数为方法的名字,因为没有参数,所以只需要一个参数即可。
         Method getMethod = (User.class).getMethod("getName");
    	 
         //调用getName方法,因为有返回值,所以可以定义一个Object接收返回值。
         //注意invoke中的类即下面的user必须实例化,否则会抛出下面的异常的
         //java.lang.IllegalArgumentException: object is not an instance of declaring class
    
         Object object = getMethod.invoke(user);
        
         //打印使用反射方式获取方法的返回值
         System.out.println(object);
         
       }
       
      public void setName(String name) {
           this.name = name;
      }
      
      public String getName(){
    	   return name;
      }
    }
    


About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规