基本的Annotation介绍:
使用Annotation时要在其前面添加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素
三个基本的Annotation:
@Override:限定某个方法,是重写父类方法,该注释只能用于方法
@Deprecated:用于表示某个程序元素(类、方法等)已过时
@SuppressWarnings:抑制编译器警告
例子:
package li.annotation;
public class Override_ {
public static void main(String[] args) {
}
}
class Father{//父类
public void fly(){
System.out.println("Father fly ...");
}
}
class Son extends Father{//子类
//@Override 放在fly方法上,表示子类的fly方法重写了父类的fly方法
//即使这里没有写@Override,其实还是重写了父类方法
//但是如果写了@Override注解,编译器就会检查该方法是否整的重写了父类的方法。
//如果的确重写了就编译通过,如果没有构成重写则编译错误
//它的意义就在于语法的校验
@Override
public void fly(){
System.out.println("Son fly ...");
}
}
@Override使用说明:
@Target(ElementType.METHOD)
,说明只能修饰方法点击@Override进去可以看到Override的定义:
补充说明:@interface
的说明
@interface
不是接口,是注解类 ,在JDK1.5之后加入的
Deprecated用于表示某个程序元素(类、方法等)已经过时
例子:
package li.annotation;
public class Deprecated_ {
public static void main(String[] args) {
AAA a = new AAA();
a.hi();
System.out.println(a.n1);
}
}
// @Deprecated 修饰某个元素,表示该元素已经过时
// 即 不再推荐使用,但是仍然可以使用
@Deprecated
class AAA{
@Deprecated
public int n1 = 10;
@Deprecated
public void hi(){
}
}
查看@Deprecated注解类的源码:
@Deprecated使用说明:
@SuppressWarnings属性介绍及属性说明:(部分)
属性 | 属性说明 |
---|---|
all | 抑制所有警告 |
boxing | 抑制装箱、拆箱操作时候的警告 |
cast | 抑制映射相关的警告 |
dep-ann | 抑制启用注释的警告 |
deprecation | 抑制过期方法警告 |
fallthrough | 抑制确在switch中缺失breaks的警告 |
finally | 抑制finally模块没有返回的警告 |
hiding | 抑制与隐藏变数的区域变数相关的警告 |
incomplete-switch | 忽略没有完整的switch语句 |
nls | 忽略非nls格式的字符 |
null | 忽略对null的操作 |
rawtypes | 忽略没有指定泛型的警告(传参时没有指定泛型的警告错误) |
restriction | 抑制使用不建议或禁止参照相关的警告 |
serial | 抑制与实现序列化的类遗漏serialVersionUID的的警告 |
static-access | 抑制不正确的静态访问方式警告 |
synthetic-access | 抑制子类没有按最优方法访问内部类的警告 |
unchecked | 抑制没有进行类型检查操作的警告 |
unqualified-field-access | 抑制没有权限访问的域的警告 |
unused | 抑制没被使用过的代码的警告 |
例子:
package li.annotation;
import java.util.ArrayList;
import java.util.List;
// 1.当我们不希望看到警告时,可以使用@SuppressWarnings注解来抑制警告信息
// 2.在{""}中,可以写入你希望抑制(不显示)的警告信息
// 3.@SuppressWarnings的作用范围和你放置的位置有关
// 比如 @SuppressWarnings放置在main方法,那么抑制警告的范围就是main方法
public class SuppressWarnings_ {
@SuppressWarnings({"all"})
public static void main(String[] args) {
List list = new ArrayList();
list.add("jack");
list.add("mary");
list.add("Bob");
System.out.println(list);//[jack, mary, Bob]
}
}
查看@SuppressWarnings源码:
@SuppressWarnings可以放置的位置有:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造器), LOCAL_VARIABLE(局部变量)
该注解类有一个数组String[] value()
,通过该数组可以在@SuppressWarnings({""})
中设置多个属性,如@SuppressWarnings({"rawtypes","unchecked","unused"});
元注解的基本介绍:
JDK的元Annotation用于修饰其他Annotation
元注解的种类:
Retention:指定注解的作用范围,三种:SOURCE,CLASS,RUNTIME
Target:指定注解可以在哪些地方使用
Documented:指定该注解是否会在javadoc中体现
Inherited:子类会继承父类注解
说明:
只能用于修饰一个Annotation定义,用于指定该Annotation可以保留多长时间,@Rentention包含一个RetentionPolicy类型的成员变量,使用@Rentention时必须为该value成员变量指定值:
@Rentention的三种值:
基本说明:
用于修饰Annotation定义,用于指定 被修饰的Annotation可以用于修饰 哪些程序元素
@Target也包含一个名为value的成员变量
@Documented
@Retention(RetentionPolicy.RUNTIME)//它的作用范围是RUNTIME
@Target(ElementType.ANNOTATION_TYPE)//这里的ANNOTATION_TYPE 说明@Target只能修饰注解
public @interface Target {//注释类
/**
* Returns an array of the kinds of elements an annotation type
* can be applied to.
* @return an array of the kinds of elements an annotation type
* can be applied to
*/
ElementType[] value();
}
基本说明:
@Documented:用于指定被该元Annotation修饰的Annotation类将被 javadoc工具提取生成文档,即在生成文档时,可以看到该注解。
PS:定义为@Documented的注解必须设置Retention值为RUNTIME
被它修饰的Annotation将具有继承性,如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解
转载自: https://www.cnblogs.com/liyuelian/p/16647530.html