------- android培训、java培训、期待与您交流! ----------
注解:
一个注解是一个类。
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,Java编译器,开发工具和其他程序可以用反射来了解你有没有加标记,然后去干相应的事。标记可以加在包、类、字段、方法、方法的参数、局部变量上。
在注解类上加的注解叫元注解:
@Retention(RetentionPolicy.RUNTIME)//标识注解存在于哪个阶段
注解的存在有3个阶段,默认为class阶段:
用@Retention元注解中的3种值来表示
Java源文件:RetetionPolicy.SOURCE
class文件:RetetionPolicy.CLASS
内存中的字节码:RetetionPolicy.RUNTIME
@Target({ElementType.METHOD,ElementType.TYPE})//表示该注解可以存在于哪些元素上。
ElementType.TYPE表示可以存在于类上,而不是.class。
为注解添加属性:
在类中写: 类型 属性名(); 例如:String name();
给属性添加默认值:类型 属性名() default 默认值;
例如:String name() default “zhangsan”;
在注解中有一个特殊的属性名为:value
数组类型属性:String[] arr; 如果在给数组赋值时数组中只有一个元素就可以省略大括号。
属性的类型可以有基本数据类型,Class、枚举、注解、还可以是前面这些数据类型的数组。
使用注解:
@注解名(属性=值);例如:@ItcastAnnotation(name=”lisi”,value=”val”)
在属性名为value单独写的时候可以不加前面的value=,例如:@ItcastAnnotation(”val”); 只有属性名为value才有这种写法。
在类中判断该类是否用了某个注解:该类的字节码.isAnnotationPresent(ItcastAnnotation.class);传入某个注解类的字节码文件。
获得该注解类,该类的字节码文件.getAnnotation(ItcastAnnotation.class);传入某个注解类的字节码文件,返回一个该注解类的对象。
调用该注解类的属性用对象.属性(),例如:注解类对象.name();
1 package test.enhance.annotation; 2 3 import java.lang.annotation.ElementType; 4 import java.lang.annotation.Retention; 5 import java.lang.annotation.RetentionPolicy; 6 import java.lang.annotation.Target; 7 8 import test.enhance.enumtest.WeekDay; 9 10 //为注解加上元注解 11 //标记为该注解可以存在到运行阶段,也就是字节码阶段。 12 @Retention(RetentionPolicy.RUNTIME) 13 //标记该注解可以用来标记class,method 14 @Target({ElementType.METHOD,ElementType.TYPE}) 15 public @interface ItcastAnnotation { 16 //属性,默认值为zhangsan 17 String name() default "zhangsan"; 18 int value(); 19 //枚举数据类型 20 WeekDay wd() default WeekDay.MON; 21 //字节码类型。 22 Class cl() default String.class; 23 }