JAVA中注解基础(Annotation)
来源:互联网 发布:淘宝天天特价在哪里 编辑:程序博客网 时间:2024/06/16 04:15
1.注解的介绍
1.1注解概念
注解:注解是那些插入到源代码中用于某种工具处理的标签。这些标签可以在源码层次上进行操作,或者可以处理编译器将它们纳入到注解类文件中。
注解不会改变对编写的程序的编译方式。JAVA编译器对于包含注释和不包含注解的代码会生成相同的虚拟机指令。在JAVA中注解是当作一个修饰符来使用的,跟public、final等修饰符的地位一样, 他被置于被注解项之前,中间没有分号。每一个注解的名称前面都加上了@符号,这有点类似于Javadoc的注解。然而,Javadoc注解出现在/*…..*/定界符的内部,而注解是代码的一部分。
1.2注解的作用:
1、生成文档。常用的有@see @param @return 等。
2、跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。
3、在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。
1.3注解包含的API:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
2.注解语法
2.1一个注解是由一个注解接口来定义的:
public @interface Test{}2.2注解里面的成员变量
注解里的成员变量声明分为两种形式:
2.2.1无默认值的形式
public @interface MyInfo{int age();String name();}看一下,成员变量无默认值形式下如何使用注解
public class My {@MyInfo(name="Microstrong",age=20)public void info(){...}}2.2.2有默认值的形式
也可以在定义Annotation的成员变量时,为其指定默认值,指定成员变量默认值使用default关键字。
public @interface MyInfo{int age() default 20;String name() default "Microstrong";}如果Annotation的成员变量已经指定了默认值,使用该Annotation时可以不为这些成员变量指定值,而是直接使用默认值。
public class My {@MyInfo()public void info(){...}}2.3根据Annotation是否包含成员变量,可以把Annotation分为如下两类:
标记Annotation:没有成员变量的Annotation被称为标记。这种Annotation仅用自身的存在与否来为我们提供信息,例如@override等。
元数据Annotation:包含成员变量的Annotation。因为它们可以接受更多的元数据,因此被称为元数据Annotation。
3.元注解
3.1@Target
@Target元注解可以应用于一个注解,以限制该注解可以应用到哪些项上。简单来说,@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量,具体见下表。
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
CONSTRUCTOR:构造器的声明
FIELD:域声明(包括enum实例)
LOCAL_VARIABLE:局部变量声明
METHOD:方法声明
PACKAGE:包声明
PARAMETER:参数声明
TYPE:类、接口(包括注解类型)或enum声明
例1(单个ElementType):
@Target(ElementType.METHOD) //表示该注解可以用在什么地方(方法的声明)public @interface MyInfo{int age() default 20;String name() default "Microstrong";}例2(多个ElementType):
@Target({ElementType.METHOD,ElementType.FIELD}) //表示该注解可以用在什么地方public @interface MyInfo{int age() default 20;String name() default "Microstrong";}3.2@Retention
@Retention定义了该Annotation被保留的时间长短。
作用:表示需要在什么级别保存该注解信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
@Retention表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
SOURCE:Annotation只保留在源代码中,编译器编译时,直接丢弃这种Annotation。
CLASS:编译器把Annotation记录在class文件中。当运行Java程序时,JVM中不再保留该Annotation。
RUNTIME:编译器把Annotation记录在class文件中。当运行Java程序时,JVM会保留该Annotation,程序可以通过反射获取该Annotation的信息。
例1:
@Retention(RetentionPolicy.RUNTIME)public @interface MyInfo{int age() default 20;String name() default "Microstrong";}
3.3@Documented
@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
@Documented将注解包含在Javadoc中例1:
@Documentedpublic @interface MyInfo{int age() default 20;String name() default "Microstrong";}3.4@Inherited
@Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
@Inherited允许子类继承父类中的注解
例1:
import java.lang.annotation.Inherited;@Inheritedpublic @interface MyInfo{int age() default 20;String name() default "Microstrong";}
4.基本的注解
JDK默认提供了如下几个基本Annotation:
4.1@Override
限定重写父类方法。对于子类中被@Override 修饰的方法,如果存在对应的被重写的父类方法,则正确;如果不存在,则报错。@Override 只能作用于方法,不能作用于其他程序元素。
4.2@Deprecated
用于表示某个类或方法已过时。如果使用被@Deprecated修饰的类或方法时,编译器会发出警告。
4.3@SuppressWarning
抑制编译器警告。指示被@SuppressWarning修饰的程序元素取消显示指定的编译器警告。包含该程序元素中的所有子元素,例如类以及该类中的方法。例如,常见的@SuppressWarning(value="unchecked")
4.4@SafeVarargs
@SafeVarargs是JDK 7 专门为抑制“堆污染”警告提供的。
- JAVA中注解基础(Annotation)
- java基础---注解(Annotation)
- 【java基础】注解(Annotation)
- Java注解Annotation基础
- Java注解Annotation基础
- Java注解Annotation基础
- Java注解Annotation基础
- Java注解Annotation基础
- Java注解Annotation基础
- Java注解Annotation基础
- Java注解Annotation基础
- Java基础 注解Annotation
- Java注解Annotation基础
- java基础总结--注解(Annotation)基本概念
- Java中注解Annotation
- java 基础总结--注解(Annotation)自定义注解入门
- java基础总结--注解(Annotation)--注解处理器
- Java基础加强---Annotation(注解)
- Eclipse 反编译插件JadClipse安装
- 查看远程仓库地址
- Hibernate的一级缓存
- ribbon的注解使用报错--No instances available for [IP]
- UVa 10082 WERTYU
- JAVA中注解基础(Annotation)
- 移动端(手机)实现1像素下边框的方法
- mybatis ---- 级联查询 一对多 (集合映射)
- oracle sysaux表空间管理
- 筛选出行或列的唯一值
- java注解annotation使用的一点建议
- 欢迎使用CSDN-markdown编辑器
- 多个柱状图重叠显示问题 jQuery.flot
- 面试摘要