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程序时保留注释。该注释可以通过反射获得
4.3@Target 4.4@Documented 4.5@Inherited注释