注解Annotation 注解是jdk1.5的新特性
是附加在代码中的一些信息,可以认为是代码的一个标记,主要完成说明、配置的功能。我们平时用的注释是给人看的,而注解是给机器看的。
为了编程更简洁,使用注解,可以省去很多配置文件或者是代码;例如,对某个类的某种标记,如果没有注解,意味着可能要通过方法或者是配置文件来完成。
下面是三种内置标准
@Override 确保覆盖超类方法
@Deprecated 此方法过期,警告此用途
@SuppressWarnings 关闭不当警告
1. SupressWarnings:关闭特定的警告信息。例如你在使用泛型的时候未指定类型。
代码:
package cn.itcast;
public class AnnotationTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.runFinalizersOnExit(true);
}
}
2. Deprecated:对不应再使用的方法进行注解。
代码:
@Deprecated
public static void sayHello () {
System.out.println("Hi");
}
3. Override:可以保证编译时Override函数的声明正确性。只能用于方法(不能用于类,包括声明或者其他结构)
代码:
public class AnnotationTest {
@Override
public String toString(){
return "This isOverride";
}
public static void main(String[] args) {
AnnotationTest test=new AnnotationTest();
System.out.println(test);
}
}
总结:注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。看java.lang包,可看到JDK中提供的最基本的annotation。
注解的应用和结构:
注解就相当于一个你的源程序中要调用的一个类,要在源程序中应用某个注解,得先准备好了这个注解类。就像你要调用某个类,得先有开发好这个类。
一个注解的结构三为三个类:
1 注解类
格式:
@interface A{
}
2 应用了”注解类“的类
格式:
@A
Class B{
}
3 对应用了”注解类“的类进行反射。
格式:
Class C{
B.class.isAnnotionPresent(A.class); //判断A这个注解是否存在
A a = B.class.getAnnotion(A.class); //得到A这个注解
}
元注解:就是注解上的注解
元数据:就是数据上的数据等等
注解的高级属性:
package cn.itcast;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import cn.itcast.EnumTest.TrafficLamp;
@Retention(RetentionPolicy.RUNTIME) //元注解:只保留到运行时期
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
String color() default "blue"; //default是设置默认值
String value();
int [] arrayAttr() default {3,4,4};
TrafficLamp lamp() default EnumTest.Trafficlamp.RED;
MetaAnnotation annotationAttr() default @MetaAnnotation("lmp");
}
package cn.itcast;
@ItcastAnnotation(color = "red",value = "abc",lamp = EnumTest.TrafficLamp.YELLOW,arrayAttr = {1,2,3},annotationAttr = @MetaAnnotation("flx"))
public class AnnotationTest {
@SuppressWarnings("deprecation") //过时了
@ItcastAnnotation("xyz")
public static void main(String[] args) {
System.runFinalizersOnExit(true);
if (AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)) {
ItcastAnnotation annotation = (ItcastAnnotation) AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
System.out.println(annotation.color());
System.out.println(annotation.value());
System.out.println(annotation.arrayAttr().length);
System.out.println(annotation.lamp().nextLamp().name());//显示交通灯为绿灯
//这里就是打印出这个注解里面的属性值
System.out.println(annotation.annotationAttr().value());//这里就打印flx
}
}
@Deprecated
public static void sayHello () {
System.out.println("Hi");
}
}
一个枚举类型
EnumTest 类:
public class EnumTest {
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}
public static Object Trafficlamp;
}
------- android培训、 java培训、期待与您交流! ----------