java中注解的几大作用
@SuppressWarnings("deprecation")//阻止警告 @HelloAnnotation("当为 value 属性时,可以省掉属性名和等于号。") public static void main(String[] args) throws Exception{ System.runFinalizersOnExit(true); if(AnnotationTest.class.isAnnotationPresent(HelloAnnotation.class)){ HelloAnnotation helloAnnotation = (HelloAnnotation)AnnotationTest.class.getAnnotation(HelloAnnotation.class); System.out.println("color(): "+helloAnnotation.color()); System.out.println("value(): "+helloAnnotation.value()); System.out.println("author(): "+helloAnnotation.author()); System.out.println("arrayAttr(): "+helloAnnotation.arrayAttr().length); System.out.println("annotationAttr(): "+helloAnnotation.annotationAttr().value()); System.out.println("classType(): "+helloAnnotation.classType().newInstance().sayHello("hello,ketty")); } } @Deprecated//自定义:备注过时的方法信息 public static void sayHello(){ System.out.println("hello,world实注解也就是一个类文件 package annotation; import ng.annotation.ElementType; import ng.annotation.Retention; import ng.annotation.RetentionPolicy; import ng.annotation.Target; import entity.PersonChiness; /*** * Retention:保持、保留 * RetentionPolicy:政策、方针 * @author huawei *@Retention *1、指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保 留策略默认为 RetentionPolicy.CLASS *2、有三种取值(代表三个阶段): * RetentionPolicy.SOURCE:保留注解到 java 源文件阶段,例如 Override、SuppressWarnings * RetentionPolicy.CLASS:保留注解到 class 文件阶段,例如 * RetentionPolicy.RUNTIME:保留注解到运行时阶段即内存中的字节码,例如 Deprecated */ //元注解:表示的是注解的注解,(同义词有元信息、元数据) //如果不加,javac 会把这无用的注解丢掉 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE,ElementType.METHOD})//指定该注解使用的用处:用在 class 上 和用在方法体上。 public @interface HelloAnnotation {
注解的作用: 1、生成文档。这是最常见的,也是 java 最早提供的注解。常用的有@see @param @return 等 2、跟踪代码依赖性,实现替代配置文件功能。比较常见的是 spring 2.5 开始的基于 注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。 以后 java 的程序开发,最多的也将实现注解配置,具有很大用处; 3、在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖 了超类方法,则编译时就能检查出。
下面是实现注解的测试类: package annotation; /*** * 注解类: * 1、相当于一种标记,加上注解就等于为程序打上了某种标记,没加,则等于没加某种标记, * 2、以后 javac 编译器、开发工具或其他应用程序可以通过反射来了解你的类,以及各种元 素上有无何种标记, * 看你有什么标记,就去执行相应的命令和干相应的事。 * 3、标记用处地方: * 加在包、类、字段、方法、方法的参数、局部变量 * @author huawei * */ //自定义注解 @HelloAnnotation(color="红色", value="如果只有 value 属性!可以不写属性名和等于号,直接写值即可!", arrayAttr={1,2,3}, annotationAttr=@MetaAnnotation("返回注解类型规范形式。")) public class AnnotationTest {
//返回值是 String 类型 String color() default "蓝色";//方法,但是相当于注解的属性,即:当成属性赋值,当成方法 调用。 //默认 value String value(); String author() default "默认给定了属性"; //返回值是数组对象 int[] arrayAttr() default {1}; //返回值是注解类型 MetaAnnotation annotationAttr() default @MetaAnnotation(""); //返回 CLASS 对象 Class<PersonChiness> classType() default PersonChiness.class; }