注释
在Java程序的编写过程中我们需要对一些程序进行注释,或者对一些代码进行解释,这样除了方便自己阅读以外,还能让别人更容易理解自己写的程序,所以我们需要用到注释。可以将注释理解为程序的一部分,但是Java编译器是不会对注释进行编译的。注释的作用就相当于将注释掉的代码或者解释隐藏了起来,Java编译器是看不到的。总而言之,注释的使用就是方便自己或者他人能更好的阅读。
Java语言的注释主要有以下三种:
单行注释
多行注释
文档注释
单行注释:
单行注释的起源也来自C++,是以一个“//”标记在某一行的开始,表示这一行代码或者解释的内容都是注释。这种类型的注释在实际开发中经常会用到,因为它书写时更方便。没有必要在键盘上先寻找“/”再寻找“*”,只需要连续按两次“/”就可以了,而且不必在注释的结尾再加一个结束标记。
以下便是单行注释的例子:
1 public class NotesDemo{ 2 //我是单行注释 3 }
多行注释:
多行注释顾名思义就是能对多行代码或者解释的内容注释。可能有人会想到,用单行注释不是也可以实现多行吗。没错,单行注释也可以实现多行注释,但是不是很方便,用单行注释来注释多行内容会很麻烦,你需要对你要注释的代码或解释的每行前面都要加上“//”,这实在是一件麻烦事,所以就有了多行注释,理由就是更加方便与简单。多行注释与单行注释的格式不同,多行注释要先在你需要注释的代码或解释的开始加上“/*”,在整体内容的末尾加上“*/”(注意:末尾的“*”与“/”的顺序与开始的顺序是相反的,在使用的时候千万不能写错了)。
以下便是多行注释的例子:
1 public class NotesDemo{ 2 /*你好啊 3 我是一个 4 多行注释*/ 5 }
文档注释:
Java文档注释是一种功能强大的注释形式,如果在你所编写的程序中规范的添加文档注释,那么你就可以根据这些文档注释来生成一份系统正规的API文档。Java文档注释的格式与多行注释比较相似,末尾都是“*/”,但是开始是“/**”而不是“/*”,注意区分多行注释与文档注释的区别。
Java使用javadoc工具来提取文档注释,生成十分专业的程序文档(API)。javadoc输出的是一个HTML文件,可以使用自己的Web浏览器来查看该文档。由于有了javadoc,所以我们能用标准的方法快速创建一份API。而且由于它非常方便,所以我们能轻松获得所有Java类库的文档。
API就是一份文档,与咱们平时使用的Word,WPS的文档一样。但是API是在Web浏览器打开浏览的。API的使用能更加容易让自己或者他人了解代码的结构与原理,而且在API中还能查看自己需要的类或接口与方法。
以下便是文档注释的例子:
1 public class NotesDemo{ 2 /** 3 *@author 开心小将 4 * 5 */ 6 }
javadoc工具识别以下标签:
标签 | 描述 | 示列 |
@author | 标识一个类的作者 | @author description |
@deprecated | 指名一个过期的类或成员 | @deprecated description |
{@docRoot | 指明当前文档根目录的路径 | Directory Path |
@exception | 标志一个类抛出的异常 | @exception exception-name explanation |
{@inheritDoc} | 从直接父类继承的注释 | Inherits a comment from the immediate surperclass. |
{@link} | 插入一个到另一个主题的链接 | {@link name text} |
{@linkplain} | 插入一个到另一个主题的链接,但是该链接显示纯文本字体 | Inserts an in-line link to another topic. |
@param | 说明一个方法的参数 | @param parameter-name explanation |
@return | 说明返回值类型 | @return explanation |
@see | 指定一个到另一个主题的链接 | @see anchor |
@serial | 说明一个序列化属性 | @serial description |
@serialData | 说明通过writeObject( ) 和 writeExternal( )方法写的数据 | @serialData description |
@serialField | 说明一个ObjectStreamField组件 | @serialField name type description |
@since | 标记当引入一个特定的变化时 | @since release |
@throws | 和 @exception标签一样 | The @throws tag has the same meaning as the @exception tag |
{@value} | 显示常量的值,该常量必须是static属性 | Displays the value of a constant, which must be a static field |
@version | 指定类的版本 | @version info |
说明注释:
在开始的“/**”之后,第一行或几行是关于类、变量和方法的主要描述。
之后,你可以包含一个或者多个何种各样的“@”标签。每个“@”标签必须在一个新行的开始或者在一行的开始紧跟“*”。
多个相同类型的标签应该放在一组。例如:如果你有三个“@see”标签,可以将它们一个接一个的放在一起。
示列:
下面是一个使用说明注释的简单实例。注意每一个注释都在它描述的项目的前面。
1 import java.io.*; 2 3 /** 4 * 这个类演示了文档注释 5 * @author 开心小将 6 * @version 1.0 7 */ 8 public class SquareNum { 9 /** 10 * This method returns the square of num. 11 * This is a multiline description. You can use 12 * as many lines as you like. 13 * @param num The value to be squared. 14 * @return num squared. 15 */ 16 public double square(double num) { 17 return num * num; 18 } 19 /** 20 * This method inputs a number from the user. 21 * @return The value input as a double. 22 * @exception IOException On input error. 23 * @see IOException 24 */ 25 public double getNumber() throws IOException { 26 InputStreamReader isr = new InputStreamReader(System.in); 27 BufferedReader inData = new BufferedReader(isr); 28 String str; 29 str = inData.readLine(); 30 return (new Double(str)).doubleValue(); 31 } 32 /** 33 * This method demonstrates square(). 34 * @param args Unused. 35 * @return Nothing. 36 * @exception IOException On input error. 37 * @see IOException 38 */ 39 public static void main(String args[]) throws IOException 40 { 41 SquareNum ob = new SquareNum(); 42 double val; 43 System.out.println("Enter value to be squared: "); 44 val = ob.getNumber(); 45 val = ob.square(val); 46 System.out.println("Squared value is " + val); 47 } 48 }
在经过javadoc处理之后,SquareNum类的注释将在SquareNum.html中找到。
一般的我们使用Eclipse软件来帮助我们生成API,Eclipse软件是集成IDE开发环境的一个软件,一般我们在写Java程序的时候都会使用它。
分隔符
在Java中,有一类特殊的符号称为分隔符,包括空白分隔符和普通分隔符。
空白分隔符:
空白分隔符包括:空格、回车换行和制表符Tab键。空白分隔符的主要作用是分隔标识符,帮助Java编译器理解源程序,也更方便自己或他人阅读。(例如:int a;)如果标识符int和a之间没有空格,就变成了inta,编译器会认为这是用户自定义的标识符,阅读起来也很难理解。但实际上该语句的作用是定义一个int型的变量叫a。
普通分隔符:
普通分隔符具有明确的语法含义,有以下七种:
(1){}大括弧(花括号):用来定义块、类、方法以及局部范围,也用来包括自己初始化的数组的值。大括号必须成对出现,否则编译器会报错。
(2)[]中括弧(方括号):用来进行数组的声明,也用来撤销对数组的引用,一般的只要程序中出现中括弧就表示用到了数组。
(3)()小括弧(原括弧):用来在定义和调用方法时,用来容纳参数列表的。在控制语句或强制类型转换的表达式中用来表示执行或计算优先权。
(4);分号:用来表示一条语句的结束。语句必须以分号来结束该句话。即使一条语句跨行或者多行,如果不使用分号来结束则它仍是未结束的。一般在类声明,方法声明,循环语句,判断语句等的语句中不使用分号结尾(因为以上该语句都用到了大括弧,这是Java语法规定),在for循环语句中,用来将小括弧里的语句连接起来。
(5),逗号:用在声明变量中用于分隔变量列表中的各个变量。
(6):冒号:用来说明语句标号,switch-case-default语句中经常用到它,增强for循环中我们也用到它。
(7).圆点:用于类或对象和属性或者方法之间的分隔(也可以说是调用)。(例如:Person.eat();)这个语句表示一个Person类调用了一个eat方法。
以下便是普通分隔符与空白分隔符的例子:
1 package test; 2 3 import java.util.Scanner; 4 5 public class SeparatorDemo{ //这是大括弧分隔符的使用 6 public static void separator(){ //这是小括弧分隔符和大括弧分隔符的使用 7 int a = 1; //这是分号分隔符的使用 8 double money = 100.0; //这是分号分隔符的使用 9 int []array = new int[5]; //这是中括弧分隔符和分号分隔符的使用 10 System.out.println(a+","+money); //这是小括弧分隔符、逗号分隔符和分号分隔符的使用 11 } 12 public static void main(String[] args) { //这是大括弧分隔符、中括弧分隔符和小括弧分隔符的使用 13 switch(new Scanner(System.in).next()) { //这是圆点分隔符、小括弧分隔符和大括弧分隔符的使用 14 case "1": //这是冒号分隔符的使用 15 SeparatorDemo.separator(); //这是圆点分隔符和分号分隔符的使用 16 default : //这是冒号分隔符的使用 17 System.out.println("error"); //这是小括弧分隔符和分号分隔符的使用 18 } 19 20 } 21 22 }
标识符
在Java中,标识符的作用是赋予变量值、类或方法的名称的。程序通过这些名称来访问或修改某个数据的数值。
标识符命名规范:可以是数字、字母、下划线(_)或美元符号($)组成的,但是不能以数字开头。(注意:这里的字母并不仅仅局限于26个英文字母,而是包括任何一门语言中表示字母的任何Unicode字符(一种字符表),标识符的长度没有做明确规定)。
Java没有采用通常计算机系统采用的ASCII代码集,而是采用了更为国际化的Unicode字符集。在这种字符集中,每个字符占用两个字节(也就是16位)。这样,整个字符集中共包含65535个字符。后面21000个字符用来表示汉字、日文片假名、平假名和朝鲜文等。
但是Unicode字符只用在Java平台内部,当涉及到打印输出、屏幕显示、键盘输入等外部操作时,仍是由计算机的操作系统来决定字符的表示方法(也就是ASCII码)。例如:当输出打印英文字母时,输出的结果是用8位二进制表示的ASCII码所对应的值,而不是Unicode字符集对应的值。
在定义和使用标识符时需要注意:Java语言是大小写敏感的(例如:标识符'a'和'A'是完全两个不同的标识符)。
在定义标识符时,需要注意以下问题:
(1)Java标识符由:字母、数字、下划线或美元符号组成,其他符号一概不允许(例如:@符号、#符号)。
(2)Java标识符必须以:字母、下划线或美元标识符开头,不能以数字开头。
(3)Java标识符区分大小写(例如:'a'、'A'、'b'、'B'、是四个不同的标识符)。
(4)Java标识符不能含空格、不能是Java关键字。
(5)Java语言强调“见名知意”原则,标识符应具有一定的含义,以增加程序的可读性。
(注意:在编写Java程序时标识符是可以用中文汉字的,但是不建议使用汉字。因为在Java程序中使用中文很容易引起很多编码方面的问题。)
以下便是Java标识符的例子:
1 package test; 2 /** 3 * @author 开心小将 4 * 此案例主要介绍如何使用标识符 5 * 6 */ 7 public class IdentifierDemo{ 8 9 public static void main(String[] args) { 10 int a = 10; //声明一个标识符为a的int型变量 11 int b = 16; //声明一个标识符为b的int型变量 12 int c = 2019; //声明一个标识符为c的int型变量 13 //注意:以下标识符不合法: 14 //int @a; 我以@开头,我不合法 15 //int 1a; 我以数字开头,我不合法 16 //int public; 我是Java关键字,我不合法 17 //int a b; 我中间含有空格,我不合法 18 19 //以下标识符是符合Java规定的 20 int $a = 10; //我以$开头是合法的 21 int A = 16; //我是大写的A,和a是两个标识符 22 int variable = 2019;//我是自定义的标识符,不是Java关键字 23 24 //注意:以下标识符虽然合法,但是不建议使用 25 //原因:这样写标识符语义不明确,降低了程序的可读性,也违反了Java标识符的命名规则 26 int aaaaaaa = 10; 27 int abcdef = 16; 28 int a1b2c3 = 2019; 29 } 30 }
关键字
关键字(又叫做保留字)其实是电脑语言里事先定义的,意思是:有特别意义的标识符,还有特别意义的变量。
Java的关键字对Java的编辑器有特殊的意义,他们被用来表示:数据类型、或者程序结构等等。关键字不能被用作我们自己定义的:包名、类名、方法名、变量名和参数。
Java语言规定关键字不能被用作标识符。目前大约有50个Java关键字,其中,“const”和“goto”这两个关键字在Java语言中并没有具体的含义。而Java将它俩列为关键字是因为他俩是其他某些计算机语言的关键字(例如:C语言、C++语言)。
Java关键字都是小写格式的,比如:TRUE、FALSE等大写的都不是Java关键字,因为Java是大小写敏感的。
Java关键字的大致含义如下:
关键字 | 含义 |
abstract | 表明类或者成员方法具有抽象属性 |
assert | 用来进行程序调试 |
boolean | 基本数据类型之一,布尔类型 |
break | 提前跳出一个块 |
byte | 基本数据类型之一,字节类型 |
case | 用在switch语句之中,表示其中的一个分支 |
catch | 用在异常处理中,用来捕捉异常 |
char | 基本数据类型之一,字符类型 |
class | 类 |
const | 保留关键字,没有具体含义 |
continue | 回到一个块的开始处(一般用在循环中,跳出本次循环,开始下一次循环) |
default | 默认,例如,用在switch语句中,表明一个默认的分支 |
do | 用在do-while循环结构中 |
double | 基本数据类型之一,双精度浮点数类型 |
else | 用在条件语句中,表明当条件不成立时的分支 |
enum | 枚举 |
extends | 表明一个类型是另一个类型的子类型,这里常见的类型有类和接口 |
final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,一般用来定义常量 |
finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
float | 基本数据类型之一,单精度浮点数类型 |
for | 一种循环结构的引导词 |
goto | 保留关键字,没有具体含义 |
if | 条件语句的引导词 |
implements | 表明一个类实现了给定的接口 |
import | 表明要访问指定的类或包 |
instanceof | 用来测试一个对象是否是指定类型的实例对象 |
int | 基本数据类型之一,整数类型 |
interface | 接口 |
long | 基本数据类型之一,长整数类型 |
native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
new | 用来创建新实例对象 |
package | 包 |
private | 一种访问控制方式:私用模式 |
protected | 一种访问控制方式:保护模式 |
public | 一种访问控制方式:共用模式 |
return | 从成员方法中返回数据 |
short | 基本数据类型之一,短整数类型 |
static | 表明具有静态属性 |
strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范 |
super | 表明当前对象的父类型的引用或者父类型的构造方法 |
switch | 分支语句结构的引导词 |
synchronized | 表明一段代码需要同步执行 |
this | 指向当前实例对象的引用 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
transient | 声明不用序列化的成员域 |
try | 尝试一个可能抛出异常的程序块 |
void | 声明当前成员方法没有返回值 |
volatile | 表明两个或者多个变量必须同步地发生变化 |
while | 用在循环结构中 |
null | 一个空引用(注意:null从技术上讲是一个直接量,而不是关键字,但是不推荐用作标识符) |
除了null以外,true(表示正确)和false(表示错误)也不推荐使用标识符,虽然这三者不是关键字,但是这三者表示直接的值,影响程序的可读性。