1. 获取类对象和常用方法
User user = new User();
user.setUserId(2018);
user.setUserName("反射");
/*----------------------------获取类对象----------------------------------*/
// 对象.getClass(); 获取类对象
Class<?> aClass = user.getClass();
// 类.class; 获取类对象
Class<User> bClass = User.class;
// Class.forName("类的全路径"); 获取类对象
Class<?> cClass = null;
try{
cClass = Class.forName("User");
}catch(Exception e){
e.printStackTrace();
}
/*-------------------------------获取类的字段--------------------------------*/
// 返回类或接口的所有已声明字段
Field[] declaredFields = bClass.getDeclaredFields();
for (Field field:declaredFields){
// 设置属性是可以访问的(私有的也可以,否则含有私有的属性,报错)
field.setAccessible(true);
// 得到此属性的值
Object o = field.get(user);
System.out.println("属性:"+o);
}
// 返回类或接口的所有可访问的公共字段
Field[] fields = bClass.getFields();
for (Field field:fields){
System.out.println("-->:"+field.get(user));
}
// 返回的类或接口的指定public字段
Field userId = bClass.getField("userId");
System.out.println("-->:"+userId);
/*--------------------------------获取类的方法-----------------------------------*/
// 返回类或接口的所有声明的方法,包括公共,保护,默认(包)访问和私有方法,但不包括继承的方法。
Method[] declaredMethods = bClass.getDeclaredMethods();
for (Method method:declaredMethods){
System.out.println("方法名称:"+method);
}
// 返回类或接口的所有公共方法,包括那些由类或接口从超类和超接口继承的声明。
Method[] methods = bClass.getMethods();
for (Method method:methods){
System.out.println("-->:"+method);
}
// 返回类或接口的指定的公共成员方法 getMethod(String name, 类<?>... parameterTypes)
// name - 方法的名称 ; parameterTypes - 参数列表(没有参数,则不传值)
Method method = bClass.getMethod("setUserId", Integer.class);
/*----------------------------------其他方法----------------------------------------*/
// 返回基础类的简单名称,如果基础类是匿名的,则返回一个空字符串。
String simpleName = bClass.getSimpleName();
// 判断user实例对象是否是该类对象
boolean instance = cClass.isInstance(user);
// 判断类对象是否是一个基本类型。
Class<Integer> clazz = int.class;
boolean primitive = clazz.isPrimitive();
// 获取具有给定名称的资源路径
URL path=this.getClass().getResource("User.class");
// 获取具有给定名称的资源输入流
InputStream inputStream = this.getClass().getResource.getResourceAsStream("picture.png");
2. 获取属性对象和常用方法
// 返回类或接口的所有已声明字段
Field[] declaredFields = bClass.getDeclaredFields();
for (Field field:declaredFields){
// 设置属性是可以访问的(私有的也可以)
field.setAccessible(true);
// 得到此属性的值
Object o = field.get(user);
System.out.println("属性值:"+o);
// 获取属性名称
String name = field.getName();
System.out.println("属性名称:"+name);
}
3. 获取方法对象和常用方法
// invoke(Object obj, Object... args) obj:调用底层方法的对象 args:方法调用使用的参数(没有参数,则不传值)
method.invoke(person, 118);
// 获取方法名称
method.getName();