编译器处理注解有三种策略:
1)将注解保留在编译后的类文件中,并在第一次加载类时读取它
2)将注解保留在编译后的类文件中,但是在运行时忽略它
3)按照规定使用注解,但是并不将它保留到编译后的类文件中
运行结果:
Custractor
Medivh
Medivh
Shanghai
2014-4-21 15:27:08
import java.util.ArrayList; import java.util.Date; import java.util.List; public class AnnotationTest { private String name; AnnotationTest(String name) { this.name = name; System.out.println("Custractor"); } @Override//重写父类或接口的方法 public String toString() { return this.hashCode()+""; } @SuppressWarnings("deprecation")//不建议被使用的方法 public String getTime() { return new Date().toLocaleString(); } @SuppressWarnings("unchecked")//不检查某个字段的警告信息 public String getArray() { @SuppressWarnings("rawtypes")//不检测泛型警告 List list = new ArrayList(); list.set(0, "List 0"); return list.get(0).toString(); } @MyOverride("Medivh")//等同于@MyOverride public String toName() { return "Medivh"; } public String getAddress() { return "Shanghai"; } @Another(value = "Hello") public static void main(String[] args) throws Exception { AnnotationTest test = new AnnotationTest("Medivh"); System.out.println(test.name.toString()); System.out.println(test.toName()); System.out.println(test.getAddress()); System.out.println(test.getTime()); } } @interface MyOverride//自定义注解,含默认参数 { String value() default "Medivh"; } @interface Another//自定义注解,需要自定义参数 { String value(); }
运行结果:
Custractor
Medivh
Medivh
Shanghai
2014-4-21 15:27:08