之前对于这两个概念其实没有多少认识,只知道注解是标记,对于反射的印象就是类比于游戏进度的回显吧,惭愧惭愧~~~学习后有了一些更深刻的了解,记录一下,加深印象。java
@Override(重写方法):被用于标注方法,用于说明所标注的方法是重写父类的方法安全
@Deprecated(过期方法):用于说明所标注元素,因存在安全问题或有更好选择而不鼓励使用,若是强行使用,则编译器会发出警告编辑器
@SuppressWarnings(消除警告):用于取消编辑器所显示的警告,有以下属性值ide
@SafeVarargs(消除泛型警告) : Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告函数
@FunctionalInterface (标记函数): Java 8 开始支持,标识一个匿名函数或函数式接口工具
@Repeatable(屡次声明) : Java 8 开始支持,标识某注解能够在同一个声明上使用屡次性能
@Target:用于指定被修饰的自定义注解只能用于修饰程序中哪些元素学习
ElemenetType.CONSTRUCTOR:构造器声明
ElemenetType.LOCAL_VARIABLE:局部变量声明
ElemenetType.PACKAGE:包声明
ElemenetType.PARAMETER :参数声明
ElemenetType.METHOD :方法声明
ElemenetType.FIELD:全局属性声明(包括 enum 实例)
ElemenetType.TYPE:类,接口(包括注解类型)或enum声明 编码
@Retention:用于指定被修饰的自定义注解能够保留多久,有三个经常使用属性
RetentionPolicy.SOURCE:在源文件中有效(即源文件保留)
RetentionPolicy.CLASS:在class文件中有效(即class保留)
RetentionPolicy.RUNTIME:在运行时有效(即运行时保留) spa
@Documented:执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中
@Inherited:若是父类所使用的注解有此修饰,则子类能够继承该注解,不然不能
1 @Target({ElementType.FIELD,ElementType.TYPE})//可修饰属性和类 2 @Retention(RetentionPolicy.RUNTIME)//运行时 3 public @interface RefStudy { 4 5 String name() default "a"; 6 String[] mores(); 7 }
方法名 | 返回值 | 参数描述 |
Class.forName(String) | 类的元信息 | 类文件的具体位置 |
类.getClass() | 类的元信息 | |
clz.getDeclaredFields() | 类中的全部属性 | |
getMethods() | 类的全部方法 | |
invoke(obj) | 经过反射执行方法 | 类的元信息 |
getAnnotation(class) | 注解 | 类的Class |
setAccessible(true) | 设置当前属性为可见 | true或者false |
clz.newInstance() | 类的实例对象 |