注解(Java)
发布时间:2022-11-02 12:55:39 所属栏目:PHP教程 来源:
导读: 1.注解的理解
注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。
和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌
注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。
和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌
|
1.注解的理解 注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。 在 JavaSE 中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在 JavaEE 中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替 java EE 旧版中所遗留的繁冗代码和 XML 配置等。 2.基本的 Annotation 介绍 使用 Annotation 时要在其前面增加 @ 符号, 并把该 Annotation 当成一个修饰符使用。用于修饰它支持的程序元素。 三个基本的 Annotation: @Override: 限定某个方法,是重写父类方法, 该注解只能用于方法;@Deprecated: 用于表示某个程序元素(类, 方法等)已过时;@SuppressWarnings: 抑制编译器警告. 3.@Override 注解的案例 @Override是对重写方法的校验 补充说明:@interface的说明 @interface不是interface,是注解类是jdk5.0之后加入的 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 表示一个 注解类 /* @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { } */ @Override //说明 public void fly() { System.out.println("Son fly...."); } @Override public void say() {} } Override使用说明 @Override表示指定重写父类的方法(从编译层面验证),如果父类没有fly方法php注释,则会报错如果不写@Override注解,而父类仍有public void fly(),仍然构成重写@Override只能修饰方法,不能修饰其它类,包,属性等等查看@Override注解源码为@Target(ElementType.METHOD),说明只能修饰方法@Target是修饰注解的注解,称为元注解,记住这个概念. 4.@Deprecated 注解的案例 @Deprecated: 用于表示某个程序元素(类, 方法等)已过时. @Deprecated 可以做版本升级过渡使用。 public class Deprecated_ { public static void main(String[] args) { A a = new A(); a.hi(); 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 class A { @Deprecated public int n1 = 10; @Deprecated public void hi(){ } } @Deprecated的说明: 用于表示某个程序元素(类,方法等)已过时;可以修饰方法,类,字段,包,参数等等;@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD,PACKAGE, PARAMETER, TYPE));@Deprecated的作用可以做到新旧版本的兼容和过渡。 5.@SuppressWarnings 注解的案例 @SuppressWarnings: 抑制编译器警告 可以指定的警告类型有 // 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,抑制与未用的程式码及停用的程式码相关的警告 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[] 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)); } } 该注解类有数组 String[] values() 设置一个数组比如 {"rawtypes", "unchecked", "unused"} @Deprecated的说明 用于表示某个程序元素(类,方法等)已过时可以修饰方法,类,字段,包,参数等等@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE,METHOD.PACKAGE, PARAMETER,TYPE))@Deprecated的作用可以做到新旧版本的兼容和过渡 6.JDK 的元 Annotation(元注解, 了解) 6.1 元注解的基本介绍 JDK 的元 Annotation 用于修饰其他 Annotation。 元注解: 本身作用不大,讲这个原因希望同学们,看源码时,可以知道他是干什么。 6.2 元注解的种类 (使用不多,了解, 不用深入研究) Retention //指定注解的作用范围,三种 SOURCE,CLASS,RUNTIME Target // 指定注解可以在哪些地方使用 Documented //指定该注解是否会在 javadoc 体现 Inherited //子类会继承父类注解 6.3 @Retention 注解 说明: 只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间, @Rentention 包含一个RetentionPolicy类型的成员变量, 使用 @Rentention 时必须为该 value 成员变量指定值: @Retention 的三种值: RetentionPolicy.SOURCE: 编译器使用后,直接丢弃这种策略的注释 RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。这是默认值 RetentionPolicy.RUNTIME:编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM会保留注解. 程序可以通过反射获取该注解 6.4 @Target 用于修饰Annotation定义,用于指定被修饰的Annotation能用于修饰哪些程序元素.@Target 也包含一个名为value的成员变量。 6.7 @Documented @Documented:用于指定被该元 Annotation修饰的Annotation类将被javadoc工具提取成文档,即在生成文档时,可以看到该注解。 说明:定义为Documented的注解必须设置Retention值为RUNTIME。 6.8@Inherited 注解 被它修饰的Annotation将具有继承性.如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解 说明:实际应用中,使用较少,了解即可。 元注解:本身作用不大,讲这个原因希望同学们,看源码时,可以知道他是干什么. (编辑:PHP编程网 - 钦州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330484号