JDK自带注解
1.@Override
2.@Deprecated
3.@Suppvisewarnings
@Override注解的作用
@Override注解仅作用在方法上,被标识方法表示重写父类的方法,用这个注解可以避免方法名跟参数写错。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
这是@Override的代码源码,上面@Target表示该注解的作用域,该注解的作用域是==ElementType.METHOD==表示作用在方法上。另外它还拥有一个@Retention,这也是java里面一个自带的注解。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* Returns the retention policy.
* @return the retention policy
*/
RetentionPolicy value();
}
在@Retention注解的源码里可以清晰地看到他的作用域是在注解上面标识,@Documented 将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。
它里面内置了一个枚举的类,进这个类里面看看。
public enum RetentionPolicy {
/**
* Annotations are to be discarded by the compiler.
*/
SOURCE,
/**
* Annotations are to be recorded in the class file by the compiler
* but need not be retained by the VM at run time. This is the default
* behavior.
*/
CLASS,
/**
* Annotations are to be recorded in the class file by the compiler and
* retained by the VM at run time, so they may be read reflectively.
*
* @see java.lang.reflect.AnnotatedElement
*/
RUNTIME
}
在这个类里面可以清晰地看到,有三种枚举类型。
SOURCE :被编译器忽略
CLASS :注解将会被保留在Class文件中,但在运行时并不会被VM保留。这是默认行为,所有没有用Retention注解的注解,都会采用这种策略。
RUNTIME :保留至运行时。所以我们可以通过反射去获取注解信息。
然后我们在回过头来看@Override,它里面的源码注解就表示,在生成class文件的时候后是被编译器所忽略的,仅作为一个标识性注解。
@Deprecated注解的作用
意思是说此方法已过时,过时的原因就是有新的API的类替代了次方法。
这个被划去的方法仍然是可以正常使用的,就是一个提示而已。
下面来写一个示例来看一下这个注解有什么作用。
public interface Person {
@Deprecated
String speak();
}
在图片中可以看到,调用的方法上面已经出现了一个下划线,这就是标识这个方法已经过时,但是这是一个提示你的注解,在编译时对代码并没有影响。
@SuppressWarnings注解的作用
J2SE 提供的最后一个批注是@SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。@SuppressWarnings。批注允许您选择性地取消特定代码段(即,类或方法)中的警告。其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个@SuppressWarnings批注,以使您不会再看到警告。虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止
您对警告无动于衷 — 您看到的每一个警告都将值得注意。
[以下是摘抄csdn的文章]
()
通过 @SuppressWarnings 的源码可知,其注解目标为类、字段、函数、函数入参、构造函数和函数的局部变量。
通过代码可以看到,通过在方法上面注解@SuppressWarnings(value=”deprecation”)警告的横线就取消了。
以下是注解内部的一些参数及其定义。
关键字 | 用途 |
all | 抑制所有警告 |
boxing | 抑制装箱、拆箱操作时候的警告 |
cast | 抑制映射相关的警告 |
dep-ann | 抑制启用注释的警告 |
deprecation | 抑制过期方法警告 |
fallthrough | 抑制finally模块没有返回的警告 |
finally | 抑制finally模块没有返回的警告 |
null | 忽略对null的操作 |
还有很多,详细的请查看API文档。