1. 注解:Annotation
JDK5引入的一门技术,位于源码中使用其他工具进行处理的标签。但是它不是程序的本身,但是可以对程序做出解释。(相当于写给机器的注释)
注解用来修饰程序的元素(包 / 类 / 方法 / 字段等),但不会对被修饰的对象有直接的影响。
可以通过反射对注解信息进行访问和处理。
作用:提供信息给编译器/IDE工具;可用于其他工具来产生额外的代码 / 配置文件等;某些注解可以在程序运行时访问可以增强程序的动态性。
这就是我们最常见的注解之一,表示一个方法打算重写父类的一个方法。
2. 常见内置注解
Override重写注解:表示方法声明旨在覆盖超类型中的方法声明。 如果使用此注释类型注释方法,则除非至少满足以下条件之一:
1.该方法将覆盖或实现在超类型中声明的方法;
2.该方法具有与Object中声明的任何公共方法的覆盖相同的签名 。;否则需要编译器生成错误消息。
@Target(ElementType.METHOD) //只能用来修饰方法
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
可以在接口中设置语言级别为6 - @Override
解除报错
Deprecated废弃注解:不推荐程序员使用或者存在更好的替代方式;使用Deprecated修饰的元素编译运行时编译器会报出警告。例如:Thread类下的stop方法、suspend方法、resume方法;Date类下的getYear方法、getMonth方法…Deprecated修饰的元素都会有一个中划线在上面。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
//可以用来修饰构造器、字段、局部变量...
public @interface Deprecated {
}
SuppressWarnings压制警告注解:用来抑制编译时的警告信息,如果你想用编译运行时存在警告的元素时,但是又不想看到警告信息(和乱码兄弟一样看多了难受,总觉得自己的东西有问题)这时可以使用镇压警告注解。它与上面两个注解不一样,它需要传入一些已经定义好的参数才能正确使用。
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value(); //参数:压制警告的类型
}
1. @SuppressWarnings("unchecked") //忽略所有的未检查警告信息
2. @SuppressWarnings("deprecated") //忽略所有的过时元素的警告信息
3. @SuppressWarnings(value = {"deprecated","unchecked"}) //压制警告和未检查信息
4. @SuppressWarnings("all") //压制所有的警告信息
注意当压制多个警告时请将他们以第三种value数组的形式写入,否则编译器爆红。
压制警告信息的名称并不是Java规范的强制要求,这些是编译器/IDE厂商自己定的。编译器厂商需要自行协商保证同名的警告类型在不同编译器上也能正常运行。而且不同版本的警告信息同样存在不同。在JDK的bin目录下启动cmd输出:javac -X可以看到当前版本所支持的所有警告信息名称。
Test测试注解:这是一个外部引入Jar包的注解,是Junit单元测试包下一个注解,可以用来进行单元测试,即程序可以不调用main方法原地进行运行测试。使用它可以手动引入hamcrest-core 和 junit 两个jar包,也可以使用maven引入。
3. 元注解
元注解:用来负责注解其他注解,给自定义的注解增加一些权限或者限制。Java内置了五大元注解。
@Target:用于描述注解的使用范围,例如方法,字段,构造器;FIELD / METHOD / PARAMETER / CONSTRUCTOR / LOCAL_VARIABLE。
@Retetion:用于描述注解的生命周期,注解存在java源码中、class字节码文件中、还是能够在JVM运行时通过反射动态加载,生命周期:SOURCE < CLASS < RUNTIME。
@Document:说明该注解将被包含在javadoc文档中。
@Inherited:说明子类可以继承父类中的该注解。
@Repeatable:一半的注解都不能重复标注,如果是实现了Repeatable注解的目标注解可以重复应用标注。