//1、通过类名的方式
Class clazz=Class.forName(类名);
//例如:
Class<?> user = Class.forName("User");
//2、通过Class属性
Class<? extends User> userClass = User.class;
//3、通过具体对象
User u=new User();
Class<?> uClazz=u.getClass();
通过类的引用来创建对象
Class clazz=Class.forName("User")
//必须类中提供了一个无参的构造方法才可以用该方法
User u=clazz.newInstance();
获取类名
Class clazz=Class.forName("User")
String name = clazz.getName();//结果:com.test.demo.User
//没有包名
String simpleName = clazz.getSimpleName();//结果:User
获取对象的属性信息
User u = cons.newInstance("张三", 20);
Class u = Class.forName("User");
//获取所有的属性
Field[] fields = u.getFields();//返回的是申明为public的属性,包括父类中定义
Field[] fields = u.getDeclaredFields(); //返回的指定类定义的所有定义(含私有域)的属性,不包括父类的
System.out.println(declaredFields[1]);//结果:private java.lang.String com.test.demo.User.name
string name = declaredFields[1].getName();//没有包名
结果:name
获取get方法名
String method = "get" + declaredFields[1].substring(0, 1).toUpperCase() + declaredFields[1].substring(1);
Method method = user.getClass().getMethod(method);//得到方法对象
Object invoke = method.invoke(user);//得到属性set的值
结果:张三
//获取指定的属性
Field f = u.getField("属性名"); //返回的是申明为public的属性
Field f = u.getDeclaredField("属性名"); //返回的指定类定义的所有定义(含私有域)的属性
//如:
Field user = u.getDeclaredField("name"); //结果:private java.lang.String com.test.demo.User.name
获取Field参数信息
Class u = Class.forName("User");
Field user = u.getDeclaredField("name");
//获取指定参数的访问权限
int mod = user.getModifiers();//获取访问权限,返回是整形 结果:2
String modifier = Modifier.toString(user.getModifiers());//结果: private
//获取字段的数据类型对应的Class对象
Class<?> type = user.getType();//结果:class java.lang.String
//获取字段的名称
String name = user.getName();//结果:name