前言
本章介绍Java的文档注释和Java 8 新特性。
Java 文档注释
Java 支持三种注释方式。前两种分别是 // 和 /* /,第三种被称作说明注释,它以 /* 开始,以 */结束。
说明注释允许你在程序中嵌入关于程序的信息。你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中。
说明注释,使你更加方便的记录你的程序信息。
javadoc 标签
javadoc 工具软件识别以下标签:
标签 | 描述 | 示例 |
---|---|---|
@author | 标识一个类的作者 | @author描述 |
@deprecated | 指名一个过期的类或成员 | @deprecated描述 |
{@docRoot} | 指明当前文档根目录的路径 | 目录路径 |
@exception | 标志一个类抛出的异常 | @exception异常名称说明 |
{@inheritDoc} | 从直接父类继承的注释 | 从直接超类继承注释。 |
{@link} | 插入一个到另一个主题的链接 | {@link名称文本} |
{@linkplain} | 插入一个到另一个主题的链接,但是该链接显示纯文本字体 | 插入指向另一个主题的内联链接。 |
@param | 说明一个方法的参数 | @param参数名称说明 |
@return | 说明返回值类型 | @return解释 |
@see | 指定一个到另一个主题的链接 | @see锚 |
@serial | 说明一个序列化属性 | @serial描述 |
@serialData | 说明通过writeObject( ) 和 writeExternal( )方法写的数据 | @serialData描述 |
@serialField | 说明一个ObjectStreamField组件 | @serialField名称类型说明 |
@since | 标记当引入一个特定的变化时 | @since发布 |
@throws | 和 @exception标签一样. | @throws 标记与@exception标记的含义相同。 |
{@value} | 显示常量的值,该常量必须是静态属性。 | 显示常量的值,该常量必须是静态字段。 |
@version | 指定类的版本 | @version信息 |
文档注释
在开始的 /** 之后,第一行或几行是关于类、变量和方法的主要描述。
之后,你可以包含一个或多个各种各样的 @ 标签。每一个 @ 标签必须在一个新行的开始或者在一行的开始紧跟星号(*).
多个相同类型的标签应该放成一组。例如,如果你有三个 @see 标签,可以将它们一个接一个的放在一起。
下面是一个类的说明注释的实例:
/*** 这个类绘制一个条形图
* @author 鲁努布
* @version 1.2 */
javadoc 输出什么
javadoc 工具将你 Java 程序的源代码作为输入,输出一些包含你程序注释的HTML文件。
每一个类的信息将在独自的HTML文件里。javadoc 也可以输出继承的树形结构和索引。
由于 javadoc 的实现不同,工作也可能不同,你需要检查你的 Java 开发系统的版本等细节,选择合适的 Javadoc 版本。
实例
下面是一个使用说明注释的简单实例。注意每一个注释都在它描述的项目的前面。
在经过 javadoc 处理之后,SquareNum 类的注释将在 SquareNum.html 中找到。
SquareNum.java 文件代码:
导入 Java。io.*;/**
* 这个类演示了文档注释
* @author 阿扬·阿姆赫德
* @version 1.2 */ 公共类 SquareNum { /**
* 此方法返回数字的平方。
* 这是一个多行描述。您可以使用
*任意数量的行。
* @param num 要平方的值。
* @return 平方米。 */ 公共双平方(双 数字) { 返回数字 * 数字; } /**
* 此方法输入来自用户的号码。
* @return 值输入为双精度。
* @exception IOException 输入错误。
* @see IOException */ public double getNumber() 抛出 IOException { InputStreamReader isr = new InputStreamReader(系统。在); BufferedReader inData = new BufferedReader(isr);字符串 str; str = inData。readLine(); 返回(新的双倍(str))。双值(); } /**
* 此方法演示了 square()。
* @param参数未使用。
* @return什么都没有。
* @exception IOException 输入错误。
* @see IOException */ public static void main(String args[]) 抛出 IOException { SquareNum ob = new SquareNum(); 双值; 系统。输出.</B1178>);
}
}
如下,使用 javadoc 工具处理 SquareNum.java 文件:
$ javadoc SquareNum.java
Loading source file SquareNum.java...
Constructing Javadoc information...
Standard Doclet version 1.5.0_13
Building tree for all the packages and classes...
Generating SquareNum.html...
SquareNum.java:39: warning - @return tag cannot be used\
in method with void return type.
Generating package-frame.html...
Generating package-summary.html...
Generating package-tree.html...
Generating constant-values.html...
Building index for all the packages and classes...
Generating overview-tree.html...
Generating index-all.html...
Generating deprecated-list.html...
Building index for all classes...
Generating allclasses-frame.html...
Generating allclasses-noframe.html...
Generating index.html...
Generating help-doc.html...
Generating stylesheet.css...
1 warning
$
Java 8 新特性
Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的 Stream API 等。
新特性
Java8 新增了非常多的特性,我们主要讨论以下几个:
- Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
- 方法引用 −方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
- 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
- 新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
- Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
- Date Time API − 加强对日期与时间的处理。
- Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
- Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。
在关于 Java 8 文章的实例,我们均使用 jdk 1.8 环境,你可以使用以下命令查看当前 jdk 的版本:
$ java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
编程风格
Java 8 希望有自己的编程风格,并与 Java 7 区别开,以下实例展示了 Java 7 和 Java 8 的编程格式:
Java8Tester.java 文件代码:
导入 Java。实用。收藏;导入 Java。实用。列表;导入 Java。实用。数组列表;导入 Java。实用。比较器; public class Java8Tester { public static void main(String args[]){ List<String> names1 = new ArrayList<String>(); 名称1.add(“谷歌”); 名称1.add(“csdn ”); 名称1.添加(“淘宝”); 名称1.添加(“百度”); 名称1.add(“新浪”); List<String> names2 = new ArrayList<String>(); 名称2.add(“谷歌”); 名称2.add(“csdn ”); 名称2.添加(“淘宝”); 名称2.添加(“百度”); 名称2.add(“新浪”); Java8Tester tester = new Java8Tester(); 系统。出。println(“使用 Java 7 语法: ”); 测试人员。sortUsingJava7(names1); 系统.出。println(names1); 系统。出。println(“使用 Java 8 语法: ”); 测试人员。sortUsingJava8(names2); 系统。出。println(names2); } // 使用 java 7 排序 private void sortUsingJava7(List<String> names){ Collections.sort(names, new Comparator<String>() { @Override public int compare(String s1, 字符串 s2) { 返回 s1.比较到(s2); } }); } // 使用 java 8 排序 private void sortUsingJava8(List<String> names){ Collections.sort(names, (s1, s2) -> s1.比较到(s2));
}
}
执行以上脚本,输出结果为:
$ javac Java8Tester.java
$ java Java8Tester
使用 Java 7 语法:
[Baidu , Google , csdn , Sina , Taobao ]
使用 Java 8 语法:
[Baidu , Google , csdn , Sina , Taobao ]
接下来我们将详细为大家简介 Java 8 的新特性:
序号 | 特性 |
---|---|
1 | Lambda 表达式 |
2 | 方法引用 |
3 | 函数式接口 |
4 | 默认方法 |
5 | 流 |
6 | 可选类 |
7 | Nashorn, JavaScript 引擎 |
8 | 新的日期时间 API |
9 | 基地64 |