总结笔记(三) - Java 反射和注解总结

反射总结

什么是反射

反射是 Java 语言的一个特性,就是在程序运行状态中,对于任何一个类,都可以通过反射知道这个类所有的方法和属性。对于任何一个实例,都可以调用这个实例的任何方法和属性。这个在运行时动态获取类或者实例的属性和方法,动态调用属性和方法的特性就叫反射。

反射有什么用

从特性可以看出,在运行时可以动态调整属性的值和调用代码,可以让程序更灵活。主要用于以下几点

  • 动态创建实例( class.newInstance 方法 )
  • 调用某个方法( method.invoke 方法 )
  • 修改或者获取某个字段的值

反射的常用方法介绍

Class 常用方法介绍
getDeclaringClass  一般针对内部类,如 B 是 A 的内部类,在 B 的 class 上调用这个方法,返回的是 A 

getDeclaredClasses 获取当前类声明的内部类

getClasses  包含当前类的父类和声明的 public 的内部类

newInstance  创建一个类的实例

forName 获取一个类,如果类没有加载会加载

getConstructor 系列方法,可以获取构造方法类实例,然后调用实例的 newInstance 方法可以获得一个实例
Method 常用方法介绍
getDeclaredClass  该方法是在哪个类里面声明的

invoke 该方法可以调用某个实例的某个方法。第一个参数为 null 时表示调用静态方法,第一个参数传入某个实例的时候,表示调用实例的某个方法。
Filed 常用方法介绍
getXXX 获取字段值

setXXX 设置字段值

常用的场景

动态配置

可以通过 Class.forName 方法加载指定的配置类,然后读取配置,以达到动态配置的效果。

动态代理

动态代理底层用到了反射。

hook 框架

动态生成实例,修改字段值、调用非 public 方法

参考资料:

学习java应该如何理解反射?

注解总结

什么是注解

注解是 JDK 1.5 引入的一个特性,用来给 Java 代码提供元数据。注解本身不直接影响代码的执行。

如何理解呢?注解是 Java 的一个特性,元数据可以理解为给编译器或者 jvm 看的++注释++,不直接影响程序的运行。但是可以在运行时通过读取注解做一些事情。可以把元数据理解为额外的一些可用可不用的额外信息。

注解定义

和定义接口类似,只不过关键字是 @interface。下面一段代码演示了如何定义个注解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
    int id();
    String msg();
}

注解的应用场景

  • 提供信息给编译器 这个接触的不多
  • 编译阶段的处理 比如生产文档,这个有时候会用
  • 运行时的处理 这个相对用的多,就是说运行时读取注解的值,来做一些事情,比如 Retrofit 框架库,就用到了注解。具体的原理分析在后续笔记记录。

参考资料:

java注解-最通俗易懂的讲解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值