JAVA开发系列之:注解

1:注解与注释的区别
注解会被编译,注释不会被编译;注解是写给JVM看的,注释是写给人看的方便理解代码。
2:经常使用注解
@Retention
Retention 的英文意为保留期的意思。当 @Retention 应用到一个注解上的时候,它解释说明了这个注解的的存活时间。
它的取值以下:
RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。注解默认使用这种方式。
RetentionPolicy.RUNTIME 注解能够保留到程序运行的时候,它会被加载进入到 JVM 中,因此在程序运行时能够获取到它们。所以能够使用反射机制读取该注解的信息。
@Documented
顾名思义,这个元注解确定是和文档有关。它的做用是可以将注解中的元素包含到 Javadoc 中去。
@Target
Target 是目标的意思,@Target 指定了注解运用的地方。
你能够这样理解,当一个注解被 @Target 注解时,这个注解就被限定了运用的场景。
@Target 有下面的取值
ElementType.ANNOTATION_TYPE 能够给一个注解进行注解
ElementType.CONSTRUCTOR 能够给构造方法进行注解
ElementType.FIELD 能够给属性进行注解
ElementType.LOCAL_VARIABLE 能够给局部变量进行注解
ElementType.METHOD 能够给方法进行注解
ElementType.PACKAGE 能够给一个包进行注解
ElementType.PARAMETER 能够给一个方法内的参数进行注解
ElementType.TYPE 能够给一个类型进行注解,好比类、接口、枚举
@Inherited
Inherited 是继承的意思,可是它并非说注解自己能够继承,而是说若是一个超类被 @Inherited 注解过的注解进行注解的话,那么若是它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。
@Repeatable
Repeatable 天然是可重复的意思。@Repeatable 是 Java 1.8 才加进来的,因此算是一个新的特性。
3:注解的写法java

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;.net

@Retention(RUNTIME)
@Target({ TYPE, FIELD, METHOD })
public @interface TestAnnotation {
    int age() default 18;
    String name() default "sam";
}
4:注解的使用
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.company.demo.annotation.TestAnnotation;继承

public class Test10 {
    public static void main(String[] args) {
        AnnotationTest ann = new AnnotationTest();
        Class cls = ann.getClass();
        Method[] methods = cls.getDeclaredMethods();
        for(Method m:methods) {
            if(m.isAnnotationPresent(TestAnnotation.class)) {
                try {
                    TestAnnotation test = m.getAnnotation(TestAnnotation.class);
                    m.invoke(ann, 0,"wang");
                    System.out.println("age=:"+test.age());
                    System.out.println("name=:"+test.name());
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }接口

    }文档

}
class AnnotationTest{
    @TestAnnotation(name="lily",age=18)
    String name;
    int age;
    @TestAnnotation(name="lily",age=18)
    void sayhello(int weight,String color) {
        System.out.println("hello world!"+weight+color);
    }
    void sayName() {
        System.out.println("hello my name is sam!");
    }  
}get

相关文章
相关标签/搜索