跟王老师学注解(三):元注解

跟王老师学注解(三):元注解

主讲教师:王少华   QQ群号:483773664

元注解,是用来修饰其他的注解定义。java.lang.annotation包下提供了4个元注解,分别是@Target注解、@Retention注解、@Documented注解以及@Inherited注解。

一、@Target

(一)简介

  • 用于指定被修饰的注解能用于修饰哪些程序元素
  • @Target注解类型有唯一的value作为成员变量,value的类型为java.lang.annotation.ElementType[]类型。
  • @Target的成员变量value为如下值时,则可指定被修饰的注解只能按如下声明进行标注

ElementType.ANNOTATION_TYPE:被修饰的注解只能用来修饰注解

ElementType.CONSTRUCTOR:只能修饰构造方法

ElementType.FIELD:只能修饰成员变量

ElementType.LOCAL_VARIABLE:只能修饰局部变量

ElementType.METHOD:只能修饰方法声明

ElementType.PACKAGE:只能修饰包

ElementType.PARAMETER:只能用来修饰参数

ElementType.TYPE:可以用来修饰类、接口、枚举声明

(二)使用方法

查看@SuppressWarning的源码

二、@Retention注解

(一)简介

@Retention注解描述了被其修饰的注解是否被编译器丢弃或者保留在class文件中。默认情况下,注解被保存在class文件中,但在运行时并不能被反射访问。

@Rentention包含一个RetentionPolicy类型的value成员变量,其取值来自java.lang.annotation.RetentionPolicy的枚举类型值,有如下3个取值:

RetentionPolicy.CLASS(默认值):编译器将把注解记录在class文件中,当运行Java程序时,Java程序时,Java虚拟机不再保留注解

RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行Java程序时,Java虚拟机也会保留注解,程序可以通过反射获取该注解

RetentionPolicy.SOURCE 编译器将直接丢弃被修饰的注解

(二)使用方法

由于@SuppressWarning的作用只是取消编译期的警告,所以@SuppressWarning不需要保存。

三、@Documented注解

(一)简介

@Documented用于指定被修饰的注解将被javadoc工具提取成文档。

如果定义注解时使用了@Documented修饰,则所有使用该注解修饰的程序元素的API文档中都将包含该注解说明。

@Documented注解类型中没有成员变量

(二)使用方法

(三)javadoc命令

javadoc命令参数有50多个,这里只简单介绍三个参数: -d,-subpackages,-sourcepath

-d 指定API文档的输出目录,默认是当前目录。建议总是指定该参数。
-sourcepath 指定源代码路径,默认是当前目录。 此参数通常是必须的。
-subpackages 以递归的方式处理各子包。关键参数!如果不使用本参数,每次只能处理一个子包(或需手工列出所有子包)。

使用参数 -author 可以将作者信息(@author ***)导出到最终生成的API文档中, -version 可以生成版本信息。如果是自己写的一个包,千万不要忘了用 -author


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package cn.net.imentors;

import javax.annotation.Resources;

/**

 * 程序入口

 * @author wangsh

 * @createDate:2016年6月1日

 * @version:v1.0

 * 功能描述:

 */

@Resources({})

public class JavadocTest {

     public static void main(String[] args)

        {

            System.out.println("hello!javadoc");

        }

}


1

2

3

4

5

6

7

8

9

public class Person {

    /**

     * age属性

     */

    public int age;

    public int count;

    public Person() {

    }

}


1

D:\>javadoc -d d:\api -sourcepath d:\src -subpackages cn.net.imentors -version -author

四、@Inherited注解

(一)简介

@Inherited注解用于指定被修饰的注解将具有继承性。

如果某个类使用了定义时被@Inherited修饰的注解,则其子类会自动具有这个注解。

(二)@Inherited的使用

允许子类继承父类的注解

留到下一节,再给大家举例说明@Inherited注解的使用。

来自为知笔记(Wiz)

时间: 2024-08-20 10:33:46

跟王老师学注解(三):元注解的相关文章

跟王老师学注解(二)注解的分类及内建注解

跟王老师学注解(二):注解的分类及内建注解 主讲教师:王少华   QQ群号:483773664 一.注解的分类 在Java中,根据注解的使用方法和用途,可将注解分成3类,分别是 内建注解(也称为基本注解),定义于java.lang包下 元注解(Meta Annotation) 自定义注解 二.内建注解 (一)分类 在JDK5.0及以上的版本的java.lang包下提供了3种标准的注解类型,分别是 @Override: @Deprecated @SuppressWarnings (二)@Overr

跟王老师学注解(四):自定义注解

跟王老师学注解(四):自定义注解 主讲教师:王少华   QQ群号:483773664 到此,我们已经学习完了JDK提供的3种内建注解及4种元注解,下面来了解自定义注解 一.注解类型 (一)注解类型与接口:注解类型是一种接口,但它又不同于接口 1.注解类型使用关键字@interface而不是interface 1 2 public @interface TestAno { } @interface隐含继承java.lang.annotation.Annotation接口 2.注解类型的方法定义是独

跟王老师学注解(一):注解概述

跟王老师学注解(一):注解概述 主讲教师:王少华   QQ群号:483773664 一.问题来了 真实的悲惨的例子 1 2 3 4 5 public class SupClass {     public void getObjectInfo(){         System.out.println("我是父类");     } } 1 2 3 4 5 public class ChildClass extends SupClass{     public void getObjec

跟王老师学注解(五):利用反射读取注解信息

跟王老师学注解(五):读取注解信息 主讲教师:王少华   QQ群号:483773664 一.注解被读取 (一)条件 当一个注解类型被定义为运行时注解后,该注解才是运行时可以见,当class文件被装载时被保存在class文件中的注解才会被Java虚拟机所读取. 要把@Retention注解的value成员变量的值设为RetentionPolicy.RUNTIME (二)办法 我们已知所有的注解都是继承的java.lang.Annotation接口,也就是说Annotation是所有接口的父接口.除

跟王老师学注解(六):注解应用案例

跟王老师学注解(六):注解应用案例 主讲教师:王少华   QQ群号:483773664 一.需求 利用注解,做一个Bean的数据校验 要求: 用户名是否能为空,用户名的长度不能超过指定长度,不能少于指定长度 二.参考代码 @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.FIELD, ElementType.PARAMETER }) public @interface MyValidate {     // 是否可以为空     

跟王老师学反射(三):Class类:获得Class对象

跟王老师学反射(三):Class类:获得Class对象 主讲教师:王少华   QQ群号:483773664 学习内容 掌握获得Class对象的三种方式 理解这三种方式的区别 一.获得Class对象 前面我们已经领略了反射的魅力了,我们知道,利用反射的关键是要获得"图纸"Class对象,那么怎么获得这个Class对象呢!!! 每个类被加载之后,系统会为该类生成一个对应的Class对象,通过该Class对象就可以访问JVM中的这个类.Java程序获得Class对象有如下三种方式: (一)调

跟王老师学枚举(三):枚举类API

跟王老师学枚举(三):枚举API 主讲教师:王少华   QQ群号:483773664 一.枚举类API Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法.常用方法: name():返回此枚举常量的名称 ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零 valueof(Class enumClass, String name):返回带指定名称的指定枚举类型的枚举常量 valueof(String name):返回带指定

跟王老师学多态(三) 父类到子类的转换和instance of运算符

父类到子类的转换和instanceof运算符 主讲教师:王少华 QQ群号:483773664 学习目标: 1)   父类与子类转换:向下转换 2)   掌握instanceof运算符的使用 一.  问题:实现主人与宠物的玩耍功能 (一)   需求: 和狗玩接飞船游戏,狗的健康值减少10,与主人亲密度增加5 和企鹅玩游泳游戏,企鹅的健康值减少10,与主人亲密度增加5 (二)   实现思路 1)   给Dog类添加catchingFlyDisc方法,实现接飞盘功能: 2)   给Penguin类添加

跟王老师学Java三大特性(三):案例 QuickHit:确认输入并输出结果

案例 QuickHit:确认输入并输出结果 主讲教师:王少华   QQ群号:483773664 学习目标 完成Game类中的printResult方法的编写 一.需求说明 确认用户输入并输出结果 二.思路分析 确认玩家输入是否正确 如果输入不正确,则直接输出错误信息并退出程序 如果输入正确 如果超时,则直接输出错误信息并退出程序 如果不超时 计算玩家当前积分 计算 玩家已用的时间 输出当前玩家的级别.当前积分.已用时间: 判断用户是已经闯过最后一关并处理 三.参考代码 1 2 3 4 5 6 7