黑马高新技术 注解篇

来源:互联网 发布:篮球火 知乎 编辑:程序博客网 时间:2024/05/22 02:23

package my_finish_test;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Collections;/** * 1、首先了解,什么是注解。 * 2、注解的用法,注解的用途 * 其实,注解是一种类。也叫元数据。它可以通过代码的标示的注解生成文档,也可以通过代码里标示的注解使用反射对代码进行分析, * 还可以通过代码里面标示的注解让编译器对代码进行编译时检查。所有注解的作用如下三点: * (1)、生成注解文档 * (2)、代码分析 * (3)、编译检查 * 3、一些注解: * //@deprecated 表示过时了 * //@Overrride 表示覆盖,如果不是覆盖则会报错,这就是注解的 --->编译检查作用 * //@SuppressWarning(..)提示 * //@target(ElementTyp.METHOD)表示注解用在方法上 * //@target({ElementTyp.METHOD,ElementTypE.TPYE})表示注解用在类上 Type 是Class实现的一个接口 *  * 4、注解的生命周期 * //@Retention(RetentionPolicy.SOURCE)  1、表示生命周期在鱼源文件阶段 * //@Retention(RetentionPolicy.CLASS)2、表示生命周期在鱼class文件阶段 * //@Retention(RetentionPolicy.RUNTIME)3、表示生命周期在鱼运行(内存中变成字节码)阶段 * 以便注解的默认值是在class文件阶段 * 因为,在源文件编译成class文件时,编译器会根据注解的生命周期而去掉注解,所有可以看需要设定 * 同样,在class文件加载到内存中变成字节码是也会根据注解的生命周期而去除,所有同意可按需设定。 * 张孝祥老师纠正了一句:class文件并不就是字节码文件,而是通过类加载器加载到内存中后才会变成字节码文件。 * 也就是说,class文件!=二进制 ,而是可以通过编译器变成二进制的文件 * @author Evan_Huang * *///@MyAnnotation(88)//如果只有一个属性可以不用写 value = 88;而直接写@MyAnnotation(88)//注意 ,注解不要加 ; 号public class AnnotationTest {public static void main(String[] args) {//用放射来调用注解Class clazz = MyAnnotation.class;//类的静态方法//如果是AnnotationTest上面的注解if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){//通过class里面的方法getAnnotation方法返回注解对象MyAnnotation annotation = (MyAnnotation)AnnotationTest.class.getAnnotation(clazz);System.out.println(annotation.value());//因为注解默认是在class文件阶段,所有会打印不出来,要在注解上面再搞个设定生命周期的注解System.out.println(Arrays.asList(annotation.str()).toString());System.out.println(annotation.EnumCity().nextCity());System.out.println(annotation.youAnno());}}}//首先搞个注解,注解的写法跟接口差不多,这里我没加public@Retention(RetentionPolicy.RUNTIME)//因为注解默认是在class文件阶段,所有会打印不出来,要在注解上面再搞个设定生命周期的注解,叫元注解 @interface MyAnnotation{//可以再里面定义属性方法 int value();//数据可以定义数组 String[] str() default {"I","love","China","!"}; //数据可以定义枚举City EnumCity() default City.GUANGZHOU;//数据可以定义注解YouAnnotation youAnno() default @YouAnnotation(); //数据可以定义Class类型}@interface YouAnnotation{String name() default "Evan_Huang";}//搞个枚举enum City{GUANGZHOU {@Overridepublic City nextCity() {return SHANGHAI;}},SHANGHAI {@Overridepublic City nextCity() {return BEIJING;}},BEIJING {@Overridepublic City nextCity() {return SHENZHENG;}},SHENZHENG {@Overridepublic City nextCity() {return GUANGZHOU;}};public abstract City nextCity();}


0 0
原创粉丝点击