- 反射
- 发生在程序运行期间的动态机制,java的唯一动态机制
- Java反射机制,可以实现以下功能:
- 在运行时判断任意一个对象所属的类;
- 在运行时构造任意一个类的对象;
- 在运行时判断任意一个类所具有的成员变量和方法;
- 在运行时调用任意一个对象的方法;
- 生成动态代理;
- 反射的源头:
- Class<T> Class类型的实例可以用来表示java中运行期间的一个类型
- Class对象:Class对象在类第一次加载到内存后就已经存在的,唯一的,不变的,每一个类型只有一个
- Class对象可以操作这个类的所有内容(属性方法构造器...)
- 如何获取反射的源头:Class对象
- 类名.class
- Class.forName(权限定名) 权限定名:包名.类名
- 对象.getClass()
- 对象.getClass()
- 构造器<T> getConstructor(类<?>... parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类的指定公共构造函数。
- 构造器<?>[] getConstructors() 返回一个包含 构造器对象的数组, 构造器对象反映了此 类对象所表示的类的所有公共构造函数。
- 以上都是获取公共的,被public修饰的构造器
- 构造器<T> getDeclaredConstructor(类<?>... parameterTypes) 返回一个 构造器对象,该对象反映此 类对象所表示的类或接口的指定构造函数。
- 构造器<?>[] getDeclaredConstructors() 返回 构造器对象的数组, 构造器对象反映由此 类对象表示的类声明的所有构造函数。
- 反射创建对象
- Class-->T newInstance() 默认调用类型的空构造为对象初始化信息
- Constructor---> T newInstance(Object... initargs) 创建对象的同时调用当前构造器为对象初始化信息
- 注解:java8引入的注解机制
- 作用:
- 注释
- 标志|标识
- 使用注解时可以传递参数,可以在程序中通过反射操作注解,获取配置的信息在程序中使用
- 可以存在于Class文件中
- 大量的代替|简化配置文件的使用
- 使用: @注解名(参数)
- 注解的分类:
- jdk的内置注解 : 常见
- @Override 检查重写方法
- @SuppressWarnings("all") 抑制警告
- @Deprecated 表示已过时,不推荐使用
- @FunctionalInterface 标识函数式接口
- jdk的内置注解 : 常见
- 参数的个数分类:
- 标志|标识注解
- 单值注解
- 完整注解
- 元注解 : 注解注解的注解
- @Target 用于描述注解的使用范围
- @Retention 规定注解类型的声明周期
- @Documented 保留在API文档中
- @Inherited 标识注解类型可以被继承
- 自定义注解
- @interface 定义注解类型
- 默认实现java.lang.annotation.Annotation接口
- 自定义的注解类型就不能显示的继承其他父类,实现其他接口
- 如果注解类中的属性只有一个,建议名字为value,为value属性赋值可以直接赋值
- 为注解类型定义属性|字段: 数据类型 数据名();
- 属性的数据类型要求为: 基本数据类型 String, 枚举 , 注解类型 , 以及以上类型的数组
- 属性可以通过default提供默认值
- 注解解析器 : 通过反射操作注解
- 注意: 如果通过反射操作注解,注解类型的生命周期应该定义为运行期
- 作用:
- 函数式接口:接口中只与一个必须被重写的抽象方法
- @FunctionalInterface
- 四大内置函数式接口:
- 消费型接口 Consumer<T>
void accept(T t) --> 有来无回,有参数没有返回值
-
-
- 供给型接口 Supplier<T>
-
T get()
-
-
- 函数型接口 Function<T,R>
-
R apply(T t)
-
-
- 段言型接口 Predicate<T>
-
boolean test(T t)