java中的注释与注解

来自董老师的课件总结

目录

1、认识Annotation

2、系统定义的三个Annotation

3、自定义Annotation

4、Retention和RetentionPolicy

5、反射与Annotation

6、@Documented注解

7、@Target注解

8、@Inherited注解 

1.略

2系统定义的三个Annotation

JDK 1.5之后,在系统中提供了三个Annotation,分别是:@Override、@Deprecated、@SuppressWarnings

@Override

表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示。

@Deprecated

表示的是一个类或方法已经不再建议继续使用了,标记为已过时

@SuppressWarnings

表示关闭不当的编译器警告信息。

3自定义Annotation

注解应用需要三个步骤:

1)编写注解

2)在类上应用注解

(3)对应用了注解的类进行反射操作的类

 

自定义Annotation的语法如下:

访问控制权限 @interface Annotation名称{}

例如:

public @interface MyAnnotation {}

 

Annotation中定义变量

public @interface MyAnnotation {

 public String name();

 public String info();

}

定义变量后,在调用此Annotation时必须设置变量值。

@MyAnnotation(name = “XB", info = “WSDR")

public class Demo {

}

通过default指定变量默认值,有了默认值在使用时可以不设值

默认属性为value,给value属性赋值可省略属性名。

public @interface MyAnnotation {

public String name() default “XB";

public String info() default “WSDR";

}

 

定义一个变量的数组,接收一组参数

public @interface MyAnnotation {

  public String[] name();

}

使用时指定数组值

@MyAnnotation(name = { “XB", “XH" })

public class Demo {

}

使用枚举限制变量取值范围

public enum Color {

 RED, GREEN, BLUE

}

public @interface MyAnnotation {

 public Color color();

}

4RetentionRetentionPolicy

Annotation要想决定其作用的范围,通过@Retention指定,而Retention指定的范围由ReteiontPolicy决定,RetentionPolicy指定了三种范围:

范围

描述

public static final RetentionPolicy SOURCE

java源程序中存在

public static final RetentionPolicy CLASS

java生成的class中存在

public static final RetentionPolicy RUNTIME

java运行的时候存在

示列:

@Retention(value = RetentionPolicy.RUNTIME)

public @interface MyAnnotation {

 public String name();

}

5反射与Annotation

一个Annotation真正起作用,必须结合反射机制,在反射中提供了以下的操作方法:java.lang.reflect.AccessibleObject

方法名称

描述

public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)

判断是否是指定的Annotation

public Annotation[] getAnnotations()

得到全部的Annotation

示例:

6@Documented注解

此注解表示的是文档化,可以在生成doc文档的时候添加注解。

@Documented

@Retention(value = RetentionPolicy.RUNTIME)

public @interface MyAnnotation {

public String name();

 public String info();

}

//可以增加一些DOC注释。

/**

  * 这个方法是从Object类中覆写而来的

 */

@MyAnnotation(name = “XB", info = “WSDR")

public String toString() {

 return "hello";

}

7@Target注解

@Target注解表示的是一个Annotation的使用范围,例如:之前定义的MyAnnotation可以在任意的位置上使用。

范围

描述

public static final ElementType TYPE

只能在类或接口或枚举上使用

public static final ElementType FIELD

在成员变量使用

public static final ElementType METHOD

在方法中使用

public static final ElementType PARAMETER

在参数上使用

public static final ElementType CONSTRUCTOR

在构造中使用

public static final ElementType LOCAL_VARIABLE

局部变量上使用

public static final ElementType ANNOTATION_TYPE

只能在Annotation中使用

public static final ElementType PACKAGE

只能在包中使用

8@Inherited注解

@Inherited表示一个Annotation是否允许被其子类继承下来。

示例

@Inherited

@Target(value = ElementType.TYPE)

@Retention(value = RetentionPolicy.RUNTIME)

public @interface MyAnnotation {

 public String name();

 public String info();

}

使用时允许被其子类所继承。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值