一、泛型
无界通配符 ?
上界通配符 ? extends Number
下界通配符 ? Supper Integer
泛型的作用
Java泛型保障了类型的安全
避免了类型转换逻辑
提高代码的重用率
二、反射
反射是指在Java运行状态中 给定一个类对象(Class对象),通过反射获取这个类对象
(Class对象)的所有成员结构;
给定一个具体的对象,能够动态地调用它的方法及对任意
属性值进行获取和赋值
这种动态获取类的内容、创建对象、以及动态调用对象方
法及操作属性的机制,就叫做Java的反射机制
https://docs.oracle.com/javase/8/docs/api/
优点
增加程序的灵活性,避免将固有的逻辑程序写死到代码里
代码简洁,可读性强,可提高代码的复用率
缺点
相较直接调用在创建对象比较多的情景下反射性能下降
内部暴露和安全隐患(破坏单例)
反射性能慢原因
寻找类Class字节码的过程,比如通过ClassName找到对应的字
节码Class,然后进行加载、解析,也会比较慢,而new的方式
则无需寻找,因为在Linking的解析阶段已经将符号引用转为
了直接引用
安全管理机制的权限验证等等
若需要调用native方法调用时JNI接口的使用
入参校验
Class对象的组成
获取Class对象的四种方式
通过ClassLoader对象的loadClass()方法
类名.class
Class.forName()
object.getClass()
注解的定义和作用
注解的概念
注解是JDK1.5之后的新特性用来说明程序的
注解的使用:@注解名称
作用分类:
编写文档:通过代码里标识的注解生成文档【生成文档doc文档】
代码分析:通过代码里标识的注解对代码进行分析【使用反射】
编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】
Java提供了一些预定义的注解
@Override:检测被该注解标注的方法是否是继承自父类(接口)的
@Deprecated:该注解标注的内容,表示已过时
@SuppressWarnings:压制警告,一般传递参数all如@SuppressWarnings(“all”)
自定义注解
自定义注解
元注解
public @interface 注解名称{
属性列表; } 属性的返回值类型有:基本数据类型、String、枚举、注解、Class or an
invocation of Class、以上类型的数组
https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.6.1
元注解
@Target:描述当前注解能够作用的位置
ElementType.TYPE:可以作用在类上
ElementType.METHOD:可以作用在方法上
ElementType.FIELD:可以作用在成员变量上 @Retention: 描述注解被保留到的阶段
SOURCE:表示当前注解只在代码阶段有效
CLASS:表示该注解会被保留到字节码阶段
RUNTIME:表示该注解会被保留到运行阶段 JVM
自定义的注解:RetentionPolicy.RUNTIME;SOURCE < CLASS < RUNTIME