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