注解(Annotation)

注解 Annotation

一、Annotation的使用示例

示例一:生成文档的相关注解

  • @author 标明开发该类模块的作者,多个作者之间使用逗号分割。

  • @version 标明该类模块的版本。

  • @see 参考转向,也就是相关主题。

  • @since 从那个版本开始增加的。

  • @param 对方法中某参数的说明,如果没有参数则不写。

  • @return 对方法返回值的说明,如果方法的返回值类型是void就不能写。

  • @exception 对方法可能抛出的异常进行说明,如果方法没有用throw显示抛出的异常就不能写。

注意点:

  • @param @return 和@exception,这三个标记都是只用于方法的。
  • @param的格式要求:@param形参名 形参类型 形参说明。
  • @return的格式要求:@return返回值类型 返回值说明。
  • @exception的格式要求:@exception异常类型说明。
  • @param和@exception 可以并列多个。

示例二:在编译时仅仅格式检查(JDK内置的三个基本注解)

  • @Override:限定重写父类方法,该注解只能用于方法。
  • @Deprecated:用于表示所修饰的元素(类、方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择。
  • @SuppressWarnings:抑制编译器警告。

举例:

public class AnnotationTest {

    public static void main(String[] args) {
        Person student = new Student();
        student.walk();

        @SuppressWarnings("unused")
        int num=10;
        //num是灰色的,Idea中不会提示,使用@SuppressWarnings编译警告
        //在eclipse中会有警告提示,使用@SuppressWarnings编译警告

        @SuppressWarnings({"unused","rawtypes"})
        ArrayList arrayList = new ArrayList();
    }
}
class Person{
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name=name;
        this.age=age;
    }

    public void walk(){
        System.out.println("人散布");
    }
    public void eat(){
        System.out.println("人吃饭");
    }
}

//接口关键字 interface,可以实现多个接口implements
interface Info{
    void show();
}

class Student extends Person implements Info{
    //在子类中对父类的方法进行重写
    @Override
    public void walk() {
        System.out.println("学生走路");
    }

    @Override
    public void show() {

    }
}
二、如何自定义注解:参照@SuppressWarnings定义
  • 注解声明为**@interface**关键字
  • 内部定义成员,通常使用value表示
  • 可以指定成员的默认值。使用default定义
  • 如果自定义注解没有成员,标明是一个表示作用

如果注解有成员,在使用注解时,需要指明成员的值。

1、注解声明为**@interface**关键字

2、自定义注解自动继承了java.lang.annotation.Annotation接口

3、Annotation的成员变量在Annotation 定义中以无参数方法的形式来声明。其
方法名和返回值定义了该成员的名字和类型。我们称为配置参数。类型只能
是八种基本数据类型、String类型Class 类型enum类 型Annotation类 型
以上所有类型的数组

4、可以在定义Annotation的成员变量时为其指定初始值,指定成员变量的初始
值可使用default关键字

5、如果只有一个参数成员,建议使用参数名为value

6、如果定义的注解含有配置参数,那么使用时必须指定参数值,除非它有默认
值。格式是“参数名=参数值”,如果只有一个参数成员,且名称为value,
可以省略“value=“
7、没有成员定义的Annotation 称为标记;包含成员变量的Annotation 称为元数
据Annotation。

注意:自定义注解必须配上注解的信息处理流程才有意义

三、元注解(4种)

对现有的注解进行修饰的注解

自定义注解必须配上注解的信息处理流程(使用反射)才有意义

自定义注解通过都会指明两个元注解:Retention、Target

  • Retention

    image-20220409094810275

  • Target

    image-20220409095832727

  • Documented和Inherited(出现的频率少)

    image-20220409100631230

四、注解的新特性(JDK 8)

1、可重复注解:

  • 在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class
  • MyAnnotation的Target和MyAnnotations相同

2、类型注解:

  • ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)
  • ElementType.TYPE_USE 表示该注解能写在使用类的任何语句中。
    MyAnnotation的Target和MyAnnotations相同

2、类型注解:

  • ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)
  • ElementType.TYPE_USE 表示该注解能写在使用类的任何语句中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小橙子*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值