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 修饰的注解,则其子类将自动具有该注解
相关推荐
guestsun几秒前
SpringBoot七大事务失效场景分析
java·spring boot·mybatis
毕设源码-邱学长6 小时前
【开题答辩全过程】以 基于Java的学校住宿管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
rookieﻬ°6 小时前
PHP框架漏洞
开发语言·php
炸膛坦客7 小时前
单片机/C/C++八股:(二十)指针常量和常量指针
c语言·开发语言·c++
智者知已应修善业7 小时前
【proteus中lm339电压滞回比较器达到三角波转换成方波】2023-4-13
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程
兑生7 小时前
【灵神题单·贪心】1481. 不同整数的最少数目 | 频率排序贪心 | Java
java·开发语言
daidaidaiyu7 小时前
一文学习 Spring 声明式事务源码全流程总结
java·spring
551只玄猫7 小时前
新编大学德语1第三版笔记 第5课Essen und Trinken
笔记·学习笔记·德语·外语·德语a1·自学德语·新编大学德语
颜酱8 小时前
DFS 岛屿系列题全解析
javascript·后端·算法
炸膛坦客8 小时前
单片机/C/C++八股:(十九)栈和堆的区别?
c语言·开发语言·c++