黑马程序员 22 Java基础加强-04-注解篇
2012-09-21 18:44
357 查看
-------android培训、java培训、期待与您交流!
----------
本日志doc文档下载
About 注解
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
看java.lang包,可看到JDK中提供的最基本的annotation
1、注解的应用结构图
Code1
Code2 --注解类
Code3--注解类
Code4--枚举类
----------
本日志doc文档下载
About 注解
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
看java.lang包,可看到JDK中提供的最基本的annotation
1、注解的应用结构图
Code1
@ItcastAnnotation(value = "abc",annotationAttr=@MetaAnnotation("MetaAnnotation")) public class AnnotationTest { @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { System.runFinalizersOnExit(true); if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){ ItcastAnnotation annotation = AnnotationTest.class.getAnnotation(ItcastAnnotation.class); System.out.println(annotation.getClass().getName()); System.out.println(annotation.color());//用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法 System.out.println(annotation.value()); System.out.println(annotation.num().length); System.out.println(annotation.lamp().nextLamp()); System.out.println(annotation.annotationAttr()); } } @Deprecated public static void sayHello(){ System.out.println("HI"); } }
Code2 --注解类
@Retention(RetentionPolicy.RUNTIME) //@Retention元注解.RetetionPolicy.SOURCE、RetetionPolicy.CLASS、RetetionPolicy.RUNTIME;分别对应:java源文件-->class文件-->内存中的字节码。 @Target({ElementType.METHOD,ElementType.TYPE}) //@Target元注解默认值为任何元素,设置Target等于ElementType.METHOD,原来加在类上的注解就报错,改为用数组方式设置{ElementType.METHOD,ElementType.TYPE} public @interface ItcastAnnotation { String color() default "blue"; //为属性指定缺省值 String value();//如果注解中有一个名为value的属性,且只想设置value属性(即其他属性都采用默认值或者你只有一个value属性),那么可以省略value=部分 int [] num () default {11,22,33};//数组类型的属性 EnumTest.TrrificLamp lamp() default EnumTest.TrrificLamp.RED;//枚举类型的属性 MetaAnnotation annotationAttr() default @MetaAnnotation("Meta");//注解类型的属性 }
Code3--注解类
public @interface MetaAnnotation { String value(); }
Code4--枚举类
public class EnumTest { public static void main(String[] args) { WeekDay1 weekDay = WeekDay1.TUE; System.out.println(weekDay.nextDay()); System.out.println(WeekDay1.FRI.getClass().getName()); System.out.println(WeekDay1.class.getName()); System.out.println(WeekDay.SUN); System.out.println(WeekDay.valueOf("SAT")); System.out.println(WeekDay.values().length); System.out.println(WeekDay.class.getName()); System.out.println(TrrificLamp.GREEN.nextLamp().time); System.out.println(TrrificLamp.RED.nextLamp()); } //每个枚举对象都会产生相应的class文件 public enum WeekDay { SUN, MON(1), THU(1), WEN, THI, FRI, SAT; private WeekDay() { System.out.println("First"); } private WeekDay(int day) { System.out.println("Second"); } } // 交通灯枚举实例 public enum TrrificLamp { RED(30) { @Override public TrrificLamp nextLamp() { return GREEN; } }, GREEN(45) { @Override public TrrificLamp nextLamp() { return YELLOW; } }, YELLOW(5) { @Override public TrrificLamp nextLamp() { return RED; } }; public abstract TrrificLamp nextLamp(); private int time; //枚举构造器私有 private TrrificLamp(int time) { this.time = time; } } }
相关文章推荐
- 黑马程序员---Java基础加强---JDK1.5新特性:注解
- 黑马程序员--Java基础加强(4)--- JDK1.5新特性之JavaBean、注解
- 黑马程序员:基础加强(可变参数、增强for、枚举、javabBean、BeanUtils、注解、泛型)
- 黑马程序员—Java基础加强(注解)
- java基础加强_04_注解
- 黑马程序员----java基础加强 注解与泛型
- 【黑马程序员】java基础加强-------注解(annotation)
- 黑马程序员_java基础加强_静态导入_反射_枚举_注解_内省_泛型_代理
- 【黑马程序员】java基础加强_注解
- 黑马程序员-JAVA基础加强-内省与注解
- 黑马程序员_java基础加强学习笔记之注解
- 黑马程序员_java_基础加强_静态导入_反射_枚举_注解_内省_泛型
- 黑马程序员-java基础加强-JDK1.5新特性注解
- 黑马程序员---java基础加强---jdk1.5新特性之注解
- 黑马程序员--Java基础加强--04.代码简化 书写规律III_数组参数【重载】【数组】【可变参数数组】【泛型可变参数数组】【个人总结】
- 黑马程序员_日记04(java基础加强01)
- 黑马程序员-基础加强-反射(2)&内省&注解-No.08
- 黑马程序员--Java基础加强--06.【泛型通配符限定】【个人总结】
- 16--黑马程序员--基础加强之注解
- 黑马程序员基础加强---注解