1、得到Class的方法
public void test2() throws ClassNotFoundException {
Class<?> clazz1 = Class.forName("com.situ.pojo.User");
System.out.println(clazz1);
Class<?> clazz2 = User.class;
System.out.println(clazz2);
User user = new User();
Class<?> clazz3 = user.getClass();
System.out.println(clazz3);
}
2、Field有关类属性的相关获取
public void test3() {
// 得到类的Class对象
Class<?> clazz = User.class;
// getFields()得到所有的public的属性
//Field[] fieldArray = clazz.getFields();
// getDeclaredFields() 得到所有的属性
Field[] fileldArray = clazz.getDeclaredFields();
for(Field field:fileldArray) {
// 得到属性的名称
String fieldName = field.getName();
System.out.println(fieldName);
// 得到属性的数据类型
Class<?> type = field.getType();
System.out.println(type);
// 得到属性的访问修饰符
int t = field.getModifiers();
System.out.println(t);
System.out.println();
}
System.out.println();
}
结果:
rowId
int
2
userName
class java.lang.String
2
3、Method得到类的方法
public void test4() throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException{
Class<?> clazz = User.class;
Object object = clazz.newInstance();
// getMethods() 得到所有方法,包括父类
// 可根据方法名称得到Method实例
Method setMethod = clazz.getMethod("setUserName",String.class);
System.out.println(setMethod);
// 结果:public void com.situ.pojo.User.setUserName(java.lang.String)
// 除父类所有方法
Method[] methodArray = clazz.getDeclaredMethods();
for(Method method:methodArray) {
System.out.println(method.getName());
// 结果:setUserName
}
}
4、Constructor + parameterArray 构造函数
public void test5() {
Class<?> clazz = User.class;
// 得到构造函数数组
Constructor<?>[] constructorArray = clazz.getConstructors();
for(Constructor<?> constructor : constructorArray) {
String name = constructor.getName();
System.out.println(name);
// 得到构造函数的形参数组
Class<?>[] parameterArray = constructor.getParameterTypes();
for(Class<?> class1:parameterArray) {
System.out.println(class1.getName());
}
}
}
5、通过反射让类的方法自运行
public void test3() {
// 通过反射让类的方法自运行
Class<?> clazz = User.class;
try {
// 方法实例
Method method = clazz.getDeclaredMethod("setRowId", int.class);
System.out.println(method);
// 类实例
Object obj = clazz.newInstance();
// 让方法自运行
method.invoke(obj, 11);
System.out.println(obj);
Method method2 = clazz.getDeclaredMethod("setUserName", String.class);
method2.invoke(obj, "张三");
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}
}