1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java反射03 : 获取Class的注解 修饰符 父类 接口 字段 构造器和方法

Java反射03 : 获取Class的注解 修饰符 父类 接口 字段 构造器和方法

时间:2022-10-19 21:13:39

相关推荐

Java反射03 : 获取Class的注解 修饰符 父类 接口 字段 构造器和方法

[超级通道 : Java反射学习系列-绪论]

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

1.通过Class类可以做什么

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

2.实例代码

User类

/*** <p>用户表</p>** @author hanchao /2/14 22:30*/@MyAnnotationA@MyAnnotationBpublic class User extends SuperUser implements InterfaceAAA,InterfaceBBB {public String username = "张三";public int password = 123456;//setter getter constructor toString ... }

测试类:

/*** <p>java.lang.Class示例</p>** @author hanchao /3/3 18:45**/public class ReflectClassesDemo {private static final Logger LOGGER = Logger.getLogger(ReflectClassesDemo.class);/*** <p>Java反射-类Class示例</p>** @author hanchao /3/3 18:45**/public static void main(String[] args) throws NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {//获得Class对象Class userClass = User.class;//获得包信息 PackageLOGGER.info("通过class.getPackage()获得类的包名:" + userClass.getPackage());//获取注解信息LOGGER.info("通过class.getDeclaredAnnotation(name)获取指定的注解:" + userClass.getDeclaredAnnotation(MyAnnotationB.class));Annotation[] annotations = userClass.getDeclaredAnnotations();for (Annotation annotation : annotations) {LOGGER.info("通过class.getDeclaredAnnotations()获取全部的注解:" + annotation);}//获取修饰符 ModifierLOGGER.info("通过class.getModifiers()获得类的修饰符:" + Modifier.toString(userClass.getModifiers()));//获的继承的父类 SuperClassLOGGER.info("通过class.getSuperclass()获得类的父类" + userClass.getSuperclass());//获取类实现的接口 InterfaceClass[] interfaces = userClass.getInterfaces();for (Class inter : interfaces) {LOGGER.info("通过class.getInterfaces()获取类实现的接口:" + inter);}//获取类的名称LOGGER.info("通过class.getName()获得类的全名:" + userClass.getName());LOGGER.info("通过class.getSimpleName()获得类的简名:" + userClass.getSimpleName());//获取字段 FieldLOGGER.info("通过class.getDeclaredField(name)获取指定的字段:" + userClass.getDeclaredField("username"));Field[] fields = userClass.getDeclaredFields();for (Field field : fields) {LOGGER.info("通过class.getDeclaredFields()获取全部字段:" + field);}//获取构造器 ConstructorLOGGER.info("通过class.getDeclaredConstructor(args...)获取指定的构造器:" + userClass.getDeclaredConstructor());Constructor[] constructors = userClass.getDeclaredConstructors();for (Constructor constructor : constructors) {LOGGER.info("通过class.getDeclaredConstructors()获取全部构造器:");}User user = (User) userClass.getDeclaredConstructor().newInstance();LOGGER.info("通过constructor.newInstance(args...)进行对象实例化:" + user.toString());//获取方法 MethodLOGGER.info("通过class.getDeclaredMethod(args...)获取指定的方法:" + userClass.getDeclaredMethod("setPassword", int.class));Method[] methods = userClass.getDeclaredMethods();for (Method method : methods) {LOGGER.info("通过class.getDeclaredMethods()获取全部的方法:" + method);}userClass.getDeclaredMethod("setPassword", int.class).invoke(user, 9999);LOGGER.info("通过method.invoke(obj,args...)执行方法:" + user.toString());}}

3.运行结果

-03-03 23:52:41 INFO ReflectClassesDemo:28 - 通过class.getPackage()获得类的包名:package pers.mon-03-03 23:52:41 INFO ReflectClassesDemo:31 - 通过class.getDeclaredAnnotation(name)获取指定的注解:@pers.mon.MyAnnotationB()-03-03 23:52:41 INFO ReflectClassesDemo:34 - 通过class.getDeclaredAnnotations()获取全部的注解:@pers.mon.MyAnnotationA()-03-03 23:52:41 INFO ReflectClassesDemo:34 - 通过class.getDeclaredAnnotations()获取全部的注解:@pers.mon.MyAnnotationB()-03-03 23:52:41 INFO ReflectClassesDemo:38 - 通过class.getModifiers()获得类的修饰符:public-03-03 23:52:41 INFO ReflectClassesDemo:41 - 通过class.getSuperclass()获得类的父类class pers.mon.SuperUser-03-03 23:52:41 INFO ReflectClassesDemo:46 - 通过class.getInterfaces()获取类实现的接口:interface pers.mon.InterfaceAAA-03-03 23:52:41 INFO ReflectClassesDemo:46 - 通过class.getInterfaces()获取类实现的接口:interface pers.mon.InterfaceBBB-03-03 23:52:41 INFO ReflectClassesDemo:50 - 通过class.getName()获得类的全名:pers.mon.User-03-03 23:52:41 INFO ReflectClassesDemo:51 - 通过class.getSimpleName()获得类的简名:User-03-03 23:52:41 INFO ReflectClassesDemo:54 - 通过class.getDeclaredField(name)获取指定的字段:public java.lang.String pers.mon.User.username-03-03 23:52:41 INFO ReflectClassesDemo:57 - 通过class.getDeclaredFields()获取全部字段:public java.lang.String pers.mon.User.username-03-03 23:52:41 INFO ReflectClassesDemo:57 - 通过class.getDeclaredFields()获取全部字段:public int pers.mon.User.password-03-03 23:52:41 INFO ReflectClassesDemo:61 - 通过class.getDeclaredConstructor(args...)获取指定的构造器:public pers.mon.User()-03-03 23:52:41 INFO ReflectClassesDemo:64 - 通过class.getDeclaredConstructors()获取全部构造器:-03-03 23:52:41 INFO ReflectClassesDemo:64 - 通过class.getDeclaredConstructors()获取全部构造器:-03-03 23:52:41 INFO ReflectClassesDemo:67 - 通过constructor.newInstance(args...)进行对象实例化:User{username='张三', password='123456'}-03-03 23:52:41 INFO ReflectClassesDemo:70 - 通过class.getDeclaredMethod(args...)获取指定的方法:public void pers.mon.User.setPassword(int)-03-03 23:52:41 INFO ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public static void pers.mon.User.main(java.lang.String[])-03-03 23:52:41 INFO ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public java.lang.String pers.mon.User.toString()-03-03 23:52:41 INFO ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public static void pers.mon.User.test(java.lang.Object)-03-03 23:52:41 INFO ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public void pers.mon.User.setPassword(int)-03-03 23:52:41 INFO ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public int pers.mon.User.getPassword()-03-03 23:52:41 INFO ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public void pers.mon.User.setUsername(java.lang.String)-03-03 23:52:41 INFO ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public java.lang.String pers.mon.User.getUsername() throws java.lang.NullPointerException,java.lang.ArrayStoreException-03-03 23:52:41 INFO ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public void pers.mon.User.initUser(java.lang.String,java.lang.String)-03-03 23:52:41 INFO ReflectClassesDemo:73 - 通过class.getDeclaredMethods()获取全部的方法:public void pers.mon.User.demo(java.lang.String[])-03-03 23:52:41 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)的相关内容,在后续章节中会继续深入学习。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。