首页 > 图灵资讯 > 技术篇>正文

注解的理解

2023-05-15 09:35:25

1.理解注释

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

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

3)在JavaSE中,注释的使用目的相对简单,如标记过时功能、忽略警告等。注释在JavaEE中占有更重要的角度

颜色,如用于配置应用程序的任何部分,而不是javaEE旧版本中留下的繁琐代码和XML配置。

2.基本Annotation介绍432

使用Anotation时,应在其前面添加@符号,并将Anotation作为修改符。用于修改其支持的程序元素

三个基本的Annotation:

1)@Override:限制某种方法是重写父亲的方法,只能用于该方法

2)@Deprecated:表示程序元素(类、方法等)已过时

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

3.Annnotation基本应用案例3.1@Override

➢Override使用说明书

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

2.如果不写@overide注释,而父亲仍然有publicvoidfly00,仍然构成重写

3.@Overrride只能修改方法,不能修改其他类别,包、属性等

4.查看@Overrride注释源代码@Target(ElementType.METHOD).说明只能修改方法

5.@Target是修饰注解的注解,称为元注解。记住这个概念

注解的理解_父类

➢补充说明:@interface的说明

@interface不是interface,而是jdk5.0后加入的注解类

com中的代码.stulzl.annotation_override.Annotation_Override
package com.stulzl.annotation_override;///注释Overrided 限制某种方法,就是重写父类方法, 该注释只能用于方法  432public class Annotation_Override {    public static void main(String[] args) {    }}class Father{//父类    public void fly(){        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 表示注解/*    @Target(ElementType.METHOD)    @Retention(RetentionPolicy.SOURCE)    public @interface Override {    }*/    @Override //说明 @Override 注解放在 fly 方法上,表示子类的 fly 重写父类的方法 fly    public void fly() {        System.out.println("Son fly...");    }    @Override    public void say() {}}
3.2@Deprecated4333

@Deprecated:表示程序元素(类、方法等)已过时

@Deprecated说明

1.表示程序元素(类、方法等)已过时

2.可修改方法、类别、字段、包、参数等

3.@Target(value={CONSTRUCTOR,FIELD,LOCALVARIABLE,METHOD,PACKAGE,PARAMETER,TYPE})

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

com中的代码.stulzl.annotation_Deprecated.Annotation_Deprecated
package com.stulzl.annotation_Deprecated;//@Deprecated修改某个元素, 这意味着元素已经过时  433public class Annotation_Deprecated {    public static void main(String[] args) {        A a = new A();//横线代表过时        System.out.println(a.n1);    }}///解读//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///修改某个元素已经过时,这里修改a类已经过时了。class A {    @Deprecated    public int n1 = 10;    @Deprecated    public void hi(){    }}
3.3@Suppresswarnings434

@SuppressWarnings:抑制编译器警告

●@Suppreswarnings注解案例

➢说明各种值

1)unchecked忽略了未经检查的警告

2)rawtypes忽略了没有指定泛型的警告(传参时没有指定泛型的警告错误)

3)unused忽略了未使用变量的警告错误

4)@Supresswarnings可以修改的程序元素是查看@Target

5)生成@Suppersswarnings时,直接点击左侧的黄色提示,无需背部

可选(注意可指定的生成位置)

com中的代码.stulzl.annotation_SuppressWarnings.Annotation_SuppressWarnings
package com.stulzl.annotation_SuppressWarnings;//@Suppreswarnings抑制编译器警告  434import java.util.ArrayList;import java.util.List;///解读//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"}//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[] value();}*/@SuppressWarnings({"rawtypes", "unchecked", "unused"})public class Annotation_SuppressWarnings {    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(){        List list = new ArrayList();        list.add("jack");        list.add("tom");        list.add("mary");        int i;        System.out.println(list.get(1));    }}
4.元注释(知道)4354.1元注释基本介绍

用于修改其他Annotation的JDK元Anotation

元注:本身作用不大。当你想看源码的时候,你可以知道他在做什么。.

11.15.2元注释类型(使用不多,不需要深入研究)

1)Retention//指定注释范围,三种SOURCE,CLASS,RUNTIME

2)Target///指定注释可以在哪里使用

3)Documented///指定注释是否会反映在javadoc中

4)Inherited////子类会继承父类注释

4.2@Retention注释

说明

只能用来修改Annotation定义,指定Anotation能保留多长时间。@rentention包含RetentionPolicy类型的成员变量。使用@rentention时,必须为value成员变量指定值:

@Retention的三个值

1)RetentionPolicy.SOURCE:使用编译器后,直接丢弃该策略的注释

2)RetentionPolicy.CLASS:编译器将在class文件中记录注释。JVM在操作Java程序时不会保留注释。这是默认值

3)RetentionPolicy.RUNTIME:编译器将注释记录在class文件中。JVM在操作Java程序时保留注释。该注释可以通过反射获得

注解的理解_注解_02

4.3@Target

注解的理解_编译器_03

注解的理解_编译器_04

4.4@Documented

注解的理解_ide_05

注解的理解_注解_06

4.5@Inherited注释

注解的理解_ide_07

上一篇 异常
下一篇 扩散模型过拟合?!谷歌、DeepMind等发文:扩散模型直接从训练集里「抄」

文章素材均来源于网络,如有侵权,请联系管理员删除。