黑马程序员技术交流社区

标题: 【南京校区】注解详解 [打印本页]

作者: 大蓝鲸Java    时间: 2018-12-14 13:38
标题: 【南京校区】注解详解
注解详解

1,注解的定义
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、
枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说
明,注释。
2
,注解和注释的区别
注释:给程序员看的。
注解
:给虚拟机看的。(让虚拟机看到程序中的注解,注解代表程序的一些特殊的功能。)
3JDK中提供的注解
3.1@Override :描述子类重写父类的方法。
JDK1.5版本的时候 该注解只能应用在 类的继承上。
JDK1.6版本的时候 该注解可以应用在 类的实现上。
3.2@SuppressWarnings :压制警告.
作用:让警告提示不出现。包括已过时的提示也不会出现。
可选值:
unused:变量未使用。
解释:如果成员变量没有被使用,那么在
eclipse中会有黄色波浪线出现,在idea中变量名会以灰色的形式 体
现。加上该注解则变量以正常形式体现,黄色波浪线消失或者从灰色变成正常颜色。
deprecation:使用了不赞成使用的类或方法时的警告。
解释:即当使用的方法已经过时的时候,在编译器中会有中横杠的形式体现。
加上该注解之后,以正常形式体现。
unchecked:执行了未检查的转换时的警告。比如没有使用泛型。
解释:未进行类型转换时,会有黄色波浪线提示。
加上该注解之后,黄色波浪线消失。
falthrough:当switch程序块直接通往下一种情况而没有break时的警告。
解释:当使用
switchcase穿透特性时出现。
加上该注解之后,警告消失。
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
path:在类路径、源文件路径等中有不存在的路径时的警告。
解释:在使用本地
xmltxtproperties等文时,路径不存在警告。
加上该注解之后,警告消失。
serial:当在可序列化类尚缺少serialVersionUID定义时的警告。
解释:当使用对象操作流要把当前类的对象以字节的形式写到本地时,如果
javabean类中未标记版本号,则
javabean类会加黄色波浪线。
加上该注解之后,警告消失。
finally:任何finally子句不能正常完成时的警告。
解释:当
try...catch...finally...语句中最后的finally语句不能正常完成时警告,比如在finally中出现了return
加上该注解之后,警告消失。
all:关于以上所有情况的警告。
解释:正常情况下,我们都会写
all表示当上面所有情况都出现时,都会压制警告。
3.3@Deprecated :描述方法过时。
当版本进行迭代时,如果有新的更好的方法可以替代旧方法,那么会在旧方法上加上该注解,表示过时。比如Date
类中的大多数构造都被
4,元注解
1、元注解的定义:用于定义注解的注解就是元注解。
2、元注解介绍:
@Retention
作用:指明修饰的注解的生存周期,即会保留到哪个阶段。可选值:
* RetentionPolicy.SOURCE:源码级别保留,编译后即丢弃。
* RetentionPolicy.CLASS:编译级别保留,编译后的class文件中存在,在jvm运行时丢弃,这是默认值。
* RetentionPolicy.RUNTIME:运行级别保留,编译后的class文件中存在,在jvm运行时保留,可以被反射调用。
@Target
作用:指明了修饰的这个注解的使用范围,即被描述的注解可以用在哪里。可选值:
* ElementType.TYPE:接口、类、枚举、注解
* ElementType.FIELD:字段、枚举的常量
* ElementType.METHOD:方法
* ElementType.PARAMETER:方法参数
* ElementType.CONSTRUCTOR:构造函数
* ElementType.LOCALVARIABLE:局部变量
*ElementType.ANNOTATIONTYPE:注解
* ElementType.PACKAGE:包
@Documented
作用:用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档。
@Inherited
作用:被它修饰的 Annotation 将具有继承性。 如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将
自动具有该注解。
3、元注解,使用案例:
Spring中的常用注解@Controller的源码
五、自定义注解
例:
注意事项:
1@interface 关键字用于声明注解
2、注解的属性的类型只能是下列类型
* 基本数据类型: * String类型: * Class类型: * 注解类型: * 枚举类型: * 以上类型的一维数组
3、特殊属性value
如果只给value设置值,可以这样用: @MyAnnotation(value="hello") 或者 @MyAnnotation("hello")
如果给多个属性设置值,必须使用此种方式: @MyAnnotation(value="hello",name="aaa")
4
、数组属性的用法例:
@MyAnnotation(hobby="看书")
@Target(ElementType.Type,ElementType.Field,ElementType.Method)
@Retention(RetentionPolicy.RUNTIME)
public @interface 自定义注解名{
...
} public @interface MyAnnotation{
String name() default "";
String value() default "";
String[] hobby() default{};
}
@MyAnnotation(hobby="看书")
@MyAnnotation(hobby={"看书"})
@MyAnnotation(hobby={"
看书"打球”})
以上写法都对
5、属性如果没有默认值,在声明注解时,必须指定属性值







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2