之前接触不多,现在项目用到了,就回顾一下,给自己以后做一个参考吧
一:建一个自己要访问的类
二:编写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();
}
}
}
三:输出结果