JavaSE-注解-Annotation

1、注解概述

在这里插入图片描述
在这里插入图片描述

2、常见的Annotation示例

在这里插入图片描述

在这里插入图片描述

3、jdk内置的三个基本注解

在这里插入图片描述

package com.annotation.test;

import javax.sound.midi.Soundbank;
import java.util.ArrayList;
import java.util.Date;

/**
 * Description:
 *  1、jdk5.0新增的功能
 *
 *  2、Annotation的使用示例
 *  示例一:生产文档相关的注解
 *
 *  示例二:在编译时进行格式校验检查(JDK内置的是哪个基本注解)
 *    @Override:限定重写父类方法,该注解只能用于方法
 *    @deprecated:用于表示所修饰的元素(类,方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择
 *    @SuppressWarnings:抑制编译器警告
 *
 *  示例三:跟踪代码依赖性,实现替代配置文件功能
 *
 * DATE: 2022/4/4 22:34
 */
public class AnnotationTest {
    public static void main(String[] args) {
        Person p =new Student();
        p.eat();

        Date date = new Date(2020,10,10);
        System.out.println(date);

        @SuppressWarnings("unused")
        int num = 10;
        @SuppressWarnings("unused")
        ArrayList arrayList = new ArrayList();
    }
}
class Person{
    private String useName;
    private String age;

    public Person() {
    }

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

    public void walk(){
        System.out.println("走路");
    }
    public void eat(){
        System.out.println("吃饭");
    }
}

interface info{
    void show();
}

class Student extends Person implements info{
    @Override
    public void walk() {
        System.out.println("张三在走路");
    }

    @Override
    public void eat() {
        System.out.println("张三在吃饭");
    }

    @Override
    public void show() {
        System.out.println("展示详细信息");
    }
}

4、spring框架中关于“事务”的管理

在这里插入图片描述

5、如何自定义注解

在这里插入图片描述

package com.annotation.test;

/**
 *  1、如何自定义注解
 *    ①注解声明为:@interface
 *    ②内部定义成员,通常使用value表示
 *    ③可以指定成员的默认值,使用default
 *    ④如果自定义注解没有成员变量,表明是一个标识作用
 * 		
 * 	 如果注解有成员变量,在使用注解时,需要指明成员的值
 *   自定义注解必须配上注解的信息处理流程(使用反射)才有意义。
 * DATE: 2022/4/5 8:28
 */
@Inherited
@Documented
@Target({TYPE,METHOD,LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

    String value() default "hello";
}

6、JDK元注解的使用

在这里插入图片描述

6.1、@Retention:指定所修饰的Annotation的生命周期

:

  • SOURCE:只在源文件中保留,编译器直接丢掉
  • CLASS(默认行为)
  • RUNTIME只有声明为RUNTIME生命周期的注解,才能通过反射获取。
    在这里插入图片描述

6.2、@Target({TYPE,METHOD})

用于指定被修饰的Annotation能用于修饰哪个位置的程序元素

  • TYPE:用于描述可以修饰接口(包括注解类型)、enum
  • PACKAGE:用于描述可以修饰
  • PARAMETER:用于描述可以修饰参数
  • METHOD:用于描述可以修饰方法
  • LOCAL_VAEIABLE:用于描述可以修饰局部变量
  • CONSTRUCTOR:用于描述构造器
    在这里插入图片描述

6.3、@Documented:所修饰的注解在被javadoc解析时会保留下来

  • 使用javadoc可以生成java的说明文档。而如果在某个注解上使用了该标记,并且某个注解被用在方法、类、构造器上后,使用javadoc命令生成的说明文档是哪个说保留某个注解

1、例如我们在方法中使用了Java.util.Date类的构造器:
在这里插入图片描述
2、该构造器使用了@Deprecated注解修饰。意思是这个构造器过时了
在这里插入图片描述3、而该注解又被@Documented注解所修饰。那么意思是在生成的javadoc说明文档中也会将@Deprecated注解生成在说明文档上
在这里插入图片描述4、javadoc:javaAPI说明文档
在这里插入图片描述

6.4、@Inherited表明被修饰的注解具有继承性

1、如下图所示,我的自定义注解@MyAnnotation上使用了@Inherited注解
在这里插入图片描述2、我在父类Person上使用了@MyAnnotation注解
在这里插入图片描述3、子类Student继承了父类Person,但上边并没有标记@MyAnnotation注解

在这里插入图片描述
4、下面我们通过反射证明Student类上也有@MyAnnotation注解

在这里插入图片描述

7、JDK8中注解的新特性

7.1、可重复注解

7.1.1、jdk8之前定义可重复注解

1、定义

在这里插入图片描述
在这里插入图片描述

2、使用
在这里插入图片描述

7.1.2、jdk8及以后定义可重复注解(个人觉得不太好用)

1、Annotation

  • 在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class;
  • MyAnnotation的Target的Retention与Annotaions相同。
    在这里插入图片描述2、MyAnnotations注解
    在这里插入图片描述
    3、在实体类中使用
    在这里插入图片描述

7.2、类型注解

在这里插入图片描述

7.2.1、@Target({ElementType.TYPE_PARAMETER}):表示被修饰的注解可以写在泛型语句中

在这里插入图片描述

在这里插入图片描述

7.2.2、@Target({TYPE_USE})表示被修饰的注解可以用在任何修饰类型的地方

如下图:@MyAnnotation注解TYPE_USER修饰
在这里插入图片描述则该注解可以用在修饰类型的任何地方。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值