1、了解注解及java提供的几个基本注解
注解:相当于一种标记,加了注解就等于打上了某中标记,没加,则等于没有某种标记,以后, javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你 有何种标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量 上。
jdk提供的注解
Deprecated
Override
SuppressWarnings
·@Deprecated: --指示应该在注释元素(以及包含在该注释元素中的所有程序元素)已过时。
·@Override: 表示一个方法声明打算重写超类中的另一个方法声明。
·@SuppressWarnings:指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。
2、注解的定义与反射调用
注解就相当于你的一个源程序中要调用一个类,要在某个源程序中应用某个注解,要先准备好这个注解类。就像你要调用一个类一样,首先要编写好这个类,然后才能去调用这个类。
·自定义注解及其应用
步骤:
1、定义一个注解
2、把注解加在某个类上
3、对注解类进行相应的操作
示例:
1、定义一个注解:public @interface MyAnnotation {}
package com.zouc.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME) //用注解方式说注解保存在运行期间
public @interface MyAnnotation {
}
2、把它加在某个类上:@MyAnnotation public class AnnotationTest{}
3、用反射进行测试AnnotationTest的定义上是否有@MyAnnotation
package com.zouc.annotation;
@MyAnnotation
public class AnnotationTest {
public static void main(String[] args) {
if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)) {
MyAnnotation annotation = (MyAnnotation) AnnotationTest.class.getAnnotation(MyAnnotation.class);
System.out.println(annotation);
}
}
}
·注解的生命周期
使用@Retention元注解可以声明注解的生命周期,其三种取值:RetentionPolicy.SOURCE,RetentionPolicy.CLASS,RetentionPolicy.RUNTIME;分别对应:java源文件,class文件,内存中的字节码
·注解的作用域
使用@Target指定注解的作用范围(用于说明注解在什么地方使用:如方法上、类上、字段上、包上等等),它是一个枚举类型的,举例说明:
@Target({ElementType.METHOD,ElementType.TYPE})分别对应说这个注解作用在方法上和类上。
3、为注解增加属性
注解中的属性类型可以是各种基本类型、String、Class、数组、枚举、注解
示例:
package com.zouc.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String color() default "blue"; //为属性指定缺省值
String value();
int[] arrayAttr() default {1,2,3}; //数组
MetaAnnotation annotationAttr() default @MetaAnnotation(value="red"); //注解
}
package com.zouc.annotation;
@MyAnnotation(color="blue",value="red",arrayAttr= {4,5},annotationAttr=@MetaAnnotation("zc"))
public class AnnotationTest {
public static void main(String[] args) {
if (AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)) {
MyAnnotation annotation = (MyAnnotation)
AnnotationTest.class.getAnnotation(MyAnnotation.class);
System.out.println(annotation.color() + annotation.value());
System.out.println(annotation.arrayAttr().length);
System.out.println(annotation.annotationAttr().value());
}
}
}