【Java】注解与反射

Class类

Class类的实例提供了特定数据类型的相关信息。

一个Class类的对象实际上表示的是一种类型

获取Class的三种方式

//(1).getClass()
Employee e;
Class info = e.getClass(); 
//(2)Class.forName()
Class info = Class.forName("java.util.Date")
//(3)T.Class
Class info1 = int.class;
Class info2 = Double[].class;

反射

所谓“反射(Reflection)”,就是把Java类中的各种成份映射成相应的另外一些特殊的Java类的实例,从而允许程序在运行时动态地完成一些工作:比如动态装载类型并创建实例,查询类的成员信息,动态地调用方法等。反射技术的核心类型是Class类。

不管每个类型创建了多少个实例,也不管你用什么方法获取此类型的Class实例,每个类型都只对应一个Class实例。

动态创建对象

使用构造方法对象或Class对象的newInstance()方法动态创建指定类型的对象

注解

注解相当于一种标记,加了注解就等于给代码打上了某个标记。javac编译器、 IntelliJ之类IDE以及其他一些注解处理工具(Annotation Processing Tool,APT)就 可以利用它来完成一些特殊的工作。

  • @Deprecated:标记类的成员已过时
  • @Override:要求子类必须覆盖基类的方法
  • @Serializable:指定某个类是可以序列化的
  • @FunctionalInterface:指定某个方法重写了基类的同名方法

自定义

注解,其实就是一个使用@interface定义的接口

public @interface MyTestAnnotation {
}

元注解

定义注解的类型也可以添加“注解”,这种针对“注解”的“注解”, 称为“元注解(meta-annotation)”

@Retention(RetentionPolicy.RUNTIME) //指明注解生存的时间
@Target({ElementType.METHOD,ElementType.TYPE}) //指明注解适用的场合
public @interface MyTestAnnotation {
}
Licensed under CC BY-NC-SA 4.0
Last updated on Jan 07, 2022 00:00 UTC
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy