1)类名.class Class cls1=String.class; |
---|
2)对象.getClass() Class cls2 = “abc”.getClass(); |
3)Class.forName(“包名.类名”) -->推荐 Class cls3=Class.forName(“java.lang.String”); |
getModifiers() 返回Java语言修饰符(public等)的类或接口,编码是一个整数。
Class<String> cls=String.class;
System.out.println(cls.getModifiers()); //17
String str = Modifier.toString(cls.getModifiers()); //public final
System.out.println(str);
getPackage()
//package java.lang, Java Platform API Specification, version 1.8
System.out.println(cls.getPackage());
getName()返回的实体的名称(数组类,接口,类、原始类型或空白)
getSimpleName()返回底层类的简单的名称
System.out.println(cls.getName()); //java.lang.String
System.out.println(cls.getSimpleName()); //String
注:如果是通过私有构造器来动态创建对象时,先要通过 构造器.setAccessible(true);来开放权限
getConstructor(类>… parameterTypes)获取某个指定的公共的构造器
getConstructors()获取所有的公共的构造器getDeclaredConstructor(类>… parameterTypes)可以获取指定的构造器
getDeclaredConstructors()获取所有的构造器
public static void testConstructor(Class<User> cls) throws Exception {
//获取某个指定的公共的构造器
Constructor<User> con = cls.getConstructor(int.class, String.class, String.class, String.class, int.class);
System.out.println(con);
//所有的构造器
Constructor[] cons = cls.getDeclaredConstructors();
for(Constructor c:cons){
System.out.println(c);
}
//1.创建对象Class类的newInstance
User obj=cls.newInstance();
System.out.println(obj);
//2.constructor类提供的newInstance(Object... initargs)
User obj2=con.newInstance(1001,"lisi","lisi123","女",18);
System.out.println(obj2);
//私有的,可以放开权限
cons[1].setAccessible(true);
User obj3 = (User) cons[1].newInstance("lisi", "1234");
cons[1].setAccessible(false);
System.out.println(obj3);
}
注:反射获取方法的静态方法时,要将静态方法设置为public
getMethod(String name, 类>… parameterTypes)返回一个方法指定对象,反映了公共成员方法
getMethods()返回公共的所有方法getDeclaredMethod(String name, 类>… parameterTypes)返回一个公共的指定的方法
getDeclaredMethods()返回所有方法
public static void methodTest(Class<User> cls) throws Exception {
//获取
Method[] methods = cls.getDeclaredMethods();
System.out.println(Arrays.toString(methods));
Method method2 = cls.getMethod("setAge", int.class);
System.out.println(method2);
User user=cls.newInstance();
//调用方法
method2.invoke(user,10);
System.out.println(user);
//有返回值的,私有的
Method method3 = cls.getDeclaredMethod("test", int.class);
method3.setAccessible(true);
System.out.println(method3.invoke(user,12));
method3.setAccessible(false);
//静态方法设置为public,其他包才可以使用
//静态方法
cls.getDeclaredMethod("testStatic").invoke(null);
}
getField(String name)返回公共的属性
getFields()返回公共的所有属性getDeclaredField(String name)返回属性
getDeclaredFields()返回所有属性
public static void fieldTest(Class<User> cls) throws Exception {
Field field = cls.getDeclaredField("name");
System.out.println(field);
User user = cls.newInstance();
field.setAccessible(true);
field.set(user,"张三"); //设置属性值
System.out.println(field.get(user)); //获取属性值
System.out.println(cls.getDeclaredField("staticField").get(null));
}