reverse_xiaoyu

忘记并不可怕,可怕的是你从来就都不知道!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

java.lang.Class类提供了获取类的各种信息对象的静态方法。

本文转载自:https://blog.csdn.net/hanchao5272/article/details/79363921

1.通过Class类可以做什么

  • 获取类的包(Package)信息
  • 获取类的注解(Annotation)信息
  • 获取类的修饰符(Modifier)信息
  • 获取类的继承的父类(Super Class)信息
  • 获取类的实现的接口(Interface)信息
  • 获取类的类名信息
  • 获取类的字段(Field)信息
  • 获取类的构造方法(Constructor)信息
  • 获取类的方法(Method)信息

2.实例代码

User类

 1 /**
 2  * <p>用户表</p>
 3  */
 4 @MyAnnotationA
 5 @MyAnnotationB
 6 public class User extends SuperUser implements InterfaceAAA,InterfaceBBB {
 7     public String username = "张三";
 8     public int password = 123456;
 9     //setter getter constructor toString ... 
10 }

 

测试类:

 1 /**
 2  * <p>java.lang.Class示例</p>
 3  **/
 4 public class ReflectClassesDemo {
 5     private static final Logger LOGGER = Logger.getLogger(ReflectClassesDemo.class);
 6 
 7     /**
 8      * <p>Java反射-类Class示例</p>
 9      **/
10     public static void main(String[] args) throws NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
11         //获得Class对象
12         Class userClass = User.class;
13 
14         //获得包信息 Package
15         LOGGER.info("通过class.getPackage()获得类的包名:" + userClass.getPackage());
16 
17         //获取注解信息
18         LOGGER.info("通过class.getDeclaredAnnotation(name)获取指定的注解:" + userClass.getDeclaredAnnotation(MyAnnotationB.class));
19         Annotation[] annotations = userClass.getDeclaredAnnotations();
20         for (Annotation annotation : annotations) {
21             LOGGER.info("通过class.getDeclaredAnnotations()获取全部的注解:" + annotation);
22         }
23 
24         //获取修饰符 Modifier
25         LOGGER.info("通过class.getModifiers()获得类的修饰符:" + Modifier.toString(userClass.getModifiers()));
26 
27         //获的继承的父类 SuperClass
28         LOGGER.info("通过class.getSuperclass()获得类的父类" + userClass.getSuperclass());
29 
30         //获取类实现的接口 Interface
31         Class[] interfaces = userClass.getInterfaces();
32         for (Class inter : interfaces) {
33             LOGGER.info("通过class.getInterfaces()获取类实现的接口:" + inter);
34         }
35 
36         //获取类的名称
37         LOGGER.info("通过class.getName()获得类的全名:" + userClass.getName());
38         LOGGER.info("通过class.getSimpleName()获得类的简名:" + userClass.getSimpleName());
39 
40         //获取字段 Field
41         LOGGER.info("通过class.getDeclaredField(name)获取指定的字段:" + userClass.getDeclaredField("username"));
42         Field[] fields = userClass.getDeclaredFields();
43         for (Field field : fields) {
44             LOGGER.info("通过class.getDeclaredFields()获取全部字段:" + field);
45         }
46 
47         //获取构造器 Constructor
48         LOGGER.info("通过class.getDeclaredConstructor(args...)获取指定的构造器:" + userClass.getDeclaredConstructor());
49         Constructor[] constructors = userClass.getDeclaredConstructors();
50         for (Constructor constructor : constructors) {
51             LOGGER.info("通过class.getDeclaredConstructors()获取全部构造器:");
52         }
53         User user = (User) userClass.getDeclaredConstructor().newInstance();
54         LOGGER.info("通过constructor.newInstance(args...)进行对象实例化:" + user.toString());
55 
56         //获取方法 Method
57         LOGGER.info("通过class.getDeclaredMethod(args...)获取指定的方法:" + userClass.getDeclaredMethod("setPassword", int.class));
58         Method[] methods = userClass.getDeclaredMethods();
59         for (Method method : methods) {
60             LOGGER.info("通过class.getDeclaredMethods()获取全部的方法:" + method);
61         }
62         userClass.getDeclaredMethod("setPassword", int.class).invoke(user, 9999);
63         LOGGER.info("通过method.invoke(obj,args...)执行方法:" + user.toString());
64     }
65 }

 

3.运行结果

 1 INFO  ReflectClassesDemo:28 - 通过class.getPackage()获得类的包名:package pers.hanchao.reflect.common
 2 INFO  ReflectClassesDemo:31 - 通过class.getDeclaredAnnotation(name)获取指定的注解:@pers.hanchao.reflect.common.MyAnnotationB()
 3 INFO  ReflectClassesDemo:34 - 通过class.getDeclaredAnnotations()获取全部的注解:@pers.hanchao.reflect.common.MyAnnotationA()
 4 INFO  ReflectClassesDemo:34 - 通过class.getDeclaredAnnotations()获取全部的注解:@pers.hanchao.reflect.common.MyAnnotationB()
 5 INFO  ReflectClassesDemo:38 - 通过class.getModifiers()获得类的修饰符:public
 6 INFO  ReflectClassesDemo:41 - 通过class.getSuperclass()获得类的父类class pers.hanchao.reflect.common.SuperUser
 7 INFO  ReflectClassesDemo:46 - 通过class.getInterfaces()获取类实现的接口:interface pers.hanchao.reflect.common.InterfaceAAA
 8 INFO  ReflectClassesDemo:46 - 通过class.getInterfaces()获取类实现的接口:interface pers.hanchao.reflect.common.InterfaceBBB
 9 INFO  ReflectClassesDemo:50 - 通过class.getName()获得类的全名:pers.hanchao.reflect.common.User
10 INFO  ReflectClassesDemo:51 - 通过class.getSimpleName()获得类的简名:User
11 INFO  ReflectClassesDemo:54 - 通过class.getDeclaredField(name)获取指定的字段:public java.lang.String pers.hanchao.reflect.common.User.username
12 INFO  ReflectClassesDemo:57 - 通过class.getDeclaredFields()获取全部字段:public java.lang.String pers.hanchao.reflect.common.User.username
13 INFO  ReflectClassesDemo:57 - 通过class.getDeclaredFields()获取全部字段:public int pers.hanchao.reflect.common.User.password
14 INFO  ReflectClassesDemo:61 - 通过class.getDeclaredConstructor(args...)获取指定的构造器:public pers.hanchao.reflect.common.User()
15 INFO  ReflectClassesDemo:64 - 通过class.getDeclaredConstructors()获取全部构造器:
16 INFO  ReflectClassesDemo:64 - 通过class.getDeclaredConstructors()获取全部构造器:
17 INFO  ReflectClassesDemo:67 - 通过constructor.newInstance(args...)进行对象实例化:User{username='张三', password='123456'}
18 INFO  ReflectClassesDemo:70 - 通过class.getDeclaredMethod(args...)获取指定的方法:public void pers.hanchao.reflect.common.User.setPassword(int)
19 INFO  ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public static void pers.hanchao.reflect.common.User.main(java.lang.String[])
20 INFO  ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public java.lang.String pers.hanchao.reflect.common.User.toString()
21 INFO  ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public static void pers.hanchao.reflect.common.User.test(java.lang.Object)
22 INFO  ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public void pers.hanchao.reflect.common.User.setPassword(int)
23 INFO  ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public int pers.hanchao.reflect.common.User.getPassword()
24 INFO  ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public void pers.hanchao.reflect.common.User.setUsername(java.lang.String)
25 INFO  ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public java.lang.String pers.hanchao.reflect.common.User.getUsername() throws java.lang.NullPointerException,java.lang.ArrayStoreException
26 INFO  ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public void pers.hanchao.reflect.common.User.initUser(java.lang.String,java.lang.String)
27 INFO  ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public void pers.hanchao.reflect.common.User.demo(java.lang.String[])
28 INFO  ReflectClassesDemo:76 - 通过method.invoke(obj,args...)执行方法:User{username='张三', password='9999'}

 

4.总结

  • 通过class.getPackage()获取类的包(Package)信息
  • 通过class.getDeclaredAnnotation(name)获取类的注解(Annotation)信息
  • 通过class.getModifiers()获取类的修饰符(Modifier)信息
  • 通过class.getSuperclass()获取类的继承的父类(Super **Class)信息
  • 通过class.getInterfaces()获取类的实现的接口(Interface)信息
  • 通过class.getName()获取类的类名信息
  • 通过class.getDeclaredField(name)获取类的字段(Field)信息
  • 通过class.getDeclaredConstructor(args…)获取类的构造方法(Constructor)信息
  • 通过class.getDeclaredMethod(args…)获取类的方法(Method)信息

其中,关于注解(Annotation)、修饰符(Modifier)、字段(Field)、构造器(Constructor)和方法(Method)的相关内容,在后续章节中会继续深入学习。

posted on 2019-11-11 19:38  Reverse-xiaoyu  阅读(1018)  评论(0编辑  收藏  举报