注解(注解java)

  本篇文章为你整理了注解(注解java)的详细内容,包含有注解的实现原理 注解java 注解伤寒论 注解符号怎么添加 注解,希望能帮助你了解 注解。

  注解(Annotation)也被称为元数据(Metadata),用于修饰包、类、方法、属性、构造器、局部变量等数据信息。

  和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。

  在Java SE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在Java EE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替Java EE旧版中所遗留的繁冗代码和XML配置等。

  
基本介绍:

  使用Annotation 时要在其前面增加 @ 符号,并把 Annotation 当成一个修饰符使用。用于修饰它支持阿程序元素。

  三个基本的 Annotation:

  @Override:限定某个方法,是重写父类方法,该注解只能用于方法。

  @Deprecated:用于表示某个程序元素(类,方法等)已过时。

  @SuppressWarnings:抑制编译器警告。

  
一、 @Override 注解

  @Override:限定某个方法,是重写父类方法,该注解只能用于方法。

  

class Father {

 

   public void fly() {

  class Son extends Father {

   //1. @Override 注解放在fly方法上,表示子类的fly方法重写父类的fly

   //2. 如果这里没有写 @Override 还是会重写父类的fly

   //3. 如果你写了 @Override注解,编译器就会去检查该方法是否真的重写了父类的方法

   //如果的确重写了,编译通过,如果没有构成重写则编译错误

   //4. 看看@Override的源码

   //如果发现 @interface 表示 一个注解类

   @Target(ElementType.METHOD)

   @Retention(RetentionPolicy.SOURCE)

   public @interface Override {

   @Override

   public void fly() {

   System.out.println("Son fly....");

  

 

  
补充说明:@interface 的说明,@interface 不是接口,是注解类 是jdk1.5 之后加入的。

  
@Override 表示是指定重写父类的方法(从编译层面验证),如果父类没有fly方法,或者没有重写方法,则会报错;

  
查看 @Override 注解源码@Target(ElementType.METHOD),说明只能修饰方法;

  

@Target(ElementType.METHOD)

 

   @Retention(RetentionPolicy.SOURCE)

   public @interface Override {

  

 

  
@Deprecated:用于表示某个程序元素(类,方法等)已过时。

  

public class Deprecated_ {

 

   public static void main(String[] args) {

   A a = new A();

  //1. @Deprecated 修饰某个元素,表示该元素已经过时了

  //2. 即不再推荐使用,但是仍然可以使用

  //3. 查看源码

   @Documented

   @Retention(RetentionPolicy.RUNTIME)

   @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})

   public @interface Deprecated {

  //4. 可以修饰方法,类,字段,包,参数等等

  //5. @Deprecated 可以做版本升级过渡使用

  @Deprecated

  class A{

   public int n1;

   public void hi(){}

  

 

  @Deprecate 使用说明

  用于修饰某个程序元素,表示该元素已经过时了;

  可以修饰方法,类,字段,包,参数等等;

  @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE});

  @Deprecated 的作用可以做到新旧版本的兼容和过渡;

  
//1. 当我们不希望看到这些警告的时候,可以使用 @SuppressWarnings 注解来抑制警告信息

   //2. 在{""}中,可以写入你希望抑制(不显示警告信息)

   //3. 关于SuppressWarnings 作用范围是和你放置的位置相关

   // 比如@SuppressWarnings放置在 main方法,那么一致警告的范围就是 main

   // 通常我们可以放置具体大的语句,方法和类

   //4. 看看 @SuppressWarnings 的源码

   @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})

   @Retention(RetentionPolicy.SOURCE)

   public @interface SuppressWarnings {

   String[] value();

   @SuppressWarnings({"rawtypes","unchecked","unused",})

   public static void main(String[] args) {

   List list = new ArrayList();

   list.add("jack");

   list.add("tom");

   list.add("mary");

   int i;

   System.out.println(list.get(1));

  

 

 

  
@SuppressWarnings 可以修饰的程序元素为 TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,查看@Target。

  生成@SuppressWarnings 时,不用背,直接idea中点击左侧的黄色提示,就可以选择(注意可以选择指定生成的位置)。

  
@Retention:指定注解的作用范围,三种作用范围 SOURCE,CLASS,RUNTIME

  @Target:指定注解可以在哪些地方使用

  @Documented:指定该注解是否会在 javadoc 体现

  @Inherited:子类会继承父类注解

  
说明:只能用于修饰一个 Annotation 定义,用于指定该 Annotation 可以保留多长时间,@Retention 包含一个 RetentionPolicy 类型的成员变量,使用 @Retention 时必须为该 value 成员变量指定值。

  @Retention的三种值:

  RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注解

  RetentionPolicy.CLASS:编译器将把注解记录在class文件中,当运行 Java程序时,JVM 不会保留注解。这是默认值。

  RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行 Java程序时,JVM 会保留注解,程序可以通过反射获取该注解。

  
 

  

//以下为 @Retention 注解源码

 

  @Documented

  @Retention(RetentionPolicy.RUNTIME)

  @Target(ElementType.ANNOTATION_TYPE)

  public @interface Retention {

   * Returns the retention policy.

   * @return the retention policy

   RetentionPolicy value();

  

 

  ② @Target 注解

  基本说明:用于修饰 Annotation 定义,用于指定被修饰的 Annotation 能用于修饰哪些元素,@Target 也包含一个名为 value 的成员变量

  

//以下为 @Target 注解源码

 

  @Documented

  @Retention(RetentionPolicy.RUNTIME)

  @Target(ElementType.ANNOTATION_TYPE)

  public @interface Target {

   * Returns an array of the kinds of elements an annotation type

   * can be applied to.

   * @return an array of the kinds of elements an annotation type

   * can be applied to

   ElementType[] value();

  

 

  

//修饰的元素的类型

 

  public enum ElementType {

   /** Class, interface (including annotation type), or enum declaration */

   TYPE,

   /** Field declaration (includes enum constants) */

   FIELD,

   /** Method declaration */

   METHOD,

   /** Formal parameter declaration */

   PARAMETER,

   /** Constructor declaration */

   CONSTRUCTOR,

   /** Local variable declaration */

   LOCAL_VARIABLE,

   /** Annotation type declaration */

   ANNOTATION_TYPE,

   /** Package declaration */

   PACKAGE,

   * Type parameter declaration

   * @since 1.8

   TYPE_PARAMETER,

   * Use of a type

   * @since 1.8

   TYPE_USE

  

 

  ③ @Documented 注解

  基本说明:用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档,即在生成文档时,可以看到该注解。

  说明:定义为 @Documented 的注解必须设置 Retention 值为 RUNTIME。

  

//以下为 @Documented 注解源码

 

  @Documented

  @Retention(RetentionPolicy.RUNTIME)

  @Target(ElementType.ANNOTATION_TYPE)

  public @interface Documented {

  

 

  ④ @Inherited 注解

  基本说明:被他修饰的Annotation 将具有继承性,如果某个类使用了 @Inherited 修饰的 Annotation,则子类将自动具有该注解。

  以上就是注解(注解java)的详细内容,想要了解更多 注解的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: