目录
1 获取Class对象多种方法
class对象即字节码
1.1 类名.class
Class clazz1 = User.class
1.2 对象.getClass
User user = new User();
Class clazz2 = user.getClass();
1.3 Class.forName(“全路径”)
Class clazz3 = Class.forName("com.yrf.User");
2 获取构造方法
2.1 实例化
实例化
Object o = clazz.getDeclaredConstructor().newInstance();
User user = (User)o;
2.2 获取所有构造方法
- 针对public构造方法
- 所有
Constructor[] constructors = clazz.getConstructors();
- 指定构造器参数
Constructor c1 = clazz.getConstructor(String.class, int.class, String.class);
User user1 = (User)c1.newInstance("lina", 10, "female");
- 不限权限构造方法
- 所有
Constructor[] constructors = clazz.getDeclaredConstructors();
- 指定构造器参数
Constructor c2 = clazz.getDeclaredConstructor(String.class, int.class, String.class);
c2.setAccessible(true);
User user2 = (User)c2.newInstance("tommy", 12, "male");
3 获取属性
- 针对public属性
Field[] fields = clazz.getFields();
- 不限权限属性
Field[] declaredFields = clazz.getDeclaredFields();
4 获取方法
- 针对public方法
方法的执行:method.invoke(Object, parameters...)
User user = new User("Jimmy", 3, "male");
Class clazz = user.getClass();
Method[] methods= clazz.getMethods();
for (Method method : methods){
if(method.getName().equals("toString")){
String invoke = (String)method.invoke(user);
}
}
- 不限权限方法
Method[] declaredMethods = clazz.getDeclaredMethods();