7.Java 注解和元注解(三种注解、四种元注解)

一、注解概述

  • 注解也被称为元数据,用于修饰包、类、方法等数据信息

  • 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息

  • 在 JavaSE 中,注解使用的目的比较简单,例如标记过时的功能,忽略警告等

  • JavaEE 中注解会充当更加重要的角色

二、三种注解

1、@Override
(1)基本介绍
  • 指定重写父类方法(从编译层面验证),如果父类没有被重写的该方法,则报错

  • 不用 @Override 修饰,仍然能构成重写

  • @Override 只能修饰方法

(2)演示
  • Father 类
java 复制代码
package com.my.entity;

public class Father {
    public void sayHi() {
        System.out.println("Hello");
    }
}
  • Son 类
java 复制代码
package com.my.entity;

public class Person {

    @Deprecated
    public void sayHi() {
        System.out.println("Hello");
    }
}
  • OverrideAnnotationTest 类
java 复制代码
package com.my.test;

import com.my.entity.Son;

public class OverrideAnnotationTest {
    public static void main(String[] args) {
        Son son = new Son();
        son.sayHi();
    }
}
(3)源码
java 复制代码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
2、@Deprecated
(1)基本介绍
  • 用于表示某个元素已过时,可以修饰类,构造器,方法等

  • 被修饰的元素仍然可以被使用,可以做版本升级过渡

(2)演示
  • Person 类
java 复制代码
package com.my.entity;

public class Person {

    @Deprecated
    public void sayHi() {
        System.out.println("Hello");
    }
}
  • DeprecatedAnnotationTest 类
java 复制代码
package com.my.test;

import com.my.entity.Person;

public class DeprecatedAnnotationTest {
    public static void main(String[] args) {
        Person person = new Person();
        person.sayHi();
    }
}
(3)源码
java 复制代码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
3、@SuppressWarnings
(1)基本介绍
  • 用于抑制编译器警告,作用范围取决于注解位置
抑制类型 说明
all 所有警告
unchecked 没有检查的警告
rawtypes 没有指定泛型的警告
unused 没有使用某个变量的警告
(2)演示
  • SuppressWarningsTest 类
java 复制代码
package com.my.test;

public class SuppressWarningsTest {
    
    @SuppressWarnings({"unused"})
    public static void main(String[] args) {
        int i;
        System.out.println("Hello World");
    }
}
(3)源码
java 复制代码
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    String[] value();
}

三、元注解概述

  • 用于修饰其他注解,学习元注解的作用更多的是为了更好的理解源码

四、四种元注解

1、@Retention
  • 用于修饰一个注解可以保留的情况
保留情况 说明
RetentionPolicy.SOURCE 编译器使用后,直接丢弃注解
RetentionPolicy.CLASS 编译器将注解记录在 class 文件中 当运行 Java 程序时,JVM 不会保留注解(默认情况)
RetentionPolicy.RUNTIME 编译器将注解记录在 class 文件中 当运行 Java 程序时,JVM 会保留注解,程序可通过反射获取该注解
2、@Target
  • 用于指定被修饰的注解能用于修饰哪些元素
3、@Documented
  • 用于指定被修饰的注解将被 javadoc 命令提取成文档
4、@Inherited
  • 被修饰的注解将具有继承性,如果某个类使用了被 @Inherited 修饰的注解,则其子类将自动具有该注解
相关推荐
Chen—LSN10 分钟前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#
纪念 22915 分钟前
C++类和对象(最终篇)
开发语言·c++
a努力。22 分钟前
LangChain Agent消息链路全解析
java·前端·javascript
行百里er24 分钟前
Redis 持久化——RDB 快照 vs AOF 日志
redis·后端
SL_staff29 分钟前
物模型是设备的数字身份证:属性、事件、服务如何决定IoT系统扩展性
java·物联网·全栈
程序员yu31 分钟前
会编网络:别被入门教程骗了,Python实用能力不在语法本身
开发语言·python·学习·算法
Lintongzg35 分钟前
千卡训练的隐形账单:通信不是瓶颈
笔记·学习·性能优化·llm
资深技术分享员37 分钟前
Geejing WebBuilder 日志、在线用户、系统监控,出问题时的三个第一现场
java·运维·数据库
卓怡学长40 分钟前
w202springboot基于B_S架构的图书信息管理系统
java·spring boot·spring·intellij-idea
Bruce_Liuxiaowei1 小时前
Python 字典默认值完全指南:从 KeyError 到 defaultdict
开发语言·数据结构·python·字典