Java学习之注解Annotation

一、 什么是注解(Annotation)?

 1. 概念:

  Annotation是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用注释,程序开发人员可以可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息。

2. 作用:

  1)不是程序本身,可以对程序做出解释

  2)可以被其他程序读取

3. 格式

注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked");

4. Annotation在哪里使用?

可用于包、类、构造器、方法、成员变量、参数、局部变量的声明,相当于给它们添加额外的信息,我们可以通过反射机制编程实现对元数据的访问

二、基本Annotation,5个基本Annotation都在java.lang包下

  1) @Override :此注释只适用于修饰方法,表示一个方法声明打算重写超类中另一个方法的声明;

  2) @Deprecated: 用于表示某个程序元素(类、方法等)已过时,当其他程序使用已过时的类、方法时,编译器将会给出警告。表示不鼓励程序员使用给类、方法。

  3) @SuppressWarnings:指示被该Annotation修饰的程序元素(要以及该程序元素的所有子元素)取消显示指定的编译器警告。抑制编译时的警告信息。与前两个注释有所不同,需要添加一个参数才能正确使用,这些参数已经定义好了,我们选择就可以,参数如下:

 

  4) @SafeVarargs:Java7中的“堆污染”,修饰引发给警告的方法或构造器,类抑制“堆污染”警告;

    堆污染:当把一个不带泛型的对象赋给一个带泛型的得变量时,往往会发生这种“堆污染”

5) @FunctionallInterface:Java8中规定,如果接口中只有一个抽象方法,该接口就是函数式接口。@FunctionallInterface就是用来指定某个接口必须是函数式接口。

三、自定义Annotation

  1. @interface用来声明一个注解 

格式为:public @interface 注解名 {定义体}

  2. 其中每一个方法实际上是声明了一个配置参数

1)方法名称就是参数名称

2)返回值类型就是参数的类型(返回值类型只能是基本类型、String、Class、enum)

      3)可以通过default来声明参数的默认值(默认值为-1时,表示该参数不存在)

   4)如果只有一个参数成员,一般参数名为value   

@Retention(value=RetentionPolicy.RUNTIME)
@Target(value={ElementType.METHOD,ElementType.TYPE})
public @interface MyAnnotation {
    String name() default " ";
    int age() default 0;
    int id() default -1; //不存在
}

3. JDK的元注解:用于修饰其他的Annotation定义。作用:负责注解其他注解

   1)@Retention:用于指定被修饰的Annotation可以保留多长时间,@Retention包含了一个RetentionPolicy类型的value参数配置,所以使用@Retention时必须为该value参数指定值;

    

    [email protected](RetentionPolicy.SOURCE):将被编译器直接丢弃

   2)@Target:用于指定被修饰的Annotation能用于修饰哪些程序单元,也就是注解的适用范围;@Target包含了一个ElementType类型的value参数配置,所以使用@Target时必须为该value参数指定值;

    

    [email protected](ElementType.FIELD):只能修饰成员变量

   3)@Documented:用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档,如果定义Annotation类时使用了@Documentedx修饰,则所有使用该Annotation修饰的程序元素的API文档中将会包含该Annotation说明;

   4)@Inherited:指定被它修饰的Annotation将具有继承性---如果某个类使用了@Xxx注解(定义该注解时使用了@Inherited修饰)修饰,则其子类将自动被@Xxx修饰。

  4. 使用反射读取注解的信息:使用注解完成类和表结构的映射关系

    

   1)表名的注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyTable {
    String value();
}

   2)属性的注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyField {
    String columnName();
    String type();
    int length();
}

   3)使用反射读取注解

 1 public class Demo03 {
 2     public static void main(String[] args) {
 3         try {
 4                 Class clzz = Class.forName("com.java.annotation.MyStudent");
 5                 //获取该类所有的注解
 6                 Annotation[] annotations = clzz.getAnnotations();
 7                 for(Annotation a :annotations) {
 8                     System.out.println(a);
 9                 }
10                 //获取该类指定的注解
11                 MyTable mb = (MyTable) clzz.getAnnotation(MyTable.class);
12                 System.out.println(mb.value());
13
14                 //获取类的属性的注解
15                 Field f = clzz.getDeclaredField("id");
16                 MyField myfield = f.getAnnotation(MyField.class);
17                 System.out.println(myfield.columnName()+"---"+myfield.type()+"---"+myfield.length());
18
19             } catch (Exception e) {
20             e.printStackTrace();
21         }
22     }
23 }
时间: 2024-08-25 23:11:11

Java学习之注解Annotation的相关文章

java中的注解(Annotation)

转载:https://segmentfault.com/a/1190000007623013 简介 注解,java中提供了一种原程序中的元素关联任何信息.任何元素的途径的途径和方法. 注解是那些插入到源代码中使用其他工具可以对其进行处理的标签.注解不会改变程序的编译方式.java编译器会对包含注解与不包含注解的代码生成相同的虚拟机指令.在java中,注解是被当做修饰符(如public/static之类)来使用的. 注解与注释 注释是供人看的,注解是供程序调用的.一种是程序员写给另一个程序员的,一

Java基础:注解Annotation

从JDK5开始,Java增加了注解(Annotation),注解是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用注解,开发人员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息.代码分析工具.开发工具和部署工具可以通过这些补充信息进行验证.处理或者进行部署. 注解提供了一种为程序元素(包.类.构造器.方法.成员变量.参数.局域变量)设置元数据的方法.跟public.static等修饰符一样,注解是这些程序元素的属性,是这些程序元素的一部分,不能脱离

java基础篇---注解(Annotation)

一.概念 Annontation是Java5开始引入的新特征.中文名称一般叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类.方法.成员变量等)进行关联.更通俗的意思是为程序的元素(类.方法.成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的. Annontation像一种修饰符一样,应用于包.类型.构造方法.方法.成员变量.参数及本地变量的声明语句中. java.lang.annotation.

java学习之注解

import java.lang.annotation.Annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Field; public class Test { public static void main(String[] args) throws Exception{ Class clazz= Clas

Java 基础之--注解Annotation详解

自定义注解入门: public @interface Annotation01 { //set default value ""; String value() default ""; } 1.保持策略@Retention annotation: 告知编译器如何去运行,default is RetentionPolicy.CLASS (1).RetentionPolicy.CLASS : -->会将注解保存在class 文件中,但运行时候不会被virtual

Java学习笔记--注解

注解的使用与实例:http://www.cnblogs.com/pepcod/archive/2013/02/16/2913474.html 注解的作用及使用方法:http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULeWk1hQKNpGdGKAAoVKqLzLVHjuV0SrbQIsxOijXP5tiy

Java学习系列(二十一)Java面向对象之注解详解

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/45295947 一.前言 Java中的注解Annotation运用到很多方面,比如之前讲的单元测试中的@Test.Spring.SpringMVC还有其他框架等等.Java本身自带的注解也有一些,比如:@Override(子类要重写/覆写父类的对应方法).@Deprecated(表示方法不建议被使用).@SuppressWarnings(抑制警告)等等.当然,我们也可以自定义一些自己需要的

Java中的注解的详解

详解Java中的注解 在Java中,注解(Annotation)引入始于Java5,用来描述Java代码的元信息,通常情况下注解不会直接影响代码的执行,尽管有些注解可以用来做到影响代码执行. 注解可以做什么 Java中的注解通常扮演以下角色: 编译器指令 构建时指令 运行时指令 l Java内置了三种编译器指令,本文后面部分会重点介绍 l Java注解可以应用在构建时,即当你构建你的项目时.构建过程包括生成源码,编译源码,生成xml文件,打包编译的源码和文件到JAR包等.软件的构建通常使用诸如A

Java注解Annotation学习笔记

一.自定义注解 1. 使用关键字 @interface 2. 默认情况下,注解可以修饰 类.方法.接口等. 3. 如下为一个基本的注解例子: //注解中的成员变量非常像定义接口 public @interface MyAnnotation { //不带有默认值 String name(); //带有默认值 int age() default 20; } 4. Reflect中3个常见方法解读 getAnnotion(Class<T> annotationClass) 返回该元素上存在的,指定类