黑马程序员技术交流社区
标题:
南京校区-注解详解
[打印本页]
作者:
大蓝鲸Java
时间:
2018-11-2 11:48
标题:
南京校区-注解详解
注解详解
1
,注解的定义
注解(
Annotation
),也叫元数据。一种代码级别的说明。它是
JDK1.5
及以后版本引入的一个特性,与类、接口、
枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说
明,注释。
2
注解和注释的区别
注释:给程序员看的。
注解
:
给虚拟机看的。
(
让虚拟机看到程序中的注解,注解代表程序的一些特殊的功能。
)
3JDK
中提供的注解
3.1@Override :
描述子类重写父类的方法。
JDK1.5
版本的时候 该注解只能应用在 类的继承上。
JDK1.6
版本的时候 该注解可以应用在 类的实现上。
3.2@SuppressWarnings :
压制警告
.
作用:让警告提示不出现。包括已过时的提示也不会出现。
可选值:
unused
:变量未使用。
解释:如果成员变量没有被使用,那么在
eclipse
中会有黄色波浪线出现,在
idea
中变量名会以灰色的形式 体
现。加上该注解则变量以正常形式体现,黄色波浪线消失或者从灰色变成正常颜色。
deprecation:
使用了不赞成使用的类或方法时的警告。
解释:即当使用的方法已经过时的时候,在编译器中会有中横杠的形式体现。
加上该注解之后,以正常形式体现。
unchecked
:执行了未检查的转换时的警告。比如没有使用泛型。
解释:未进行类型转换时,会有黄色波浪线提示。
加上该注解之后,黄色波浪线消失。
falthrough
:当
switch
程序块直接通往下一种情况而没有
break
时的警告。
解释:当使用
switch
的
case
穿透特性时出现。
加上该注解之后,警告消失。
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
path
:在类路径、源文件路径等中有不存在的路径时的警告。
解释:在使用本地
xml
,
txt
,
properties
等文时,路径不存在警告。
加上该注解之后,警告消失。
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
:方法参数
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
* ElementType.CONSTRUCTOR
:构造函数
* ElementType.LOCAL
VARIABLE
:局部变量
*ElementType.ANNOTATION
TYPE
:注解
* 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