Java中的注解
来源:互联网 发布:黑暗圣经知乎 编辑:程序博客网 时间:2024/05/18 01:05
注解(Annotation)简介
Annotation(注解)是Java JDK5及其以后版本中引入的一个特性。注解是Java的一个新的类型(与接口类似),它与类、接口、枚举是在同一个层次,它们都称为Java的一个类型(TYPE)。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。它的作用非常多,进行编译检查、生成说明文档、代码分析等。
Java JDK提供的几个基本注解
1.@SuppressWarnings 该注解的作用是阻止编译器发出某些警告信息
它可以有以下参数:
deprecation 过时的类或方法的警告;
unchecked 执行了未检查的转换时的警告;
fallthrough 当swith程序块直接通往下一种情况而没有break时的警告;
path 在类路径、源文件路径等中有不存在的路径时的警告;
serial 当在可序列化的类上缺少serialVersionUID定义时的警告;
finally 任何finally子句不能完成时的警告;
all 关于以上所有情况的警告。
2.@Deprecated 该注解的作用是标记某个过时的类或方法。
3.@Override 该注解在方法前面,用来标识该方法是重写父类的某个方法。
Java JDK提供的元注解
1.@Target 它是被定义在一个注解类的前面,用来说明该注解可以被声明在哪些元素前。
它可以有以下参数:
ElementType.TYPE 说明该注解只能被声明在一个类前;
ElementType.FIELD 说明该注解只能被声明在一个类的字段前;
ElementType.METHOD 说明该注解只能被声明在一个类的方法前;
ElementType.PARAMETER 说明该注解只能被声明在一个方法参数前;
ElementType.CONSTRUCTOR 说明该注解只能声明在一个类的构造方法前;
ElementType.LOCAL_VARIABLE 说明该注解只能声明在一个局部变量前;
ElementType.ANNOTATION_TYPE 说明该注解只能声明在一个注解类型前;
ElementType.PACKAGE 说明该注解只能声明在一个包名前。
2.@Retention 它是被定义在一个注解类的前面,用来说明该注解的声明周期。
它可以有一下参数:
RetentionPolicy.SOURCE 指定注解只保留在一个源文件当中;
RetentionPolicy.CLASS 指定注解只保留在一个class文件中;
RetentionPolicy.RUNTIME 指定注解可以保留在程序运行期间。
3.@Documented 用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
4.@Inherited 阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
注解的声明周期
一个注解可以有三个不同的声明周期,它的默认声明周期是保留在一个class文件,我们可以使用@Retention元注解指定它的生命周期。
1.java文件 当在一个注解类前定义了@Retention(RetentionPolicy.SOURCE)的注解,那么说明该注解只保留在一个源文件当中,当编译器将源文件编译成class文件时,它不会将源文件中定义的注解保留在class文件中。
2.class文件 当在一个注解类前定义了@Retention(RetentionPolicy.CLASS)的注解,那么说明该注解只保留在一个class文件当中,当加载class文件到内存时,虚拟机会将注解去掉,从而程序中不能访问。
3.程序运行期间 当在一个注解类前定义了@Retention(RetentionPolicy.RUNTIME)的注解,说明该注解在程序运行期间都会在驻留内存当中。因此,我们可以通过反射来获得定义在某个类上的所有注解。
自定义注解
格式如下:
public @interface myAnno { //定义公共的final静态属性 ... //定义公共的抽象方法}1.注解和接口类似,它只能定义final静态属性和公共抽象方法。
2.注解的方法:
方法前默认会加上public abstract。
在声明方法时可以定义方法的默认返回值。例如String color() default "Blue"; 。
方法的返回值可以为8中基本类型,String、Class、枚举、注解以及这些类型的数组。
下面来看一个实例:
定义注解:
package com.tzy.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Description {String value();}
使用注解:
package com.tzy.annotation;@Description("People has name and gender.")public class People {private String name;private String gender;public People(String name, String gender) {this.name = name;this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}}
得到注解:
package com.tzy.annotation;public class AnnotationDemo {public static void main(String[] args) {String className = "com.tzy.annotation.People";try {Class<?> annoDemo = Class.forName(className);if (annoDemo.isAnnotationPresent(Description.class)) {Description description = (Description) annoDemo.getAnnotation(Description.class);System.out.println(description.value());}} catch (ClassNotFoundException e) {System.err.println(e);}}}
运行结果如下:
People has name and gender.
总结
注解可以看成是一个接口,注解实例就是一个实现了该接口的动态代理。注解大多是用来对某个类、方法、字段进行说明标识的,以便在程序运行期间我们通过反射获得该字段或方法的注解的实例,来决定该做什么处理或者不该做什么处理。
- Java中的注解
- Java中的注解
- --java中的注解
- java中的注解
- java中的元注解
- java中的注解
- java中的注解
- Java中的注解
- eclipse中的java注解
- Java中的注解
- java中的注解
- java 中的注解
- Java中的注解
- java中的注解 详解
- java中的注解用法。
- Java中的注解(@ Annotation)
- Java中的注解
- java中的注解
- JPA 简单应用 学习 .
- SQL Server 2008导入、导出数据库
- Linux基本配置和管理 10 ---- Linux下使用dd命令制作ubuntu的u盘启动
- vc++ 解决方案目录不生成ipch文件夹和.sdf文件
- 各类程序MD5加密写法
- Java中的注解
- 请求后台处理后,返回处理结果弹窗提示的几种方案
- 大数据的数据挖掘(1)
- intellij调试Grails2.3+
- smb 使用时碰到问题
- 如何进行JPG图片的存入及读取
- S3C2440上touchscreen触摸屏驱动
- android数据存储的一点感悟
- <c:if中contains是否包含