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 修饰的注解,则其子类将自动具有该注解
相关推荐
copyer_xyf16 分钟前
Python 模块与包的导入导出
前端·后端·python
小bo波26 分钟前
枚举实战
java·设计模式·枚举·后端开发·代码重构
ice81303318140 分钟前
【Python】Matplotlib折线图绘制
开发语言·python·matplotlib
夜微凉441 分钟前
三、Spring
java·后端·spring
三品吉他手会点灯41 分钟前
C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符
c语言·开发语言·笔记·算法
copyer_xyf41 分钟前
Python venv 虚拟环境
前端·后端·python
kkeeper~43 分钟前
0基础C语言积跬步之动态内存管理
c语言·开发语言
橘右今1 小时前
2026 Java后端高频面试宝典
java·开发语言·面试
微小冷1 小时前
Julia卫星工具箱SatelliteToolbox简介
开发语言·航天·坐标转换·julia·卫星工具箱
2601_colin1 小时前
Codex插件全流程实战指南
开发语言·经验分享·笔记·微信开放平台