1、反射
Class对象在当前类加载到内存的时候就存在了,不是我们构建的,一个类型只有一个的,而Class对象中存储着这个类的所有信息(构造器,属性,方法...)
创建对象时候,获取的是当前类的Class对象的复制体|镜像。
只要获取到这个Class对象,就可以通过Class对象做事情。
获取Class对象的方式:(反射源头)。
类名.class 对象.getClass() Class.forName("包名+类名")--推荐
通过反射的源头Class 对象操作:
类加载器:,加载器将.class文件的二进制文件装入JVM的方法区,并且在堆区创建描述这个类的java.lang.Class对象。用来封装数据。 但是同一个类只会被类装载器装载一次。
类加载的时机:
操作基中的静态变量 调用静态方法 创建类的实例(new 对象)
反射 初始化子类(先父类后子类)
2、注解
注解:(能看懂,能理解)
注解的作用:
(1)对程序解释说明的作用
(2)可以获取到文件的信息或进行处理
注解的使用:
@注解名 位置:按照不同的逻辑不同的要求定义使用位置
注解的分类:
如果根据参数的不同不同进行分类:
(1)标记注解:没有参数
(2)单值注解:一个参数
(3)完整注解:多个参数
根据用途和方法的不同进行分类:
JDK内置注解 @Override 检查重写 @SuppressWarnings("all") 抑制警告 @Deprecated 标记过时 不推荐使用
4、元注解: 注解注解的注解
Target 用与描述注解使用的范围|位置
如果@Target没有定义,默认使用在任意位置
@Retention 表示需要在什么级别保存该注释信息,用于描述注解的生命周期
如果通过反射操作注解内容,需要Retention设置RUNTIME
@Documented 文档API中可见
@Inherited 表示一个注解类型会被自动继承
5、自定义注解 @interface
(1)参数: 定义参数可以使用无参方法形式定义,但是不是方法
(2)如果参数只有一个,推荐参数名为value,可以直接赋值,不用指定名字
(3)参数的类型: 基本数据类型,String,enum,Class,Annotation,以上类型的数组
(4)参数权限修饰,只能为public,default(不写默认)
https://www.bilibili.com/video/BV1EY411J776/https://www.bilibili.com/video/BV1EY411J776/