Day2_2--java中注解的使用

一、什么是java Annotation
Java 从1.5开始提供了 Annotation (注释,标注),它用来修饰应用程序的元素(类,方法,属性,参数,本地变量,包、元数据),编译器将其与元数据一同存储在 class 文件中,运行期间通过 Java 的反射来处理对其修饰元素的访问。Annotation 仅仅用来修饰元素,而不能影响代码的执行。只有通过其配套的框架或工具才能对其信息进行访问和处理。

解释 1:注解是一种能被添加到 java 源代码中的元数据,方法、类、参数和包都可以用注解来修饰是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记的处理。
解释 2:Java 注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配关类都包含在 java.lang.annotation 包中。
二、注解分类:
1.自定义注解。
2.JDK 内置注解。
3.第三方框架提供的注解。
例如:@Override 重写
@SuppressWarnings(value = “unchecked”) 压制编辑器警告
【1.三种内建注解】

  1. @Override——当我们想要复写父类中的方法时,我们需要使用该注解去告知编译器我们想要复写这个方法。的方法移除或者发生更改时编译器将提示错误信息。
  2. @Deprecated——当我们希望编译器知道某一方法不建议使用时,我们应该使用这个注解。Java 在 javadoc 解,我们应该提供为什么该方法不推荐使用以及替代的方法。
  3. @SuppressWarnings——这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。它的(译者注:在源文件中有效)并且被编译器丢弃。
    【2.java 元注解和自定义注解的区别】
    Java 的自定义注解是一种元数据,可以应用于类、方法、字段等程序元素上,以提供额外的信息或指示。
    自定义注解包括注解声明、元注解、运行时处理器三个部分。注解声明指定了注解的名称、作用域注解则用来对注解进行修饰;运行时处理器则负责在程序运行过程中处理注解,并根据注解提供的信息执行相应解在编写框架、插件等开发时非常常见,可以为代码提供更多的灵活性和可扩展性。
    【3.自定义注解实现】
    实现步骤
    1.定义注解类,指定注解的元素和属性。
    2.在需要使用注解的地方,使用@注解名称来标注目标元素,可以是类、方法、字段等程序元素。
    3.可以使用反射机制获取注解,并对注解进行处理。

public @interface 注解名称{
属性列表;
}
使用位置:
实际开发中,注解常常出现在类、方法、成员变量、形参位置。当然还有其他位置。
级别:注解和类、接口、枚举是同一级别的。
Java 自定义注解可以通过注解定义类来实现。
具体步骤如下:
1.使用@interface 关键字定义自定义注解。
2.在注解定义中添加属性,以传递数据。
3.为自定义注解添加元注解,如@Retention、@Target 等,以限制注解的使用范围。
4.在需要使用自定义注解的类、方法、字段上添加注解。
5.使用反射机制获取注解信息,实现注解的处理逻辑。
用@interface 关键字定义注解,注解的成员参数只能是基本类型、String、Class、Enum、Annotation 或者它们使用元注解@Target、@Retention、@Documented、@Inherited、@Repeatable 来修饰自定义注解,指定注解的作期、文档生成、继承性和重复性等属性。
使用反射 API 来获取注解信息,并根据注解的逻辑进行相应的处理。

【注意事项】
@interface 是用来修饰 Annotation (注解)的,它不是 interface。
这个关键字声明隐含了一个信息:它是继承了java.lang.annotation.Annotation 接口,而不是声明了一个 interface。
注解的本质是接口 , 接口中可以定义 常量 和 方法 ;
在注解中定义 接口方法 , 就是 注解的属性 ;
为注解添加属性 : 接口中的方法都是抽象方法 , 其中 public abstract 可以省略 ;
public @interface Annotation {
public abstract String path();
}
注解属性使用格式 :
@注解名称(属性名称 = 属性值)
注解属性使用 : 在相关的代码上使用
@Annotation(path = “”)
Student(String name, int age){
}
【案例代码】
自定义注解代码

package k2_zhujie;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author nanzhi
 * @date 2024/7/16 15:40
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ZhuJie {
    String value();
}

自定义注解代码测试demo

package k2_zhujie;

import org.junit.Test;

import java.lang.reflect.Method;

/**
 * @author nanzhi
 * @date 2024/7/16 15:39
 * 源码-->字节码-->加载jvm
 */
public class demo {
    @Deprecated//官方注解:不赞成使用
    @SuppressWarnings("all")//官方注解:抑制警告
    @Test//第三方框架提供的注解(有返回值的方法无法测试)
    @ZhuJie("HELLO JAVA!")//自定义注解
    public void method() {
        System.out.println("111 = " + 111);
    }

    public static void main(String[] args) throws NoSuchMethodException {
        //运行时通过虚拟机中的字节码类对象获取源码中的方法
        Method method = demo.class.getDeclaredMethod("method");
        ZhuJie annotation = method.getAnnotation(ZhuJie.class);
        String value = annotation.value();
        System.out.println("value = " + value);
    }
}

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT ·南栀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值