首页 > 编程语言 > 详细

JavaseLearn25-注解

时间:2021-07-15 00:56:42      阅读:25      评论:0      收藏:0      [点我收藏+]

JavaseLearn25-注解

1.注解概述

  1. 注解,或者说叫注释类型。(Annotation)

  2. 注解Annotation是一种引用数据类型:

    • 编译后也是生成xxx.class文件
  3. 自定义注释的语法格式:

    • [修饰符列表] @interface 注解类型名{
          
      }
      
    • public @interface MyAnnotation {
      }
      
  4. 注解怎么用,用在哪儿?

    • 注解使用时的语法格式是:@注解类型名。如:@Overwrite

    • 注解可以出现在类上、属性上、方法上、变量上等。

    • 注解还可以出现在注解类型上。

    • package com.tsccg.java;
      
      /**
       * @Author: TSCCG
       * @Date: 2021/07/14 20:03
       */
      @MyAnnotation01
      public class AnnotitationDemo01 {
          @MyAnnotation01
          private String name;
          @MyAnnotation01
          public AnnotitationDemo01(@MyAnnotation01 String name) {
              this.name = name;
          }
          @MyAnnotation01
          public void m1() {
              @MyAnnotation01
              int i = 10;
          }
          @MyAnnotation01
          public static void m2() {
      
          }
      }
      @MyAnnotation01
      interface Anno{
      
      }
      @MyAnnotation01
      enum Season{
          /**
           * 春,夏,秋,冬
           */
          @MyAnnotation01
          SPRING,SUMMER,AUTUMN,WINTER
      }
      
      /**
       * 自定义注解
       */
      @MyAnnotation01
      @interface MyAnnotation01 {
      }
      /**
       * 另一个自定义注解
       */
      @MyAnnotation01
      @interface AnotherAnnotation{
          
      }
      

2.JDK自带的注解

java.lang包下的注解类型

  1. Override(掌握)
    • 表示一个方法声明打算重写父类中的另一个方法声明。
  2. Deprecated(掌握)
    • 标示所注解的程序元素已过时。
  3. SuppressWarnings(知道即可)
    • 指示应该在注释元素,以及包含在该注释元素中的所有程序元素中,取消显示指示的编译器警告。

3.Override注解

  1. 只能注解方法。
  2. 标识性注解,给编译器做参考用。
  3. 编译器看到方法上有这个注解的时候,编译器会自动检查该方法是否重写了父类的方法。
    • 如果没有重写,则报错。
  4. 只在编译阶段起作用,与运行期无关。
public class AnnotationDemo02 {
    @Override
    public String toString(){
        return null;
    }
}

4.元注解

4.1什么是元注解?

我们先想一下,为什么Override注解只能使用在方法上呢?

我们可以查看一下Override源码:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

可见,有另一个注解@Target用来注解Override,作用是让Override只能用于方法上。

这种用于注解注解类型的注解,我们称之为元注解。

4.2常见的元注解

  • Target
  • Retention

4.3关于Target注解

  1. 这是一个元注解,用于标注”注解类型”的“注解”。
  2. Target注解用于限定其所注解的“注解类型”可以出现在哪些位置上。
    • @Target(ElementType.METHOD):表示被注解的“注解类型”只能出现在方法上。

4.4关于Retention注解

  1. 这是一个元注解,用于标注”注解类型”的“注解”。
  2. 用于限定被其所注解的“注解类型”最终保存的位置。
    • @Retention(RetentionPolicy.SOURCE):表示该注解最终被保留在java源文件里。
    • @Retention(RetentionPolicy.CLASS):表示该注解最终被保留在class文件里。
    • @Retention(RetentionPolicy.RUNTIME):表示该注解最终被保留在class文件里,并且可以被反射机制所读取。

5.Deprecated注解

Deprecated的作用:

  • Deprecated用于标示一个程序元素已过时。
  •  主要向其他程序员传达一个信息,告知已过时,有更好的解决方案。
    

技术分享图片

6.注解中定义属性

6.1使用含有属性的注解

定义如下注解:

注解中有三个属性,其中一个定义了默认值。

package com.tsccg.java.annotation;

/**
 * @Author: TSCCG
 * @Date: 2021/07/14 20:13
 */
public @interface MyAnnotation {
    //看似方法,实则为注解属性
    String name();
    int age();
    //定义默认值
    String address() default "中国";
}

在另一个类中使用该注解:

如果直接在方法上方用:@MyAnnotation 会报错。

需要填写注解属性:@MyAnnotation(name = "张三",age = 20)

address属性因为已设默认值,不写也没关系。

public class AnnotationDemo04 {
    /*
    报错,需要填写注解属性
    @MyAnnotation
    public void m1() {

    }*/
	//正确使用方式
    //@MyAnnotation(属性名1 = 属性值1,属性名2 = 属性值2)
    @MyAnnotation(name = "张三",age = 20)
    public void m1() {

    }
}

6.2当属性名为value时可省略

当属性名不是value时,使用时必须写上该属性名。

当一个注解中属性名为value,并且有且仅有一个属性,使用时可以不写属性名。(源码中有很多这样的注解)

当一个注解中有多个属性时,即使有属性名为value,使用时也不可以省略该属性名。

package com.tsccg.java.annotation;

/**
 * @Author: TSCCG
 * @Date: 2021/07/14 22:11
 */
public class AnnotationDemo04 {
    //当属性名不是value时,使用时必须写上该属性名
    @MyAnnotation1(name = "张三")
    public void m1() {

    }
    //当一个注解中属性名为value,并且有且仅有一个属性,使用时可以不写属性名(源码中有很多这样的注解)
    @MyAnnotation2("啦啦啦")
    public void m2() {

    }
    //当一个注解中有多个属性时,即使有属性名为value,使用时也不可以省略该属性名
    @MyAnnotation3(value = "啦啦啦",age = 20)
    public void m3() {

    }
}
@interface MyAnnotation1 {
    String name();
}
@interface MyAnnotation2 {
    String value();
}
@interface MyAnnotation3 {
    String value();
    int age();
}

JavaseLearn25-注解

原文:https://www.cnblogs.com/TSCCG/p/15013350.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!