首页 > 编程语言 >Java基础复习——注解

Java基础复习——注解

时间:2023-07-01 10:12:10浏览次数:46  
标签:Java 复习 抑制 RetentionPolicy interface 注解 警告 Retention

注解(Annotation)

什么是注解?

  • 插入到源码中用于某种工具处理的标签。

  • 注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。

  • 在Java中,注解是当作一个修饰符来使用的,它被置于备注解项之前,中间没有分号

  • 每一个注解的名称前面都加了@符号,类似Javadoc的注解,Javadoc注解出现在 /***...*/ 定界符的内部,而注解是代码的一部分。

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

定义注解

modifiers @interface AnnotationName {
    element declaration1
    element declaration2
    . . .
}

注解@interface不是接口是注解类
每个元素声明具有如下形式

type elementName();
// 或者
type elementName() default value;

举例:

// 例如,下面的注解具有两个元素

public @interface BugReport {
    String assignedTo() default "[none]"
    int severity = 0
}

每个注解具有下面的格式

@AnnotationName(elementName1=value1, elementName1 = value2, . . .)
// 举例
@BugReport(assignedTo="Harry", severity=10)

有两个特殊的快捷方式用来简化注解

  1. 没有指定元素(没有元素或者默认值),称为 标记注解

    @BugReport // <=> @Bugreport(assignedTo="[none]", severity=0)
    
  2. 单值注解,如果一个元素具有特殊名字 value,并且没有指定其他元素,可以忽略元素名和等号

    // ActionListenerFor 注解定义如下
    public @interface ActonListenerFor {
        String value();
    }
    // 可以书写为
    @ActionListenerFor("yellowButton")
    // 而不是
    @ActionListenerFor(value="yellowButton")
    

三个基本的Annotation

  1. @Override:限定某个方法,是重写父类方法,该注解只能用于方法
  2. @Deprecated:表示某个程序元素(类,方法等)已经过时
  3. @SuppressWarnings:抑制编译器警告

@Override

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
  • @Override 表示会重写父类的方法(编译层面验证)如果父类没有这个方法则会报错
  • 只能修饰方法,不能修饰其他类、包、属性等(后面介绍)

@Deprecated

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
  • 修饰某个元素,表示该元素已经过时
  • 不推荐使用,但仍可以使用,用于版本过渡等

@SuppressWarnings

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
        String[] value();
}
  • 当我们不希望看到某些警告的时候,可以使用该注解来抑制警告信息

  • 在{""}中可以写入希望抑制的警告信息

  • 可以指定警告信息

    all:抑制所有警告
    boxing:抑制与封装/拆装作业相关的警告
    cast:抑制与强制转型相关的警告
    dep-ann:抑制与淘汰注释相关的警告
    deprecation:抑制与淘汰相关的警告
    fallthrough:抑制与switch陈述式中遗漏break相关的警告
    finally:抑制与未传回finally区块相关的警告
    hiding:抑制与隐藏变数的区域变数相关的警告
    incomplete-switch:抑制与switch陈述式(enum、case)中遗漏项目相关的警告
    javadoc:抑制与javadoc相关的警告
    nls:抑制与非nls字符串文字相关的警告
    null:抑制与空值分析相关的警告
    rawtypes:抑制与使用raw类型相关的警告
    resource:抑制与使用Closeable类型的资源相关的警告
    restriction:抑制与使用不建议或禁止参照相关的警告
    serial:抑制与可序列化的类别遗漏serialVersionUID栏位相关的警告
    static-access:抑制与静态存取不正确相关的警告
    static-method:抑制与可能宣告为static的方法相关的警告
    super :抑制与置换方法相关但不含super呼叫的警告
    synthetic-access:抑制与内部类别的存取未最佳化相关的警告
    sync-override:抑制因为置换同步方法而遗漏同步化的警告
    unchecked:抑制与未检查的作业相关的警告
    unqualified-field-access:抑制与栏位存取不合格相关的警告
    unused:抑制与未用的程序码及停用的程序码相关的警告
    

元注解

  • 注解的注解(用来修饰其他的注解)

四种

@Retention

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    RetentionPolicy value();
}
  • 只能修饰一个注解定义,指定该注解保留多长时间

  • 包含一个RetentionPolicy类型的成员变量,使用该注解时必须为该 value 成员变量指定值

    @Retention 的三种值

    1. @RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注解
    2. @RetentionPolicy.CLASS:编译器把注解记录在class文件中,当运行java程序时,JVM不会保留注解,这是默认值
    3. @RetentionPolicy.RUNTIME:编译器把注解记录在class文件中,当运行java程序时,JVM会保留注解,程序可以通过反射获取该注解

@Target

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    ElementType[] value();
}

public enum ElementType {
    TYPE,
    FIELD,
    METHOD,  
    PARAMETER,
    CONSTRUCTOR,
    LOCAL_VARIABLE,
    ANNOTATION_TYPE,
    PACKAGE,
    TYPE_PARAMETER,
    TYPE_USE
}

修饰Annotation定义,用于指定被修饰的注解能用于修饰哪些程序元素

@Document

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}

用于指定被该元注解修饰的注解类将被javadoc工具提取成文档,即在生产文档时,可以看到该注解

说明,定义为@Document的注解必须设置为Retention值为RUNTIME

@Inherited

@Documented
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
public @interface Interned {
}

被它修饰的注解将具有继承性,如果某个类使用了被@Inherited修饰的注释,则其子类将自动具有该注解。

标签:Java,复习,抑制,RetentionPolicy,interface,注解,警告,Retention
From: https://www.cnblogs.com/ai135/p/17518893.html

相关文章

  • Java基础语法
    Java语法快速入门1.1程序的入口#java程序入口为类中的static的viod的main函数,参数固定为字符串数组publicstaticvoidmain(String[]args){System.out.println("helloworld");}1.2文件名#一个文件中最多只能有一个public类且【文件名】必须和【public类名......
  • nested exception is java.sql.SQLException: connection disabled
    标题:解决SpringBoot连接数据库出现"connectiondisabled"异常在使用SpringBoot连接数据库时,有时候会遇到"nestedexceptionisjava.sql.SQLException:connectiondisabled"异常。这个异常通常是由以下原因引起的:数据库连接配置错误:检查数据库连接的URL、用户名和密码是否正确配......
  • Java 基础复习——StringBuffer 和 StringBuilder
    StringBuffer和StringBuilderStringBuffer类简介java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删很多方法和String相同,但StringBuffer是可变长度的StringBuffer是一个容器注意:StringBuffer的直接父类是AbstractStringBuilder有属......
  • Java的MVC设计模式,带你深刻理解MVC
    什么是MVC?就是ModelViewControl,模型视图控制器。MVC流程图解1.MVC概念:MVC本来是存在于Desktop程序中的,M(Model)是指数据模型,V(View)是指用户界面,C(Control)是控制器。使用MVC的最直接目的就是将M和V实现代码分离,C则是确保M和V的同步,一旦M改变,V应该同步更新。2.MVC工作方......
  • Java中的内部类,代码块
    前言学习Java过程中,对内部类和代码块部分知识比较模糊,容易忘掉。今天再学的时候有一些其他的收获,整理记录一下。1.代码块代码块的作用可以为初始化变量。都在在构造器方法之前执行,分为静态代码块和匿名代码块。静态代码块是在类加载时执行,因此只执行一次。匿名代码块在new实......
  • JAVA石头迷阵游戏
    大家帮我看看这个代码有没有问题,为什么将z设为作弊器但是在IDE中运行出来没有用//测试类importjavax.swing.*;publicclassTest{publicstaticvoidmain(String[]args){newMainFrame();}}importjavax.swing.*;importjava.awt.event.ActionEvent;......
  • java相关
    1、java环境建立2、windows系统下maven环境设置windows系统下下载二进制包apache-maven-3.6.0-bin.zip,然后解压。 第二种方法:使用绝对路径添加maven环境变量,直接在path里面的最前面添加c:\maven\bin;4、windows安装tomcat  设置环境变量也用绝对路径下载https://tomcat.apache.......
  • Java 期中考试及pta4、5总结
    菜单计价1~3(1)前言:期中考试的题目比较简单但是具有典型意义,ptA的题和之前的大差不差,所以会省略一些总体来说这几次作业还是对Java的学习有较大的帮助的,需要认真对待(2)设计与分析:一测验1-圆类设计下面是题目要求:7-1测验1-圆类设计分数 12......
  • centos7安装java
    1.tar-zxvfjdk-8u11-linux-x64.tar.gz 2.编辑环境变量vim/etc/profile 3.source/etc/profile4.java-version ......
  • [转]前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 &quot
    1、问题:前台数据,JSON字符串带有引号“”,数据被传递到后台,引号被转义为&quot,后台无法解析。前台数据如下:正常后台数据如下:大部分正常,只有JSON字符串中的“”被转义为&quot2、解决:方法一:使用apache的lang包里的方法StringappJson=StringEscapeUtils.un......