/* 注解(Annotation) 使用注解时要在前面加上@符号,并把该注解当成一个修饰符使用,用于修饰它支持的程序元素 1.注解也称为元数据,用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息 2.和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息 3.在JavaSE中,注解使用比较简单,但在JavaEE中注解占据了重要角色 例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等 三个基本的Annotation 1.@Override 限定某个方法,是重写父类方法,该注解只用于方法 2.@Deprecated 用于表示某个程序元素(类、方法等)已过时 3.@SuppressWarnings 抑制编译器警告 */
/* @Override源码 @Target(ElementType.METHOD) //@Target是修饰注解的注解,也称元注解,ElementType.METHOD说明只修饰方法 @Retention(RetentionPolicy.SOURCE) public @interface Override {} //@interface不是接口interface,是注解类,是jdk5.0之后加入的 */ public class Override_ { } class Father{ public void face(){ System.out.println("face,face"); } } class Son extends Father{ @Override //@Override 表示子类重写了父类的方法 public void face(){ System.out.println("重写face"); } }
/* @Deprecated 修饰某个元素,表示元素已过时,即不推荐使用,但仍可以使用 作用是可以做到新旧版本的兼容和过度 @Documented源码 @Retention(RetentionPolicy.RUNTIME) @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE}) public @interface Deprecated {} //可以修饰方法、类、字段、包、参数等 */ public class Deprecated_ { public static void main(String[] args) { A a = new A(); a.hi(); System.out.println(a.n1); } } @Deprecated class A{ @Deprecated public int n1 = 11; @Deprecated public void hi(){ } }
/* @SuppressWarnings{""} 在{""}中,写入希望不显示的警告 可以使用的有:all,boxing,cast,dep-ann,unchecked..... all:抑制所有 unchecked:忽略没有检查的警告 unused:忽略没有使用某个变量的警告错误 作用范围与放置位置有关 如把@SuppressWarnings放在main方法,抑制警告的范围就为main方法 @SuppressWarnings源码 @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.SOURCE) public @interface SuppressWarnings { String[] value();} //该注解类中有String[] value(),设置一个数组... */ import java.util.ArrayList; import java.util.List; public class SuppressWarnings_ { @SuppressWarnings({"unchecked"}) //"all"清除所有警告 public static void main(String[] args) { List list = new ArrayList(); list.add("tom"); list.add("jack"); list.add("smith");//当我们不希望看到警告时,可以使用@SuppressWarnings int i; System.out.println(list.get(1)); } }
//实际应用中,使用较少,了解即可 元注解 元注解用于修饰其他注解 种类 1.@Retention 指定注解作用范围,三种SOURCE,CLASS,RUNTIME 2.@Target 指定注解可以在哪些地方使用 3.@Documented 指定该注解是否会在javadoc体现 4.@Inherited 子类会继承父类注解 @Retention 只能用于修饰一个注解定义,用于指定该注解可以保留多长时间,包含一个RetentionPolicy类型的成员变量, 使用时必须为该value成员变量指定值 三种值 RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注释 (默认值)RetentionPolicy.CLASS:编译器把注释记录在class文件中,当运行Java时,JVM不会保留注解 RetentionPolicy.RUNTIME:编译器把注释记录在class文件中,当运行Java时,JVM会保留注释,程序通过反射获取该注释 @Target 用于修饰注解的定义,指定被修饰的注解能用于修饰哪些程序元素,包含一个为value的成员变量 @Documented 用于指定被改元注解修饰的注解类将被javadoc工具提取成文档,即在生成文档时,可以看到该注解 定义为Documented的注解必须设置Retention值为RUNTIME @Inherited 被它修饰的注解将具有继承性,如果某个类使用了被@Inherited修饰的注解,则其子类将自动具有该注解 */ public class Annotation_ { }