Java反射与注解(Datawhale)

反射

1.1简介

  • 定义:java语言中一种动态访问、检测修改它本身的能力
  • 作用:
    • 在运行时判断任意一个对象所属的类
    • 在运行时构造任意一个类的对象
    • 在运行时判断任意一个类所具有的成员变量和方法
    • 在运行时调用任意一个对象的方法
  • 应用:
    • 通过使用类全名创建类实例来使用外部用户定义的类
    • 开发类浏览器和智能IDE
    • 在测试工具中用于检测类的内部结构
    • 在框架开发中用于实现配置信息的处理
    • 实现Java的动态代理

1.2使用方法

  • 主要通过java.lang.Class类来实现
  • java.lang.Class
    • 定义:java.lang.Class类是反射机制的基础
    • 作用:存放着对应类型对象的 运行时信息
  • 实现步骤:
  1. 获取 目标类型的Class对象
  2. 通过 Class 对象分别获取Constructor类对象、Method类对象 & Field 类对象
  3. 通过 Constructor类对象、Method类对象 & Field类对象分别获取类的构造函数、方法&属性的具体信息,并进行后续操作
  • 获取Class实例的三种方法:
    • 对象.getClass()
    • 类型名.class
    • Class.forName()
  • 使用Class实例创建对象
//通过newInstence(),此方式只适用于无参构造
Phone instance1 = (Phone) clazz1.newInstance();
//先调用构造器,再通过newInstence()创建
Constructor<?>[] cons = clazz1.getConstructor();
//假设第一个为无参构造
Phone instance2 = cons[0].newInstance();
//假设第二个构造方法为两个String类型参数
Phone instance3= cons[1].newInstance("s1","s2");
  • 获取指定属性Field和所有的属性Field
Class<?> c = Class.forName(className);
Field field = c.getField(fieldName);
Class typeClass = field.getType();
Type type = field.getGenericType();

注解

  • 定义:一种元数据形式,提供有关程序的数据,该数据不属于程序本身。注释对其注释的代码的操作没有直接影响。
  • 用途:
    • 编译检查
    • 在反射中使用Annotation
    • 根据Annotation生成帮助文档
    • 能够帮忙查看代码
  • 内置注解
    • @Override检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
    • @Deprecated标记过时方法。如果使用该方法,会报编译警告。
    • @SuppressWarnings指示编译器去忽略注解中声明的警告
  • 自定义注解@interface
public @interface MyTestAnnotation {
     注解属性  [default 默认值]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值