---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
jdk1.5新特性:枚举,注解(反射不是 )
注解:三个@override :覆盖
@Deprecate :提示过时
@SuppressWarnings("deprecation") :编译时不再提示
例子:
package cn.itcast.day2;
public class AnnotationTest {
/**
* @param args
*/
@SuppressWarnings("deprecation") //编译时不再提示!一个注解就是一个类
public static void main(String[] args) {
// TODO Auto-generated method stub
System.runFinalizersOnExit(true); //删除线代码这个方法已经过时了
}
@Deprecated
public static void sayHello(){
System.out.println("hi,传智播客");
}
}
小结:注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以在包,类,字段,方法,方法参数以及局部变量上。
看java.lang包,可看到JDK中提供的最基本的annotation
数组类型的属性
int[] arrayAttr() default{1,2,3};
@MyAnnotation(arrayAttr={2,3,4})
如果数组属性中只有一个元素,这时候属性值部分可以省略大括号。
枚举类型的属性
EnumTest.TrafficLamp lamp();
@MyAnnotation(lamp = EnumTest.TrafficLamp.GREEN);
注解类型的属性:
MetaAnnotation annotationAttr() default @MetaAnnotation("XXXXX");
@MyAnnotation(annotationAttr = @MetaAnnotation("yyy"))
可以认为上面这个@MyAnnotation是MyAnnotation类的一个实例对象,同样的道理,可以认为上面这个@MetaAnnotation是MetaAnnotation类的一个实例对象,调用代码如下:
MetaAnnotation ma = myAnnotation.annotationAttr();
System.out.println(ma.value());
例子:
package cn.itcast.day2;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)//保留到运行时间
//@Retention
//注解的注解:元注解;
//class文件中的东西不是字节码,只有加载到内存中后最终才是字节码~
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
String color() default "blue";
String value();
int[] arrayAttr() default {3,4,5};
MetaAnnotation annotationAttr() default @MetaAnnotation("ltm");
}
package cn.itcast.day2;
public @interface MetaAnnotation {
String value();
}
package cn.itcast.day2;
import java.lang.annotation.Annotation;
@ItcastAnnotation(annotationAttr=@MetaAnnotation("app"),color="red",value = "abc", arrayAttr = {1,2,3})//特殊的属性value,如果是只有value属性值那么可以不写它,直接写值。
public class AnnotationTest {
/**
* @param args
*/
@SuppressWarnings("deprecation") //编译时不再提示!一个注解就是一个类
@ItcastAnnotation("xyz")
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
System.runFinalizersOnExit(true); //删除线代码这个方法已经过时了
if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){
ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
System.out.println(annotation);
System.out.println(annotation.color());
System.out.println(annotation.value());
System.out.println(annotation.arrayAttr().length);
System.out.println(annotation.annotationAttr().value() );
}
}
@Deprecated
public static void sayHello(){
System.out.println("hi,传智播客");
}
}
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net