您的位置:首页 > 其它

注解的定义与反射调用

2018-01-30 00:00 155 查看

一、注解的应用结构图



二、自定义注解及其应用

1、@Retention元注解

包含三种取值(枚举):RetetionPolicy.SOURCE、RetetionPolicy.CLASS、RetetionPolicy.RUNTIME;分别对应:java源文件-->class文件-->内存中的字节码(默认值为RetentionPolicy.CLASS)

思考:@Override、@SuppressWarnings和@Deprecated这三个注解的属性值分别是什么?

RetetionPolicy.SOURCE、RetetionPolicy.SOURCE、RetetionPolicy.RUNTIME

2、@Target元注解

Target的默认值为任何元素,设置Target等于ElementType.METHOD,原来加在类上的注解就报错了,改为用数组方式设置{ElementType.METHOD,ElementType.TYPE}就可以了

三、代码说明

1、LH.java

package staticimport.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)//元注解
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface LH {

}


2、AnnotationTest.java

package staticimport.annotation;

@LH
@SuppressWarnings("deprecation")
public class AnnotationTest {

public static void main(String[] args) {
System.runFinalizersOnExit(true);
AnnotationTest.sayHello();

if(AnnotationTest.class.isAnnotationPresent(LH.class)){
LH lh = (LH) AnnotationTest.class.getAnnotation(LH.class);
System.out.println(lh);
}

}

//标注本方法已过时,提示用户不要再使用!但不影响已经使用的!
@Deprecated
@LH
public static void sayHello(){
System.out.println("Hello,LH!");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  注解 Retention Target