注解使用
一、java的常用注解
@Override 重写覆盖方法
@SuppressWarnings 压住警告可用于类和方法
@Deprecated 声明类或方法过时
注解@Override用在方法上,当我们想重写一个方法时,在方法上加@Override,当我们方法的名字出错时,编译器就会报错。
注解@SuppressWarnings用来压制程序中出来的警告,比如在没有用泛型或是方法已经过时的时候。
注解@Deprecated,用来表示某个类的属性或方法已经过时,不想别人再用时,在属性和方法上用@Deprecated修饰。
二、自定义注解
I. 元注解
1、@Target 表明注解的作用域
作用域被定义为枚举类型ElementType
ElementType.ANNOTATION_TYPE 作用在注解上
ElementType.CONSTRUCTOR 作用在构造方法
ElementType.FIELD 作用在属性上
ElementType.LOCAL_VARIABLE 作用在本地变量
ElementType.METHOD 作用在方法
ElementType.PACKAGE 作用在包
ElementType.PARAMETER 作用在参数
ElementType.TYPE 作用在类、接口或枚举类型
注解@Retention可以用来修饰注解,是注解的注解,称为元注解。
2、@Retention
注解有一个属性RetentionPolicy
RetentionPolicy是一个枚举类型有3个值
RetentionPolicy.CLASS 表示注解的信息被保留在class文件中
RetentionPolicy.SOURCE 不会留在class文件中,注解的信息只会留在源文件中
RetentionPolicy.RUNTIME 注解的信息被保留到运行时,所以他们可以用反射的方式读取。
3、@Documented
注解表明制作Javadoc时,是否将注解信息加入文档。如果注解在声明时使用@Document的,则在制作Javadoc时注解信息会加入javadoc
4、@Inherited
注解表示注解是否被子类继承。默认情况是不会继承。当在注解声明时时有@Inherited,则注解将会被该注解的类的子类所继承。
II、定义注解
定义新的Annotation类型使用@interface关键字(在原有interface关键字前增加@符号)。定义一个新的Annotation类型与定义一个接口很像,例如:
public @interface Test{ }
定义完该Annotation后,就可以在程序中使用该Annotation。使用Annotation,非常类似于public、final这样的修饰符,通常,会把Annotation另放一行,并且放在所有修饰符之前。例如:
@Test public class Person{ }
III、定义注解的成员变量
Annotation只有成员变量,没有方法。Annotation的成员变量在Annotation定义中以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。例如:
public @interface MyAnnotation{ string value(); int age(); }
示例中定义了2个成员变量,这2个成员变量以方法的形式来定义。
III、注解参数类型
注解参数必须是所有基本类型,包括(int, float, boolean), String, Class, enum, Annotation, 以及以上类型的数组。
IV、注解参数赋值
注解的参数要么在定义是赋值,要么在使用时赋值。如果注解中定义参数value,并且在使用时,value是唯一的需要赋值的参数,则无需指出参数名字,直接把参数值填在括号里。
@MyAnnonation(value="amethod",count=2) public void aMethod(){ } @Target(ElementType.METHOD) //注解作用在方法 @Retention(RetentionPolicy.RUNTIME) //注解保留到运行时 public @interface MyAnnonation { String value() ; int count() default 1; } @MyAnnonation("method") public void method(){ }
RetentionPolicy.RUNTIME 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.
@MyAnnonation(value="amethod",count=2) public void aMethod(){ } @Target(ElementType.METHOD) //注解作用在方法 @Retention(RetentionPolicy.RUNTIME) //注解保留到运行时 public @interface MyAnnonation { String value() ; int count() default 1; } @MyAnnonation("method") public void method(){ }