JavaSE之注释规范、文档注释及注解

Java中的注释不会出现在可执行程序中,有三种标记注释的方式:(1)//:单行注释;(2)/*……*/:多行注释;(3)/**……*/:文档注释。
一、注释可以帮助我们更清晰地阅读代码,了解代码。在 阿里巴巴Java开发手册中,也对注释作了规约, 注释规约如下:
    1. 【强制】类、类属性、类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用// xxx 方式。
         说明:在 IDE 编辑窗口中,Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释;在 IDE 中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。
    2. 【强制】所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。
         说明:对子类的实现要求,或者调用注意事项,请一并说明。
    3. 【强制】所有的类都必须添加创建者和创建日期。
    4. 【强制】方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释,注意与代码对齐。
    5. 【强制】所有的枚举类型字段必须要有注释,说明每个数据项的用途。
    6. 【推荐】与其“半吊子”英文来注释,不如用中文注释把问题说清楚。专有名词与关键字保持英文原文即可。
          反例:“TCP 连接超时”解释成“传输控制协议连接超时”,理解反而费脑筋。
    7. 【推荐】代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。
         说明:代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了导航的意义。
    8. 【参考】谨慎注释掉代码。在上方详细说明,而不是简单的注释掉。如果无用,则删除。
         说明:代码被注释掉有两种可能性:1)后续会恢复此段代码逻辑。2)永久不用。前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库保存了历史代码)。
    9. 【参考】对于注释的要求:第一、能够准确反应设计思想和代码逻辑;第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看
的,使其能够快速接替自己的工作。
    10. 【参考】好的命名、代码结构是自解释的,注释力求精简准确、表达到位。避免出现注释的
            一个极端:过多过滥的注释,代码的逻辑一旦修改,修改注释是相当大的负担。
            反例:
// put elephant into fridge
put(elephant, fridge); 
            方法名 put,加上两个有意义的变量名 elephant 和 fridge,已经说明了这是在干什么,语义清晰的代码不需要额外的注释。
    11. 【参考】特殊注释标记,请注明标记人与标记时间。注意及时处理这些标记,通过标记扫描,经常清理此类标记。线上故障有时候就是来源于这些标记处的代码。
            1) 待办事宜(TODO):( 标记人,标记时间,[预计处理时间])表示需要实现,但目前还未实现的功能。这实际上是一个 Javadoc 的标签,目前的 Javadoc还没有实现,但已经被广泛使用。只能应用于类,接口和方法(因为它是一个 Javadoc 标签)。
            2) 错误,不能工作(FIXME):(标记人,标记时间,[预计处理时间])在注释中用 FIXME 标记某代码是错误的,而且不能工作,需要及时纠正的情况。
二、文档注释
    JDK包含一个工具javadoc,它可以由源文件生成一个HTML文档,方便记录程序信息。
    文档注释以/**开始,并以*/结束。每个/**……*/文档注释在标记之后紧跟着自由格式文本。标记由@开始,如@author或@param。
    自由格式文本的第一句应该是一个概要性的句子。javadoc实用程序自动地将这些句子抽取出来形成概要页。
    1、类注释
        类注释必须放在import语句之后,类定义之前。例:
/**
 * A {@code Card} object represents a playing card,such as "Queen of Hearts".
 * A card has a suit (Diamond,Heart,Spade or Club) and a value (1 = Ace,2...10,11 = Jack,12 = Queen,13 = King)
 * 一个{@code Card}对象代表一张扑克牌,如“红心皇后”。
 * 一张牌有一套(方块,红心,黑桃,梅花)和一个值(1……13)
 */
//按注释规约6中所示,如何清楚如何写注释
public class Card {
    /* ... */
}
    2、方法注释
        每一个方法注释必须放在所描述的方法之前。除了使用通用标记之外,还可以使用下面的标记:
        @param变量描述:这个标记将对当前方法的“param”(参数)部分添加一个条目。这个描述可以占据多行,并可以使用HTML标记。一个方法的所有@param标记必须放在一起。
        @return描述:这个标记将对当前方法添加“return”(返回)部分。这个描述可以跨越多行,并可以用HTML标记。
        @throws类描述:这个标记将添加一个注释,用于表示这个方法有可能抛出异常。
    3、域注释
        只需要对公有域(通常指的是静态常量)建立文档。
    4、通用注释
        下面的标记可以用在类文档的注释中。
        @author姓名:这个标记将产生一个“author”(作者)条目。可以使用多个@author标记,每个@author标记对应一个作者。
        @version文本:这个标记将产生一个“version”(版本)条目
        ……
import java.io.*;
/**
 * 这个类演示了文档注释
 * @author Horet
 * @version 1.0
 */
public class SquareNum {
    /**
     * 这个方法返回num的平方。(这是一个多行
     * 描述,你可以随你喜欢写成N行。当然,以看得最舒服为目标)
     * @param num 这个值被平方。
     * @return num 的平方.
     */
    public double square(double num) {
        return num * num;
    }
    /**
     * 这个方法是从用户得到一个数字输入。
     * @return 返回一个double值。
     * @exception IOException 此标签和@throws一样,标志一个类抛出的异常。
     * @see IOException
     */
    public double getNumber() throws IOException {
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader inData = new BufferedReader(isr);
        String str;
        str = inData.readLine();
        return (new Double(str)).doubleValue();
    }

    public static void main(String args[]) throws IOException
    {
        SquareNum ob = new SquareNum();
        double val;
        System.out.println("Enter value to be squared: ");
        val = ob.getNumber();
        val = ob.square(val);
        System.out.println("Squared value is " + val);
    }
}
三、注释的抽取
    javadoc工具将你Java程序的源代码作为输入,输出一些包含你程序注释的HTML文件。
    这里假设HTML文件将被存放在目录docDirectory下。执行一下步骤:
    1)切换到包含想要生成文档的源文件目录。如果有嵌套的包要生成文档,就必须切换到包含子目录com的目录。
    2)如果是一个包,应该运行命令:
    javadoc -d docDirectory nameOfPackage
    或对于多个包生成文档,运行:
    javadoc -d docDirectory nameOfPackage1 nameOfPackage2……
    如果文件在默认包中,就应该运行:
    javadoc -d docDirectory *.java
四、注解
    Annotation,是Java代码里的特殊标记,以标签的形式存在于Java代码中,用来生成其他的文件或使我们在运行代码时知道被运行代码的描述信息。
    注解的语法很简单,只需在程序元素前面加上“@”符号,并把该注解当成一个修饰符使用,用于修饰它支持的程序元素。
    注解分为3类,包括内建注解、元注解以及自定义注解。
    1、内建注解
        java.lang包下提供了3种标准注解,称为内建注解,分别是@Override注解、@Deprecated注解以及@SuppressWarnings注解。
        1)@Override:标注方法,用来表示该方法是重写父类的某方法。
        2)@Deprecated:标识程序已过时。
        3)@SuppressWarnings:标识阻止编译器警告。
    2、元注解
        java.lang.annotation包下提供了4个元注解,用来修饰其他的注解定义。@Target注解、@Retention注解、@Documented注解以及@Inherited注解。
        1)@Target注解用于指定被其修饰的注解能用于修饰哪些程序元素。
        2)@Retention注解描述了被其修饰的注解是否被编译器丢弃或者保留在class文件中。
            它包括3种RetentionPolicy:
            RetentionPolicy.CLASS:@Retention注解中value成员变量的默认值,表示编译器会把被修饰的注解记录在class文件中,但当运行Java程序时,Java虚拟机不再保留注解,从而无法通过反射对注解进行访问。
             RetentionPolicy.RUNTIME:表示编译器将注解记录在class文件中,当运行Java程序时,Java虚拟机会保留注解, 程序可以通过反射获取该注解
            RetentionPolicy.SOURCE:表示编译器将直接丢弃被修饰的注解。
        3)@Documented注解用于指定被其修饰的注解将被JavaDoc工具提取成文档。
        4)@Inherited注解用于指定被其修饰的注解将具有继承性。
    3、自定义注解
        例如:public @interface AnnotationTest{}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值