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 {
}