注解的使用

news/2024/11/28 6:36:41/

目录

注解的理解

基本的 Annotation介绍

@Override 注解的案例

Override 使用说明

@Deprecated的说明

@SuppressWarnings 注解的案例

元注解 

元注解的基本介绍

@Retention 注解

@Target

@Documented

@Inherited注解


注解的理解

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

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

3)在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替java EE旧版中所遗留的繁冗代码和XML配置等。

基本的 Annotation介绍

使用 Annotation 时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素

三个基本的Annotation:

1)@Override:限定某个方法,是重写父类方法,该注解只能用于方法

2).@Deprecated:用于表示某个程序元素(类,方法等)已过时

3)@SuppressWarnings:抑制编译器警告

@Override 注解的案例

@Override:限定某个方法,是重写父类方法,该注解只能用于方法

补充说明:@interface的说明 @interface不是interface,是注解类 是jdk5.0之后加入的

代码演示:

package idea.chapter11.annotation_;/*** 演示Override注解的使用*/
public class Override_ {public static void main(String[] args) {}
}class Father {//父类public void fly() {int i = 0;System.out.println("Father fly...");}public void say() {}}class Son extends Father {//子类//解读//1. @Override 注解放在fly方法上,表示子类的fly方法时重写了父类的fly//2. 这里如果没有写 @Override 还是重写了父类fly//3. 如果你写了@Override注解,编译器就会去检查该方法是否真的重写了父类的方法,如果的确重写了,则编译通过,如果没有构成重写,则编译错误//4. 看看 @Override的定义//   解读: 如果发现 @interface 表示一个 注解类 @interface表示的不是接口,表示的是一个注解类/*@Target(ElementType.METHOD)@Retention(RetentionPolicy.SOURCE)public @interface Override {}*/@Override   //说明public void fly() {System.out.println("fly");}@Override//写了Override注释后,就会去自动的检测有没有真的重写了父类的方法如果没有没有重写还是会报错的public void say() {}
}

Override 使用说明

1.@Override 表示指定重写父类的方法(从编译层面验证),如果父类没有fly方法,则会报错

2.如果不写@Override 注解,而父类仍有public void fly0t),仍然构成重写

3.@Override只能修饰方法,不能修饰其它类,包,属性等等

4.查看@Override注解源码为@Target(ElementType.METHOD),说明只能修饰方法

5.@Target是修饰注解的注解,称为元注解

@Deprecated的说明

1.用于表示某个程序元素(类,方法等)已过时

2.可以修饰方法,类,字段,包,参数 等等

3.@Target(value=(CONSTRUCTOR, FIELD, LOCAL VARIABLE, METHOD,

PACKAGE, PARAMETER, TYPE)Tatget表示,该注释可以放在哪里

4.@Deprecated的作用可以做到新旧版本的兼容和过渡

代码演示:

package idea.chapter11.annotation_;/*** 演示Deprecated注解的使用*/
public class Deprecated_ {public static void main(String[] args) {//使用了@Deprecated注解后,我们在去创建对象的时候,就会一个横线,表示的已经过时了,但是并不代表不可以使用A a = new A();//因为属性和方法都被@Deprecated注解修饰了a.hi();//使用属性也是System.out.println(a.n1);//使用方法也是//@Deprecated可以放的位置//@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})}
}//1. @Deprecated 修饰某个元素, 表示该元素已经过时
//2. 即不在推荐使用,但是仍然可以使用
//3. 查看 @Deprecated 注解类的源码
//4. 可以修饰方法,类,字段, 包, 参数  等等
//5. @Deprecated 可以做版本升级过渡使用
/*
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}*/
@Deprecated
class A {@Deprecatedpublic int n1 = 10;@Deprecatedpublic void hi() {}
}

@SuppressWarnings 注解的案例

说明各种值

1.unchecked 是忽略没有检查的警告

2.Talvtsese暴忽戰沒有指安天里的帶管(作書日沒有指定泛型的警告错误)

3.unused是忽略没有使用某个变量的警告错误

4.@SuppressWarnings可以修饰的程序元素为,查看@Target

5.生成@SupperssWarnings时,不用背,直接点击左侧的黄色提示,就可以选择(注意可以指定生成的位置

代码演示:

package idea.chapter11.annotation_;import java.util.ArrayList;
import java.util.List;/*** 演示@SuppressWarnings注解的使用*/
@SuppressWarnings({"rawtypes", "unchecked", "unused"})
public class SuppressWarnings_ {//1. 当我们不希望看到这些警告的时候,可以使用 SuppressWarnings注解来抑制警告信息//2. 在{""} 中,可以写入你希望抑制(不显示)警告信息//3. 可以指定的警告类型有//        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,抑制与未用的程式码及停用的程式码相关的警告//4. 关于SuppressWarnings 作用范围是和你放置的位置相关//   比如 @SuppressWarnings放置在 main方法,那么抑制警告的范围就是 main//   通常我们可以放置具体的语句, 方法, 类.//5.  看看 @SuppressWarnings 源码//(1) 放置的位置就是 TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE//(2) 该注解类有数组 String[] values() 设置一个数组比如 {"rawtypes", "unchecked", "unused"}/*@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})@Retention(RetentionPolicy.SOURCE)public @interface SuppressWarnings {//这里是一个 String类的数组,这也就是我们,为什么在传参的时候,传入的是一个数组的形式String[] value();}*/public static void main(String[] args) {List list = new ArrayList();list.add("jack");list.add("tom");list.add("mary");int i;System.out.println(list.get(1));}public void f1() {
//        @SuppressWarnings({"rawtypes"})List list = new ArrayList();list.add("jack");list.add("tom");list.add("mary");
//        @SuppressWarnings({"unused"})int i;System.out.println(list.get(1));}
}

元注解 

元注解的基本介绍

(就是修饰注解的注解)

JDK的元Annotation 用于修饰其他 Annotation

元注解:本身作用不大,了解即可

1.Retention//指定注解的作用范围,三种 SOURCE,CLASS,RUNTIME

2.Target//指定注解可以在哪些地方使用

3.Documented //指定该注解是否会在javadoc体现

4.Inherited //子类会继承父类注解

@Retention 注解

说明 只能用于修饰一个Annotation定义,用于指定该Annotation可以保留多长时间,@Rentention包含一个RetentionPolicy类型的成员变量,使用@Rentention时必须为该value 成员变量指定值:

@Retention的三种值

1.RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注(就是在源码的层面)

2.RetentionPolicy.CLASS:编译器将把注解记录在 class 文件中.当运行Java程序时,JVM不会保留注解。这是默认值(在使用Javac编译后的层面)

3.RetentionPolicy.RUNTIME:编译器将把注解记录在class 文件中.当运行Java程序时,JVM 会保留注解.程序可以通过反射获取该注解(在JVM加载类运行时的层面)

说明:Override的作用域在 SOURCE,当编译器编译时生效,不会写入到.class**文件**,也不会再runtime(运行时)生效

@Target

基本说明

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

@Target也包含一个名为value的成员变量。

本质上是一个数组说明了可以在那些位置生效

({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})

@Documented

基本说明 @Documented:用于指定被该元Annotation修饰的 Annotation类将被javadoc工具提取成文档,即在生成文档时,可以看到该注释。 说明:定义为Documented的注解必须设置Retention值为RUNTIME。

@Inherited注解

被它修饰的 Annotation 将具有继承性.如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解 说明:实际应用中,使用较少,了解即可。 元注解:本身作用不大,讲这个原因希望同学们,看源码时,可以知道他是干什么.


http://www.ppmy.cn/news/40244.html

相关文章

创建型模式-建造者模式(Builder)-解决复杂对象创建问题

创建型模式-建造者模式Builder-解决复杂对象创建问题 创建型模式建造者模式(Builder)解决复杂对象创建问题描述适用环境优点:缺点:违反原则代码实现背景描述创建型模式 建造者模式(Builder) 解决复杂对象创建问题 描述 通过将一个复杂对象的构建过程分解为多个简单对…

VMware安装 kali-linux出现的报错:未能启动虚拟机

VMware安装 kali-linux出现的报错:未能启动虚拟机 右键-兼容性,改成vm16. 发生错误,导致虚拟 CPU 进入关闭状态 找到.vmx文件,搜索并修改成:virtualHW.version "16"

Linux常用命令问答

文章目录本文根据《Linux就该这么学》进行总结 在RHEL 7系统及众多的Linux系统中,最常使用的Shell终端是什么? 答:Bash(Bourne-Again SHell)解释器。执行Linux系统命令时,添加参数的目的是什么?…

pip、conda查看镜像源及更换镜像源

1.查看已经安装过的镜像源:conda config --show 查看配置项channels channels: https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/cpu/https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/co…

【StarRocks】数据结构和修改表语句大全

StarRocks的改表语句 文章目录StarRocks的改表语句1 数据类型2 修改表结构3 示例1 数据类型 2 修改表结构 StarRocks 支持多种 DDL 操作。 可以通过 ALTER TABLE 命令可以修改表的 Schema,包括增加列,删除列,修改列类型(暂不支持…

银行数字化转型导师坚鹏:金融数字化转型助力乡村振兴及案例

金融数字化转型助力乡村振兴及案例课程背景: 很多银行存在以下问题:不清楚如何借助数字化转型助力乡村振兴?不知道普惠金融模式和产品如何有效创新?不知道数字化转型助力乡村振兴的成功案例? 课程特色&#xff1…

过来人看PMP证书:究竟含金量有多高?

取证一年,结合亲身经历告诉你含金量在哪里。主要在两方面说下我的理解:一是证书对自己的镀金效果,二是管理技能提升带来的隐形效益。 1、被权威机构认证和全球认可 PMP认证在全球范围内获得了200多个国家和地区的广泛认可,是项目…

X264简介-Android上的使用(三)

X264简介-Android上的使用(三) 一、X264 .a文件的log2f错误: libx264.a(encoder-8.o):encoder.c:function validate_parameters: error: undefined reference to log2flibx264.a(encoder-8.o):encoder.c:function x264_8_encoder_reconfig:…