-
Java注释
2020-01-26 00:00:471 Java 注释 Java 多行注释 3 Java 文档注释 1 Java 注释 您可以在Java代码中包含注释,这将提高源代码的可读性。 Java 支持单行以及多行注释。注释中的字符将被 Java 编译器忽略。 Java 单行注释以 // 开始,...目录
1 Java 注释
您可以在Java代码中包含注释,这将提高源代码的可读性。
Java 支持单行以及多行注释。注释中的字符将被 Java 编译器忽略。
Java 单行注释以 // 开始,直到行尾为止。例如:
// 这是一个单行注释 x = 10; // 代码后的单行注释
单行注释也能以 /* 开始,以 */为止。例如:
/* 这也是一个单行注释 */
提示:在编写代码时添加注释是一种很好的做法,因为当你需要回顾它时,以及其他人可能需要阅读它时,它们提供了解释和理解。
注释:编译器是不执行的,就是自己看或者别人看,人人交互,不是人机交互!
为了方便程序的阅读,Java语言允许程序员在程序中写上一些说明性的文字,用来提高程序的可读性,这些文字性的说明就称为注释。 注释不会出现在字节码文件中,即Java编译器编译时会跳过注释语句。 在Java中根据注释的功能不同,主要分为单行注释、多行注释和文档注释。
Java 多行注释
Java 也支持跨多行的注释。
Java 多行注释以 /* 开始,以 */为止。例如:
/* 这是一个 * 多行注释 */
请注意,Java 不支持嵌套的多行注释,但是,您可以在多行注释中嵌套单行注释。
例如:
/* 嵌套单行注释 // 单行注释 */
-
单行注释: 使用“//”开头,“//”后面的单行内容均为注释。
-
多行注释: 以“/*”开头以“*/”结尾,在“/*”和“*/”之间的内容为注释,我们也可以使用多行注释作为行内注释。但是在使用时要注意,多行注释不能嵌套使用。
-
文档注释: 以“/**”开头以“*/”结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API)
/** * Welcome类(我是文档注释) * @author 赵广陆 * @version 1.0 */ public class Welcome { //我是单行注释 public static void main(String[] args/*我是行内注释 */) { System.out.println("Hello World!"); } /* 我是多行注释! 我是多行注释! */ }
3 Java 文档注释
文档注释允许你在程序中嵌入关于程序的信息。你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中。
文档注释,使你更加方便的记录你的程序信息。
Java 文档注释以 /** 开始,以 */结束。例如:
/** 这是一个文档注释 */ /** 这也是一个 文档注释 */
在开始的 /** 之后,第一行或几行是关于类、变量和方法的主要描述。
之后,你可以包含一个或多个各种各样的@标签。每一个@标签必须在一个新行的开始或者在一行的开始紧跟星号(*).
下面是一个类的说明注释的实例:
/** * 这个类演示了文档注释 * @author 赵广陆 * @version 1.0 */
-
-
java注释
2019-05-12 21:54:00Java注释java中注释有三种:这些都称之为java doc标记,含义如下: java中注释有三种: 单行注释 //注释的内容, 多行注释 /…注释的内容…/, 文档注释 /**…注释的内容….*/。 就是为了便于javadoc程序自动生成...java中注释有三种:
- 单行注释 //注释的内容,
- 多行注释 /…注释的内容…/,
- 文档注释 /**…注释的内容….*/。
就是为了便于javadoc程序自动生成文档
这些都称之为java doc标记,含义如下:
@author 标明开发该类模块的作者
@version 标明该类模块的版本
@see 参考转向,也就是相关主题
@param 对方法中某参数的说明
@return 对方法返回值的说明
@exception 对方法可能抛出的异常进行说明其中,@author 可以多次使用,以指明多个作者,生成的文档中每个作者之间使用逗号 (,) 隔开。@version 也可以使用多次,只有第一次有效。@param、@return 和 @exception 这三个标记都是只用于方法的。
-
Java 注释
2015-11-18 23:48:25Java 注释 五月份得知入职YunOS, 开始学习Java, 断断续续学习和使用Java将近半年, 越来越喜欢这个工具, 因此后来被... 写的第一篇Java的博客, 就从最基础的Java注释开始!引 程序员圈有一个笑话 最讨厌在写代码的时Java 注释 标签 : Java基础
五月份得知入职阿里云OS, 才开始学Java, 断断续续学习/使用半年, 越来越喜欢这个语言/工具. 后来被拥抱变化之后, 拿到的大部分offer是Java服务端研发; 一路走来, 踩了很多坑, 也有了一点小小的心得, 而且博客已经停更几个月, 今天就以博客形式把他记录下来吧.
2015下半年第一篇博客, 从最基础的Java注释开始:程序员圈有一个笑话
最讨厌在写代码的时候写注释, 最讨厌别人的代码里面不写注释.
为什么写注释?
我自己亲身经历:
这段时间在微店实习, 第一个接手的项目是将原先北京团队的代码迁移到杭州, 由于底层技术架构的更换, 大部分代码需要重写, 前提是要理解原先的业务逻辑, 但当我在SVN上把代码拉下来, 看到意大利面似的一大坨代码里只有寥寥几行注释时, 整个人都不好了…
另一个遇到场景, 有时自己的代码有Bug, 或者需要重构, 此时就需要Review代码, 可是突然发现自己已经很难理解原先逻辑了(很可能这段代码只是你前几天刚刚写的), 因为我们已经很难回到当时状态.
还有一个重要的原因就是文档, 往往一个系统被开发出来, 文档要么不全, 要么更新落后, 如果后人要接手这一套系统, 就必须直接阅读源码, 如果此时在代码的关键逻辑之处能够有一两行注释提示, 新人就没有必要绞尽脑汁去猜测当时的设计方案了.
后来自己写代码时就尽量写注释提示, 虽然不一定完全按照下面的注释规范, 但会尽量用 最简单的语言把问题阐述清楚, 在逻辑转折之处添加几行说明, 无论是自己还是未来的接手人, 都会对现在的你感激不尽.注释类型
Java提供三种注释方式: 单行注释、多行注释、文档注释.
- 单行/多行注释
单行注释与多行注释的作用就不再赘, IDEA快捷键分别如下:
command+/
: 以//
快速注释一行或多行 :
// Integer[] array = new Integer[10]; // for (int i = 0; i < array.length; ++i){ // array[i] = new Integer(i); // }
command+option+/
: 以/**/
快速注释一行或多行/* Integer[] array = new Integer[10]; for (int i = 0; i < array.length; ++i){ array[i] = new Integer(i); } */
- 文档注释
Java提供了一种功能非常强大的注释形式: 文档注释. 如果编写Java源代码时添加了文档注释, 然后通过JDK提供的javadoc工具就可以直接将代码里的注释提取成一份系统的API文档. 其注释形式为/** */
/** * Initializes a newly created {@code String} object so that it represents * the same sequence of characters as the argument; in other words, the * newly created string is a copy of the argument string. Unless an * explicit copy of {@code original} is needed, use of this constructor is * unnecessary since Strings are immutable. * * @param original * A {@code String} */
# javadoc 注释标签语法
标签 作用域 说明 @author 类 标明开发该类模块作者 @version 类 标明该类模块的版本 @see 类, 属性, 方法 参考转向(相关主题) @param 方法 对方法中某参数的说明 @return 方法 对方法返回值的说明 @exception 方法 抛出的异常类型 @throws 方法 与@exception相同 @deprecated 方法 不建议使用该方法 注释原则
下面是我自己看到和用过的注释原则:
- 注释准确简洁
内容简单明了、含义准确, 尽量用最少的语言把问题阐述清楚, 防止注释的多义性,错误的注释不但无益反而有害. - 避免复杂注释
如果需要用复杂的注释来解释代码, 请检查此代码是否应该重写. 尽一切可能不注释难以理解的代码, 最好选择重构. - TODO List
为尚未完成的代码添加TODO注释, 提醒自己还需后续完善. - 注释形式统一
在整个项目中,使用一致的结构样式来构造注释. - 注释与代码同步更新
边写代码边注释,因为以后很可能没有时间来写注释了(可能在今天看来很明显的东西六周以后或许就不明显了). 通常描述性注释先于代码创建、解释性注释在开发过程中创建、提示性注释在代码完成之后创建. 修改代码的同时修改注释,保证代码与注释同步. - 注释就近
保证注释与其描述的代码相邻, 在代码上方或右方(最好上方)进行注释. - 注释不要过多
注释必不可少,但也不应过多,注释占程序代码的比例少于20%为宜.注释是对代码的“提示”,而不是文档. 如果代码本来就一目了然就不加注释. - 删除无用注释
在代码交付或部署发布之前, 删除临时或无关注释, 避免日后维护中产生混乱. - 必加注释之处
- 典型算法必有注释
- 代码不明晰处必有注释
- 在循环/逻辑分支组成的代码中加注释
- 为他人提供的接口必有注释
- 在代码修改处加修改标识
JDK注释参考:
- 类/接口注释
/** * The <code>String</code> class represents character strings. All * string literals in Java programs, such as <code>"abc"</code>, are * implemented as instances of this class. * (其他描述) * @author Lee Boynton * @author Arthur van Hoff * @author Martin Buchholz * @author Ulf Zibis * @see java.lang.Object#toString() * @see java.lang.StringBuffer * @see java.lang.StringBuilder * @see java.nio.charset.Charset * @since JDK1.0 */ public final class String implements java.io.Serializable, Comparable<String>, CharSequence { ... }
- 构造器注释
/** * Initializes a newly created {@code String} object so that it represents * the same sequence of characters as the argument; in other words, the * newly created string is a copy of the argument string. Unless an * explicit copy of {@code original} is needed, use of this constructor is * unnecessary since Strings are immutable. * * @param original * A {@code String} */ public String(String original) { this.value = original.value; this.hash = original.hash; }
- 方法注释
/** * Returns <tt>true</tt> if, and only if, {@link #length()} is <tt>0</tt>. * * @return <tt>true</tt> if {@link #length()} is <tt>0</tt>, otherwise * <tt>false</tt> * * @since 1.6 */ public boolean isEmpty() { return value.length == 0; }
- 字段/属性注释
/** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0 /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = -6849794470754667710L; /** * Class String is special cased within the Serialization Stream Protocol. * * A String instance is written initially into an ObjectOutputStream in the * following format: * <pre> * <code>TC_STRING</code> (utf String) * </pre> * The String is written by method <code>DataOutput.writeUTF</code>. * A new handle is generated to refer to all future references to the * string instance within the stream. */ private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0];
- 方法内注释
public boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) { char ta[] = value; int to = toffset; char pa[] = other.value; int po = ooffset; // Note: toffset, ooffset, or len might be near -1>>>1. if ((ooffset < 0) || (toffset < 0) || (toffset > (long)value.length - len) || (ooffset > (long)other.value.length - len)) { return false; } while (len-- > 0) { char c1 = ta[to++]; char c2 = pa[po++]; if (c1 == c2) { continue; } if (ignoreCase) { // If characters don't match but case may be ignored, // try converting both characters to uppercase. // If the results match, then the comparison scan should // continue. char u1 = Character.toUpperCase(c1); char u2 = Character.toUpperCase(c2); if (u1 == u2) { continue; } // Unfortunately, conversion to uppercase does not work properly // for the Georgian alphabet, which has strange rules about case // conversion. So we need to make one last check before // exiting. if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) { continue; } } return false; } return true; } String(char[] value, boolean share) { // assert share : "unshared not supported"; this.value = value; } char[] val = value; /* avoid getfield opcode */ public boolean contentEquals(CharSequence cs) { if (value.length != cs.length()) return false; // Argument is a StringBuffer, StringBuilder if (cs instanceof AbstractStringBuilder) { char v1[] = value; char v2[] = ((AbstractStringBuilder) cs).getValue(); int i = 0; int n = value.length; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } // Argument is a String if (cs.equals(this)) return true; // Argument is a generic CharSequence char v1[] = value; int i = 0; int n = value.length; while (n-- != 0) { if (v1[i] != cs.charAt(i)) return false; i++; } return true; }
附: 开发者工具
- IDEA: 比较给力的Java IDE, 用过都说好(“自从用了IDEA, 写代码越来越有劲儿了”). 非常多很赞的功能, 如对Git、Maven的原生支持, 自动代码提示, 自带命令行, 黑色主题, UML类图生成… 而且现在IDEA家族也越来越强, Android开发的Android Studio、IOS的AppCode、C/C++的CLion、Python的PyCharm、PHP的PhpStorm、前端的WebStorm等等, 详细可查看Jet Brains官网.
- Git&GitHub: Git就不用多做介绍了, 算是开发者居家旅行之必备吧. 这方面的书/视频很多, 但在此我只推荐一部文档: 廖雪峰的Git教程. 虽然Git内容繁多, 但这篇文档却直取要害, 非常实用, 读了很多遍.
- Maven: Maven方面我也是新手, 在此我只推荐一部还不错的Maven方面的书, Maven实战, 一部国人写的实战类书籍.
- SQLPro for MySQL: 一款MySQL-GUI客户端, 用过MySQL-WorkBench、Navicat、Sequel Pro, 但最后还是选择的SQLPro for MySQL.
- ProcessOn: 免费绘图网站, UML、流程图、网络拓扑… 上手容易.
- Markdown: 这方面我也是初学者, 推荐两个客户端Cmd Markdown、MWeb.
- JSON查看&编辑
这方面除了TextLab没有发现其他好用的客户端, 只能推荐几个网站: - RegExRx
Mac上非常好用的正则表达式匹配引擎, 用于测试正则表达式书写的正确与否. - iTerm2
忘掉Mac自带的终端吧, iTerm你值得拥有. - Alfred
最后, 推荐Mac效率神器Alfred, 推荐博客: 从零开始学习 Alfred(上):基础功能及设置, 其他功能还在探索.
在此只推荐了我所知道和常用一些小工具, 欢迎同学补充.
- 单行/多行注释
-
JAVA注释
2018-11-28 20:47:33一、可以用注释来调试程序。 二、单行注释<//注释内容>,不能跨行。 三、多行注释</*注释内容*/>,可以跨行 四、文档注释确保了注释与源码的连接,便于维护,格式&...一、可以用注释来调试程序。
二、单行注释<//注释内容>,不能跨行。
三、多行注释</*注释内容*/>,可以跨行
四、文档注释确保了注释与源码的连接,便于维护,格式</**注释内容*/>>,不同于单行和多行注释放在要注释语句的后面,文档注释必须放在要注释的语句前面,且文档注释默认只处理public和protected修饰的类、接口及方法,如果要处理privated修饰的,需要在javadoc中命令汇总增加“- privated”命令
(一)将文档注释转为API文档,用javadoc命令,格式:“javadoc <命令选项> java源文件(或包文件名)”,源文件或包支持通配符,支持多个包一起写。
(二)常用命令选项包括:
1、-d <指定生产路径>
2、-windowtitle <浏览器窗口标题>
3、-doctitle <概述页面标题> 注意:只有多个包下的源文件生成的API才有概述页面
4、-header <包含所有页面的页面标题>
(三)文档注释中可以用javadoc标记(标记放在/**和*/之间即可),常用标记如下:
1、@author 标注作者
2、@version 标注版本
3、@deprecated 不推荐的使用的类或方法,给出取代该方法或类的建议
4、@see 参见,可以用带链接的<>标签,也可以直接跟方法或变量路径,但是类名与方法名(变量名)直接用#号,而不是.号,包名与类名仍然用.号。
5、@throws 抛出异常
6、@exception 抛出异常
7、@param 方法参数说明 注:同一个方法多个参数说明必须放一起
8、@return 方法返回值说明
注意:@param、@return、@throws、@exception只能用于标记方法;同时生成的文档默认不含@author和@vertion属性,若有必要,需在javadoc语句汇总增加“- author -version”命令。
五、包注释。包注释不是直接放在java源码中的,但也要通过javadoc生成在API中,包文件通过标准的HTML文件提供,注释内容位于该文件中的<body>标签中,该文件需命名为package.html,并与该包下的所有源文件放在一起。
运行时用“javadoc <命令选项> 包文件名”即可。
六、其他
(一)注释内容可以使用HTML修饰符,但不要使用<h1>或<hr>等标题标签,否则会产生冲突,因为javadoc会产生自己的标题。
(二)类的文档注释需在import语句之后。
-
java 注释
2008-08-05 11:23:00J2SE5.0中提供的注释就是java源代码的元数据,也就是说注释是描述java源代码的。 在J2SE5.0中可以自定义注释。使用时在@后面跟注释的名字。 在J2SE5.0的java.lang包中预定义了三个注释。它们是Override、... -
JAVA 注释
2012-02-17 11:02:33Java注释中的@deprecated用于在用Javadoc工具生成文档的时候,标注此类/ 接口、方法、字段已经被废止。 不 过后者还有一个功能就是和源代码标记@Deprecated同样的功能,在JDK1.4 版本之后,该... -
Java(3)java注释分为:单行注释、多行注释、文档注释
2019-09-24 11:40:36java注释分为3种 单行注释 // 注释内容 多行注释 /* 注释内容 */ 文档注释 /** 注释内容 */ -
Eclipse Java注释模板
2015-08-06 17:47:10Eclipse Java注释模板。 类注释: /** * @ClassName * @Description * @author * @Date * @version */ 属性注释: /** * @Field @param */ 函数注释: /** * @Description * @param p1 * @param ... -
java注释方法
2019-05-19 18:41:15Java注释的好处:java注释可以帮助我们去理解代码,Javac不会去编译注释,Java运行也不会管我们的注释内容,合理运用注释可以让我们的代码更容易让编程人员理解。 Java的注释有以下几种: 1.单行注释:// 单行注释... -
Java注释说明
2019-05-22 22:45:31**Java注释一共有三种 1.单行注释 // 例:System.out.println(“Hello!”); //输出Hello! 单行注释不能换行 2.多行注释 /*这是多行注释 的示例/ 3.文档注释 /**开始 */结束 /**这是文档注释 的示例/ 只有文档注释在...