--------------- android培训、java培训、期待与您交流!---------------
注解:
注解相当于是一个标记,注解本身也是个特殊的类,当我们在用注解的时候,就是在为这个类创建了一个实例,注解的工作就是向编译器(或是IDE工具)传递信息,通知编译器应该做的工作。
下面是一个测试:首先建立一个注解。
package net.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface DemoAnnotation {
Stringcolor() default "blue";
Stringvalue();
//int[]arrayAttr();
}
一:在定义的注解上面再使用的注解叫做元注解,它和“元数据”的意思是类似的。
1、这里有三个中的枚举取值为:1、SOURCE 2、CLASS 3、RUNTIME
2、编译器,通过类加载器,加载源文件编译成.class文件,然后将其放入内存变成字节码,在这三个阶段使用这个注解的类在编译或是运行的时候可能会导致注解被去掉,所以通过这三个枚举值来指定此注解的作用保留在哪一个阶段。(这里的验证可以看测试类的结果)
3、@Target({ElementType.METHOD,ElementType.TYPE})用来指定使用注解到哪个地方(例如只能在方法上使用此注解)。当数组中只有一个元素时候可以省略大括号。
下面是测试类:
package net.annotation;
@DemoAnnotation(value ="liujianghau", arrayAttr = { 1, 2, 3 })
public class ApplicationTest {
/**
* @param args
*/
publicstatic void main(String[] args) {
if(ApplicationTest.class.isAnnotationPresent(DemoAnnotation.class)) {
//注解也是个特殊的类,这里通过反射得到应用在此类中的注解。
DemoAnnotationannotation = (DemoAnnotation) ApplicationTest.class
.getAnnotation(DemoAnnotation.class);
System.out.println(annotation);
System.out.println(annotation.color());//要得到值的时候就要像调用方法那样用
System.out.println(annotation.arrayAttr().length);
}else{
System.out.println(“没有存在”);
}
}
}
这里将注解类的属性全部注释掉,然后注释掉测试类的后面两个打印语句,把注解的属性值设置也删掉。然后打印结果:
没有存在
(这就可以验证了上面说的)
二:注解真正强大之处在于在注解类(暂且叫做注解类)中的类似于方法的属性。
1、 当注解类定义了属性时,在使用注解的时候就要指定属性值。
当注解类中只有以value命名的属性时候,就可以在使用注解时候不用写(value=XXXX ),另外但使用default 知道属性值的时候也可以这么用。--------------- android培训、java培训、期待与您交流!---------------