关闭

Java反射

119人阅读 评论(0) 收藏 举报
分类:

之前接触不多,现在项目用到了,就回顾一下,给自己以后做一个参考吧

一:建一个自己要访问的类

  

二:编写util 通过java反射访问Users中的属性和方法

   package com.demo.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectTest {
     //其实ByuNewUsers可以专门提出来做一个util,这样需要访问那个方法只需要传值就行(可以自行修改)
     public static Users ByuNewUsers() throws ClassNotFoundException, NoSuchMethodException, SecurityException{
      
      Users users=null;   
      try {
          //①通过类装载器获取Users类对象
          ClassLoader loader=Thread.currentThread().getContextClassLoader();
          Class clazz=loader.loadClass("com.demo.test.Users");
          
          //②获取类的默认构造器对象并通过它实例化Users
          Constructor cons=clazz.getDeclaredConstructor((Class[])null);
          users=(Users) cons.newInstance();
          
          //③通过反射方法设置属性
          Method setUsersname=clazz.getMethod("setUsersname", String.class);
          setUsersname.invoke(users, "zhangsan");
          Method setPassword=clazz.getMethod("setPassword", String.class);
          setPassword.invoke(users, "123456");
          
      } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      
      return users;
        
    }

        

    public static void main(String[] args) {
        
         try {
            ReflectTest.ByuNewUsers().show();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

}


三:输出结果

   

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20519次
    • 积分:489
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:3篇
    • 译文:3篇
    • 评论:0条
    文章分类