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 修饰的注解,则其子类将自动具有该注解
相关推荐
JustHappy1 小时前
古法编程秘籍(七):互联网到底是什么?把两台电脑怎么说话搞懂就够了
前端·后端·网络协议
yaoxin5211231 小时前
434. Java 日期时间 API - Period 基于日期的时间段
java·开发语言·python
Hommy882 小时前
【剪映小助手】添加图片接口(Add Images)
后端·github·剪映小助手·视频剪辑自动化
凡人叶枫2 小时前
Effective C++ 条款30:透彻了解 inlining 的里里外外
linux·开发语言·c++·嵌入式开发·effective c++
GetcharZp2 小时前
别再盲目用 OpenCV 读图了,这才是 CV 预处理的终极杀手锏!
后端
学逆向的2 小时前
C++纯虚函数
开发语言·c++·网络安全
何极光2 小时前
IDEA集成Maven
java·maven·intellij-idea
程序员二叉3 小时前
【JUC】ThreadLocal底层原理|内存泄漏|弱引用|跨线程传递方案
java·开发语言·面试·职场和发展·juc
程序员二叉3 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
老马识途2.03 小时前
在AI的帮助下理解spring的启动过程
java·前端·spring