##注解的简单使用
####注解定义:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
public int id();
public String description()default "no description";
}
####注解的使用:
public class testZj {
@Test(id = 0,description="test description f")
public void f(){
}
@Test(id = 1,description="test description d")
public void d(){
}
@Test(id = 2)
public void e(){
}
}
####利用反射查看注解:
public class testfs {
public static void main(String[] args) {
Class cl = testZj.class;
for(Method m : cl.getDeclaredMethods()){
Test a = m.getAnnotation(Test.class);
if(a != null){
System.out.println(a.id() + " " + a.description());
}
}
}
}
####运行结果:
0 test description f
1 test description d
2 no description
##元注解(注解的注解)
-
@Target: 表示注解用到什么地方 有如下参数
-
CONSTRUCTOR: 构造器的声明
-
FIELD : 域声明(包括enum实例)
-
LOCAL_VARIABLE: 局部变量的声明
-
METHOD: 方法的声明
-
PACKAGE: 包声明
-
PARAMETER: 参数声明
-
TYPE: 类 接口(包括注解类型) eum 声明
-
@Retention: 在什么级别保存该注解信息 可选参数:
-
SOURCE: 被编译器丢弃
-
CLASS: 在class中可用 会被vm丢弃
-
RUNTIME: vm在运行期也保留注解 可通过发射读取
-
@Documented: 注解包含在javadoc中
-
@Inherited: 允许子类继承父类的注解
##注解的原理
*编译期
*反射读取