java中注解的几大作用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

注解的作用:

1、生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等

2、跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。以后java的程序开发,最多的也将实现注解配置,具有很大用处;

3、在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。

使用方法详解:

下面是注解类,其实注解也就是一个类文件

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 {

//返回值是String类型

String color() default "蓝色";//方法,但是相当于注解的属性,即:当成属性赋值,当成方法调用。

//默认value

String value();

String author() default "默认给定了属性";

//返回值是数组对象

int[] arrayAttr() default {1};

//返回值是注解类型

MetaAnnotation annotationAttr() default @MetaAnnotation("");

//返回CLASS对象

Class classType() default PersonChiness.class;

}

下面是实现注解的测试类:

package annotation;

/***

* 注解类:

* 1、相当于一种标记,加上注解就等于为程序打上了某种标记,没加,则等于没加某种标记, * 2、以后javac编译器、开发工具或其他应用程序可以通过反射来了解你的类,以及各种元素上有无何种标记,

* 看你有什么标记,就去执行相应的命令和干相应的事。

* 3、标记用处地方:

* 加在包、类、字段、方法、方法的参数、局部变量

* @author huawei

*

*/

//自定义注解

@HelloAnnotation(color="红色",

value="如果只有value属性!可以不写属性名和等于号,直接写值即可!",

arrayAttr={1,2,3},

annotationAttr=@MetaAnnotation("返回注解类型规范形式。"))

public class AnnotationTest {

@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");

}

}

相关文档
最新文档