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

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

1.通过Class类可以做什么

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

2.实例代码

User类

/*** <p>用户表</p>** @author hanchao 2018/2/14 22:30*/
@MyAnnotationA
@MyAnnotationB
public 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 2018/3/3 18:45**/
public class ReflectClassesDemo {private static final Logger LOGGER = Logger.getLogger(ReflectClassesDemo.class);/*** <p>Java反射-类Class示例</p>** @author hanchao 2018/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.运行结果

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

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

  1. Java反射机制——获取成员变量构造函数

    2019独角兽企业重金招聘Python工程师标准>>> Java反射机制--获取成员变量&构造函数 一.成员变量是java.lang.reflect.Field的对象 1.F ...

  2. java反射无法获取_Java反射'无法设置'错误

    我正在尝试使用Java反射来获取通用Field属性的实例,以便执行此Field的方法. 例如,如果我使用getValue()方法创建类型为MyType的类,并且我有另一个具有MyType类属性的MyC ...

  3. Java 编程问题:七、Java 反射类、接口、构造器、方法和字段

    原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自[ApacheCN Java 译文集],自豪地采用谷歌翻译. 本章包括涉及 Java 反射 ...

  4. 通过反射突破访问修饰符,调用private私有的方法

    import operate425.demo.demo1.Student;import java.lang.reflect.Constructor; import java.lang.reflect. ...

  5. Java中的public static final来修饰数组与接口变量

    Java中的public static final来修饰数组与接口变量 public static final来修饰数组 final对数组的作用 怎样实现对数组的public static final ...

  6. java修饰符默认_Java的类,方法,变量等等的默认修饰符是什么

    访问控制修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java支持4种不同的访问权限. 默认的,也称为default,在同一包内可见,不使用任何修饰符. 私有的,以pr ...

  7. java反射怎么获取结构体_java反射-使用反射获取类的所有信息

    在OOP(面向对象)语言中,最重要的一个概念就是:万事万物皆对象. 在java中,类也是一个对象,是java.lang.Class的实例对象,官网称该对象为类的类类型. Class 类的实例表示正在运 ...

  8. java 反射获取对象_使用Java反射机制获取对象

    本文由广州疯狂软件教育java培训分享: 构造接口Person,所有Person都会问好,但具体讲什么语言就不知道了! package interf; public interface Person ...

  9. java反射之获取class对象,Java之反射机制(获取Class对象的三种方式)

    Java之反射机制(获取Class对象的三种方式) 开发工具与关键技术:MyEclipse 10,java 作者:刘东标 撰写时间:2019-06-14 如何得到各个字节码对应的实例对象? 每个类被加 ...

最新文章

  1. Python回顾与整理12:执行环境
  2. java rect 旋转_处理(Java可视化语言):使用rectMode(CENTER)而不是rectMode(CORNER)旋转矩形,留下奇数衰落轨迹效果...
  3. Appcan——Box
  4. 都说变量有七八种,到底谁是 Java 的亲儿子
  5. nuxt asyncData extendRoutes nuxtServerInit
  6. javascript之调度:setTimeout 和 setInterval
  7. 初学php,犯了一个超低级错误!!!
  8. 2019java后端面试集合篇最值得收藏的(一)
  9. 乐视盒子UI 官方下载地址
  10. Mysql(免安装版)安装、配置与卸载
  11. 具有深度沉浸能力的人更能有所成就
  12. Hyper-V虚拟化——在Hyper-V上创建虚拟服务器
  13. Python还在原地踏步?今天女友程序员教你函数的定义与使用
  14. SaaS最通俗易懂的解释是什么?看这篇就够了
  15. STM32MP157开发笔记 | 04 - TF-A、uboot、linux内核源码获取、编译、烧写
  16. 5G室内覆盖面临四大挑战,如何破?
  17. 云主机服务比价与预测系统开发心得--第一周(1)--git技术
  18. Python 如何添加新列_我用Python写了个股票分析工具,真香啊!
  19. uniapp页面适配平板和手机
  20. 系统可靠性、安全性及系统性能评测

热门文章

  1. 淘宝用户行为分析项目
  2. java构造方法怎么分辨_Java中的构造方法总结
  3. Filter-enhanced MLP is All You Need for Sequential Recommendation论文阅读笔记
  4. 数据结构学习之排序(转)
  5. 说说C语言在生活中的应用
  6. java 皮尔逊相关系数_皮尔逊相关系数的java实现
  7. 刚上线的棋牌APP就遭DDOS攻击,我该怎么处理?
  8. 用turtle画正方形螺旋线(条件)
  9. 我们改如何定义零一科技节来临时的深圳?
  10. [已解决]连接星巴克的wifi后不弹跳验证页面