Java注解

注解概念:

1、JDK5及其以后JDK版本开始支持Java注解;

2、Java注解(Annotation)也叫作元数据,以‘@注解名’在代码中存在,它是一种在源代码中标注的特殊标记,可以标注源代码中的类、属性、方法、参数等代码,主要用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。

Java注解按照是否含有参数分为三种:

不带参数,语法结构为:@Annotation

带一个参数的注解,语法结构为:@Annotation(参数) 

 //也可@SuppressWarnings(value = "unused")(消除警告可以在方法外面也可以在类外部)

                   //也可@SuppressWarnings(value = { "unused", "deprecation" })

带多个参数的注解,语法结构为:@Annotiation(参数1, 参数2, 参数3...) 

内置注解:

@Override注解:

@Override被用于标注方法,用于说明所标注的方法是重写父类的方法:

为了支持@Override,需要将项目工程升级为1.6或其以上版本;如果升级后Java代码没问题,但是工程报错,可以通过如下操作解决:右键项目“Properties”——>“Project Facets”——>右边java项选择相应的版本就OK了。

@Deprecated注解

@Deprecated 用于说明所标注元素(成员变量或方法)因存在安全问题或有更好选择而不鼓励程序员使用,如果强行使用,则编译器会发出警告。(通俗来说就是方法过时)

 

过时的方法可以使用但是不建议使用,此时我们要消除警告。因Date类中getHours()添加了@Deprecated注解,所以使用时出现了黄色波浪线。

@SuppressWarnings注解

@SuppressWarnings用于取消编译器所显示的警告,该注解常用属性值如下:

deprecation:使用已被@Deprecated标注的程序元素;、

unused:程序含有未被使用的元素;

 

serial:在可序列化的类上缺少serialVersionUID定义;

自定义注释:

注解语法结构:

[public] @interface 注解名 {   

 [属性1;]   

 [属性2;]   

 ...   

 [属性n;] }

属性语法结构:

数据类型 属性名() [default 默认属性值];

注意: 注解属性默认没有默认值,如果注解中定义了无默认值的注解属性,则使用该注解时必须指定值:

如果注解属性名为value,使用该注解时可以直接赋值:

由于@SuppressWarnings注解内定义的注解属性的属性名为value,所以赋值时可以省略“value=”。

如果注解属性的数据类型为数组类型,赋多个值时必须使用{}括起来;但若只赋一个值,则无需使用{}:

由于value注解属性有多个值,所以赋值时必须使用{}将值括起来

value注解属性只有一个值,所以赋值时无需使用{}将值括起来

元注解——@Target

Java提供了四个用于修饰自定义注解的元注解:@Target、@Retention 、@Documented和@Inherited

@Target:用于指定被修饰的自定义注解只能用于修饰程序中哪些元素,该元注解有如下属性值: 

1、ElementType.FIELD:应用于全局属性

2、ElementType.METHOD:应用于方法

3、ElementType.PARAMETER:应用于方法的参数

4、ElementType.TYPE:应用于类、接口或者枚举声明

元注解——@Target

限制自定义注解@Override只能用来标注方法。注意:由前面知识可知大括号可以去掉(因为value赋值的时候可以省略)。

元注解——@Retention

@Retention:用于指定被修饰的自定义注解可以保留多久,该元注解有如下属性值:

1、RetentionPolicy.SOURCE:编译器将直接丢弃被修饰的注解。

2、RetentionPolicy.CLASS:默认值,编译器将把注解记录在class文件中,当运行Java程序时,虚拟机不再保留注解;

3、RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行java程序时,虚拟机保留注解,程序可以通过反射获取该注解;

 

 

元注解——@Documented

1、选中java工程鼠标右键点击“Export…”,出现下图:

 

2、在上图红框处输入javadoc点击“Next >”按钮,出现下图:

 

3、点击“Finish”按钮打开项目根目录打开名为doc的文件夹使用浏览器软件(如Google)打开名为index.html文件点击 “Student”导航,在右侧即可找到如下内容:

 

说明:如果@Documented元注解没有修饰前面Override自定义注解,则生成的文档不会有如上图红框框起的部分。

元注解——@Inherited

@Inherited:如果父类所使用的注解有@Inherited修饰,则子类可以继承该注解,否则不能继承。

 

Father类添加了由@Inherited元注释所修饰的Bean自定义注解,所以有内容输出;如果将@Inherited元注释去掉,尽管Father类依然有Bean自定义注解,但却没有内容输出。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章