
正文
Java自学手记——注解
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
注意区分注释和注解,注释是给人看的,注解是给程序看的。
注解的作用是代替配置文件,在servlet3.0中,就可以不再使用web.xml文件,而是所有配置都是用注解!比如注解类 @WebServlet ,可以在servlet3.0中使用这个注解,用来代替<servlet>的配置,然后Tomcat通过反射来读取注解中的信息。注解的作用目标:类,方法,构造器,参数,局部变量以及包
注解也是一个类,所有注解的父类都是 Annotation,定义一个注解的语法:public @interface MyAnno{},注解也可以以后属性,定义语法为:注意定义属性的语法和类的属性语法结构有差别。当注解给出属性后,使用时必须为注解赋值。注解的属性可以有默认值,默认值可以不赋值,当使用注解时,如果只给名为value的属性赋值时,可以省略“value=”,用法如下:
public @MyAnno{
int value;
String value1;
}
public @MyAnno2{
String value default "hello world";
String value1;
}
@MyAnno(value=100,value1="hello")
@MyAnno(value1="hello")
public class MyClass{
}
注解的属性的类型:8种基本类型, String, Enum, Class, 注解类型以及以上类型的一维数组类型。
注解作用目标的限定:在定义注解时,给注解添加注解,这个注解是@Target, 能够限定注解的作用目标。
@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})//定义MyAnno1只能作用在类,方法和属性上
@interface MyAnno1 {
}
注解的保留策略:注解是只保留在源代码(SOURCE)上,还是保留到class文件上,再或者是类在运行时(JVM),可以被类加载器加载到内存中。使用@RetentionPolicy 指定注解的保留策略。值得注意的是,保留策略是运行中时,注解在源代码、字节码文件中存在,并且在JVM加载类时,会把注解加载到JVM内存中(它是唯一可反射注解!)。
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno1 { }
注解可以通过反射来读取:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyAnn {
String value() default "hello";
int value1() default 100;
} @MyAnn(value="hello world", value1=200)
public class MyClass {
private int a; @MyAnn("myMethod")
public void fun() {}
} public class Demo1 {
public static void main(String[] args) throws Exception {
Class clazz = MyClass.class;
MyAnn myAnn = (MyAnn) clazz.getAnnotation(MyAnn.class);
System.out.println(myAnn.value());
System.out.println(myAnn.value1()); Method method = clazz.getMethod("fun");
MyAnn myAnn1 = method.getAnnotation(MyAnn.class);
System.out.println(myAnn1.value());
System.out.println(myAnn1.value1());
}
}







