一、获取CLASS
1.类名.class
Class<User> aClass = User.class;
String name = aClass .getName();
System.out.println(name);
2.Class.forName
//注意路径必须是全路径,包含包名
Class<?> aClass = Class.forName("org.example.bean.User");
String name = aClass.getName();
System.out.println(name1);
3.对象.getClass
User user = new User();
Class<? extends User> aClass = user.getClass();
String name = aClass.getName();
System.out.println(name);
二、常用方法
1.获取包名+类名
String name2 = aClass1.getName();
2.获取类名
String simpleName = aClass.getSimpleName();
3.获取类的全部属性
//包括public、private和proteced的,不包括父类的
Field[] declaredFields = aClass.getDeclaredFields();
for (Field field : declaredFields){
String fieldName = field.getName();
System.out.println(fieldName);
}
4.获取类的全部方法
Method[] declaredMethods = aClass.getDeclaredMethods();
for (Method method : declaredMethods){
String methodName = method.getName();
System.out.println(methodName);
}
5.获取公开的属性,包括父类的
Field[] fields = aClass.getFields();
for (Field field : fields){
String name = field.getName();
System.out.println(name);
}
6.获取字段和方法等的修饰符类型
//什么都不加是0,public 是1,private是2,protected是4,static 是8,final是16,等等
Field[] declaredFields = aClass.getDeclaredFields();
for (Field field : declaredFields){
String name = field.getName();
int modifiers = field.getModifiers();
System.out.println("属性名称:" + name + "---------" + "修饰符类型:" + modifiers);
}
Method[] declaredMethods = aClass.getDeclaredMethods();
for (Method method : declaredMethods){
String name = method.getName();
int modifiers = method.getModifiers();
System.out.println("方法名称:" + name + "---------" + "修饰符类型:" + modifiers);
}
7.类创建一个实例
User user = (User)aClass.newInstance();
String name = user.getName();
System.out.println("属性name的值:" + name);
三、反射实例
1.一个interface有多个实现,实现是继承关系,我们需要获取其中一个类的实现方法,类中没有实现就找子类;
//获取注册在spring中的bean,也就是获取一个new对象
Object bean = applicationContext.getBean("类名称");
//bean 对象 methodName 需要查找的方法名称 params 参数
public static Object invokeMethod(Object bean,String methodName,Object... params){
try {
if(params.length>0){
List<Object> list = new ArrayList<>();
for (Object param: params){
Class<?> paramClazz = param.getClass();
list.add(paramClazz);
}
Class<?>[] clazzs = list.toArray(new Class<?>[params.length]);
Method method = bean.getClass().getMethod(methodName,clazzs);
Object invoke = method.invoke(bean, params);
return invoke;
}else {
Method method = bean.getClass().getMethod(methodName);
Object invoke = method.invoke(bean);
return invoke;
}
}catch (Exception e){
e.printStackTrace();
return null;
}
}
不足之处望海涵。