怀旧网,博客详情:Java 注解讲解

1、java枚举类详解

2、java String 类和类方法详解

3、StringBuffer 详解

4、Java Math 类详解

5、java random详解

6、java Date类使用讲解

7、java 集合类详解

8、java算法二分查找

9、SpringBoot 在初始化加载无法使用@Value的时候读取配置文件教程

10、springboot 项目配置本地jar包导入

11、单个java文件运行需要带上jar包的用法

12、spring boot 项目配置https服务

13、Java异常详解

14、Java Collection的使用

15、Java List 集合

16、Java ArrayList 介绍

17、Java LinkedList 讲解

18、Java Set 集合介绍

19、Java HashSet 介绍

20、Java TreeSet 介绍

21、Java Map 介绍以及子类介绍

22、Java 多线程使用介绍

23、Java 注解讲解

24、Java 反射讲解

25、Java 反射讲解

26、HashMap 源码讲解

27、面向对象初级教学

28、Java整合JWT使用

原创

Java 注解讲解

什么是注解

image-20240320093413327

常见注解:

  1. 重写注解
@Override
public String toString() {
    return super.toString();
}
  1. 函数式接口注解
@FunctionalInterface
public interface Runnable {
    public abstract void run();
}
  1. 废弃方法注解
@Deprecated
public final void stop() {}

注解的使用:

image-20240320094301275

当使用了Override注解后,就必须是重写父类的方法,否者就报错。

image-20240320094409536

当使用了 Deprecated 注解,就会将该方法标志位一条删除线(表示不推荐使用了,但是你强行使用也不会报错)

image-20240320094543434

没加注解前

image-20240320094557502

加了注解后,自动提示的警告就会消失(不建议使用)

元注解

image-20240320094902702

Target 注解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    ElementType[] value(); // 参数就是下面的枚举数据
}

public enum ElementType {
    TYPE,
    FIELD,
    METHOD,
    PARAMETER,
    CONSTRUCTOR,
    LOCAL_VARIABLE,
    ANNOTATION_TYPE,
    PACKAGE,
    TYPE_PARAMETER,
    TYPE_USE
}

作用:表示一个注解可以使用的返回(作用域)

METHOD 就说明智能在一个方法上使用

测试:

image-20240320095429456

注解在方法上就可以,测试在类上

image-20240320095451160

爆红了,说明不可以写在类上---添加作用域

image-20240320095552698

加上TYPE属性,就没有报错了

Retention 注解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention { // 作用是,注解在哪些时间段可以生效
    RetentionPolicy value();
}

public enum RetentionPolicy { // 参数对应的枚举数据
    SOURCE, 
    CLASS,
    RUNTIME // 使用最多
}

作用域比较: RUNTIME>CLASS>SOURCE

@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME )
@interface MyAnnotation{
}

Documented 注解

表示是否将我们的注解生成在javadoc中

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
} // 没有参数,直接使用即可

Inherited 注解

子类可以继承父类的注解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {
} // 没有参数

自定义注解

image-20240320100336075

定义格式

上面可以加元注解(可多选)
@interface 注解名{
    // 中间写参数
}

自定义使用

@Target(value = {ElementType.METHOD, ElementType.TYPE})
@interface MyAnnotation{
}

添加参数

参数定义格式:

参数类型 参数名称();

使用:

image-20240320100815236

没写参数直接报错

image-20240320100839428

这样就不报错了

参数加默认值

String name() default ""; // 定义格式 后面加上default 后面根上默认值

image-20240320101025109

没参数也不报错,因为有了默认值

默认参数名称

String value(); // 当参数名称为value时,在使用时可以不写参数名称

image-20240320101144339

多参数定义

@Target(value = {ElementType.METHOD, ElementType.TYPE})
@interface MyAnnotation{
    String value();
    int age();
    String[] test() default {};
}

使用测试:

@MyAnnotation(value = "怀旧", age = 18)
public class Test2{
    public static void main(String[] args) {
    }
}

@Target(value = {ElementType.METHOD, ElementType.TYPE})
@interface MyAnnotation{
    String value();
    int age();
    String[] test() default {};
}

这边写法没报错,原因value的参数可以不写名称,然后给age进行了赋值,最后的test有默认参数,可以不用赋值。

正常情况,参数不会这么多,最多用1~2个

  • 平台作者:怀旧(联系作者)
  • QQ:444915368
  • 邮箱:444915368@qq.com
  • 电话:17623747368
  • 评论

    登录后才可以进行评论哦!

    回到顶部 留言