第2章 标识符 关键字 数据类型
2107
2012-6-20

第二章 Java中关键字和数据类型

一、Java中的标识符、关键字

标识符

1、标识符的定义

用来标识类名,变量名,方法名,类型名,数组名,文件名的有效序列称为标识符。简单地说,标识符就是一个名字。

Java语言规定标识符由字母,下划线,美元符号和数字组成,并且第一个字符不能是数字字符。

2、标识符的命名规则:

(1.) 大小写有别,例如 a 和 A是两个变量,Boy和boy是不同的标识符

(2.). 长度任意

(3.)  可以任何字母开始,另外还可以以"_"和"$"开始,一般"$"是很多代码生成器用的,人工写出来的代码不鼓励"_" "$"

(4.). 除了第一个字符,后面可以跟任何字母,数字,_和$

3、标识符的约定

包名的约定:Java包的名字都是由小写单词组成。但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。

类的命名

  类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,还有一点命名技巧就是由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。  
  例如: Circle

方法的命名

  方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。
  例如: sendMessge

常量的命名

  常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。
  例如: MAX_VALUE

参数的命名

  参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。

Javadoc注释

  Java除了可以采用我们常见的注释方式之外,Java语言规范还定义了一种特殊的注释,也就是我们所说的Javadoc注释,它是用来记录我们代码中的API的。Javadoc注释是一种多行注释,以结束,注释可以包含一些HTML标记符和专门的关键词。使用Javadoc注释的好处是编写的注释可以被自动转为在线文档,省去了单独编写程序文档的麻烦。
  例如:


  在每个程序的最开始部分,一般都用Javadoc注释对程序的总体描述以及版权信息,之后在主程序中可以为每个类、接口、方法、字段添加Javadoc注释,每个注释的开头部分先用一句话概括该类、接口、方法、字段所完成的功能,这句话应单独占据一行以突出其概括作用,在这句话后面可以跟随更加详细的描述段落。在描述性段落之后还可以跟随一些以Javadoc注释标签开头的特殊段落,例如上面例子中的@auther和@version,这些段落将在生成文档中以特定方式显示。
  虽然为一个设计低劣的程序添加注释不会使其变成好的程序,但是如果按照编程规范编写程序并且为程序添加良好的注释却可以帮助你编写出设计完美,运行效率高且易于理解的程序,尤其是在多人合作完成同一项目时编程规范就变得更加重要。俗话说“磨刀不误砍柴工”,花费一点时间去适应一下Java编程规范是有好处的。

二、关键字

  1. 关键字就是Java语言中已经被赋予特定意义的一单词。不可以把这类记作为名字来用。Java的关键字有:
  2. Java 关键字 速查表 (以下关键字不允许作为名字使用)
    访问控制:
    private 私有的
    protected 受保护的
    public 公共的
    类、方法和变量修饰符
    abstract 声明抽象
    class 类
    extends 扩允,继承
    final 终极,不可改变的
    implements实现
    interface 接口
    native 本地
    new 新,创建
    static 静态
    strictfp 严格,精准
    synchronized 线程,同步
    transient 短暂
    volatile 易失
    程序控制语句
    break 跳出循环
    continue 继续
    return 返回
    do 运行
    while 循环
    if 如果
    else 反之
    for 循环
    instanceof 实例
    switch 开关
    case 返回开关里的结果
    default 默认
    错误处理
    catch 处理异常
    finally 有没有异常都执行
    throw 抛出一个异常对象
    throws 声明一个异常可能被抛出
    try 捕获异常
    包相关
    import 引入
    package 包
    基本类型
    boolean 布尔型
    byte 字节型
    char 字符型
    double 双精度,
    float 浮点
    int 整型
    long 长整型
    short 短整型
    null 空
    true 真
    false 假
    变量引用
    super 父类,超类
    this 本类
    void 无返回值

    另外,java保留字goto和const
    friendly sizeof不是java的关键字!
     

 三、变量

变量是Java 程序的一个基本存储单元。变量由一个标识符,类型及一个可选初始值的组合定义。此外,所有的变量都有一个作用域,定义变量的可见性,生存期。接下来讨论变量的这些元素。
3.1 声明一个变量
在Java 中,所有的变量必须先声明再使用。基本的变量声明方法如下:type identifier [ = value][,identifier [= value] ...] ; 
type 是Java 的基本类型之一,或类及接口类型的名字(类和接口类型在本书第1部分的后部讨论)。标识符(identifier )是变量的名字,指定一个等号和一个值来初始化变量。请记住初始化表达式必须产生与指定的变量类型一样(或兼容)的变量。声明指定类型的多个变量时,使用逗号将各变量分开。
以下是几个各种变量声明的例子。注意有一些包括了初始化。
int a, b, c; // declares three ints, a, b, and c.int d = 3, e, f = 5; // declares three more ints, initializing // d and f.byte z = 22; // initializes z.
double pi = 3.14159; // declares an approximation of pi.char x = ’x’; // the variable x has the value ’x’. 
你选择的标识符名称没有任何表明它们类型的东西。许多读者记得FORTRAN 预先规定从I到N的所有标识符都为整型,其他的标识符为实型。Java 允许任何合法的标识符具有任何它们声明的类型。
3.2 动态初始化
尽管前面的例子仅将字面量作为其初始值,Java 也允许在变量声明时使用任何有效的表达式来动态地初始化变量。
例如,下面的短程序在给定直角三角形两个直角边长度的情况下,求其斜边长度。
// Demonstrate dynamic initialization.
class DynInit {
public static void main(String args[]) {
double a = 3.0, b = 4.0; 

// c is dynamically initialized
double c = Math.sqrt(a * a + b * b); 
System.out.println("Hypotenuse is " + c);
}
}

这里,定义了3个局部变量a,b,c。前两个变量a和b初始化为常量。然而直角三角形的斜边c被动态地初始化(使用勾股定理)。该程序用了Java 另外一个内置的方法sqrt(),它是Math类的一个成员,计算它的参数的平方根。这里关键的一点是初始化表达式可以使用任何有效的元素,包括方法调用、其他变量或字面量。
3.3 变量的作用域和生存期
到目前为止,我们使用的所有变量都是在方法main() 的后面被声明。然而,Java 允许变量在任何程序块内被声明。在第2章中已解释过了,程序块被包括在一对大括号中。一个程序块定义了一个作用域(scope )。这样,你每次开始一个新块,你就创建了一个新的作用域。你可能从先前的编程经验知道,一个作用域决定了哪些对象对程序的其他部分是可见的,它也决定了这些对象的生存期。
大多数其他计算机语言定义了两大类作用域:全局和局部。然而,这些传统型的作用域不适合Java 的严格的面向对象的模型。当然将一个变量定义为全局变量是可行的,但这是例外而不是规则。在Java 中2个主要的作用域是通过类和方法定义的。尽管类的作用域和方法的作用域的区别有点人为划定。因为类的作用域有若干独特的特点和属性,而且这些特点和属性不能应用到方法定义的作用域,这些差别还是很有意义的。因为有差别,类(以及在其内定义的变量)的作用域将被推迟到第6章当讨论类时再来讨论。到现在为止,我们将仅仅考虑由方法或在一个方法内定义的作用域。
方法定义的作用域以它的左大括号开始。但是,如果该方法有参数,那么它们也被包括在该方法的作用域中。本书在第5章将进一步讨论参数,因此,现在可认为它们与方法中其他变量的作用域一样。
作为一个通用规则,在一个作用域中定义的变量对于该作用域外的程序是不可见(即访问)的。因此,当你在一个作用域中定义一个变量时,你就将该变量局部化并且保护它不被非授权访问和/或修改。实际上,作用域规则为封装提供了基础。
作用域可以进行嵌套。例如每次当你创建一个程序块,你就创建了一个新的嵌套的作用域。这样,外面的作用域包含内部的作用域。这意味着外部作用域定义的对象对于内部作用域中的程序是可见的。但是,反过来就是错误的。内部作用域定义的对象对于外部是不可见的。
为理解嵌套作用域的效果,考虑下面的程序:
// Demonstrate block scope.
class Scope {
public static void main(String args[]) {
int x; // known to all code within main 
x = 10; 
if(x == 10) { // start new scope

int y = 20; // known only to this block 

// x and y both known here.
System.out.println("x and y: " + x + " " + y);
x = y * 2;
}
// y = 100; // Error! y not known here 

// x is still known here.
System.out.println("x is " + x);
}
}

正如注释中说明的那样,在方法main() 的开始定义了变量x,因此它对于main() 中的所有的随后的代码都是可见的。在if程序块中定义了变量y。因为一个块定义一个作用域,y 仅仅对在它的块以内的其他代码可见。这就是在它的块之外的程序行y=100; 被注释掉的原因。如果你将该行前面的注释符号去掉,编译程序时就会出现错误,因为变量y在它的程序块之外是不可见的。在if程序块中可以使用变量x,因为块(即一个嵌套作用域)中的程序可以访问被其包围作用域中定义的变量。
变量可以在程序块内的任何地方被声明,但是只有在他们被声明以后才是合法有效的。因此,如果你在一个方法的开始定义了一个变量,那么它对于在该方法以内的所有程序都是可用的。反之,如果你在一个程序块的末尾声明了一个变量,它就没有任何用处,因为没有程序会访问它。例如,下面这个程序段就是无效的,因为变量count 在它被定义以前是不能被使用的。
// This fragment is wrong!
count = 100; // oops! cannot use count before it is declared!
int count;

另一个需要记住的重要之处是:变量在其作用域内被创建,离开其作用域时被撤消。
这意味着一个变量一旦离开它的作用域,将不再保存它的值了。因此,在一个方法内定义的变量在几次调用该方法之间将不再保存它们的值。同样,在块内定义的变量在离开该块时也将丢弃它的值。因此,一个变量的生存期就被限定在它的作用域中。
如果一个声明定义包括一个初始化,那么每次进入声明它的程序块时,该变量都要被重新初始化。例如,考虑这个程序:
// Demonstrate lifetime of a variable.
class LifeTime {
public static void main(String args[]) {
int x; 

for(x = 0; x < 3; x++) {
int y = -1; // y is initialized each time block is enteredSystem.out.println("y is: " + y); // this always prints -1y = 100;System.out.println("y is now: " + y);
}
}
}
该程序运行的输出如下:
y is: -1
y is now: 100
y is: -1
y is now: 100
y is: -1
y is now: 100 

可以看到,每次进入内部的for循环,y都要被重新初始化为-1。即使它随后被赋值为100,该值还是被丢弃了。
最后一点:尽管程序块能被嵌套,你不能将内部作用域声明的变量与其外部作用域声明的变量重名。在这一点上,Java 不同于C和C++。下面的例子企图为两个独立的变量起同样的名字。在Java 中,这是不合法的。但在C/C++ 中,它将是合法的,而且2个变量bar将是独立的。
// This program will not compile
class ScopeErr {

public static void main(String args[]) {
int bar = 1; 
{ // creates a new scope

int bar = 2; // Compile-time error – bar already defined!
}
}
}

四、数据的分类

变量存储数据是有类别之分的,就如同房间分单人间和多人间,语言分汉语、日语、英语等。Java数据的分类如图3.2所示。

图  数据的分类

数据类型主要分为基本数据类型和引用数据类型两大类。基本数据类型根据数据的不同又分为数值型和非数值型,数值型又有整型和浮点型之分,整型数据主要有byte、short、int、long,浮点型数据主要有float、double,非数值型数据主要有char和boolean。引用数据类型主要有类、接口和数组。

4.1  Java中的8种基本数据类型

Java中主要有8种基本数据类型,分别是byte、short、int、long、char、boolean、float、double,具体的介绍如下。

1. boolean

boolean(布尔)型数据的数据值只有true和false两种。boolean类型数据适用于逻辑运算,一般用于程序流程控制,boolean类型数据只允许取值true或false,不可以用0或非0的整数替代true和false。

2. char

char型(字符型)数据在内存中占用2个字节。char型数据用来表示通常意义上的字符,例如,“char c = 'A';”。Java字符采用Unicode编码,每个字符占2个字节,因而可用十六进制编码形式表示,例如,“char c1 = '\u0061';”。Java语言中还允许使用转义字符'\'来将其后的字符转变为其他的含义,例如,“char c2 = '\n';”。

3. byte

byte型(字节型)数据在内存中占用1个字节,表示的存储数据范围为:-128~127。

4. short

short型(短整型)数据在内存中占用2个字节,表示的存储数据范围为:-32 768~32 767。

5. int

int型(整型)数据在内存中占用4个字节,表示的存储数据范围为-231~231-1。

6. long

long型(长整型)数据在内存中占用8个字节,表示的存储数据范围为-263~263-1。

7. float

float型(单精度浮点型)数据在内存中占用4个字节,表示的存储范围为-3.4E38~3.4E38。

8. double

double型(双精度浮点型)数据在内存中占用8个字节,表示的存储范围为-1.7E308~1.7E308。

Java浮点类型常量有如下两种表示形式。

l   十进制数形式,必须含有小数点,例如,3.14、314.0、0.314等。

l   科学记数法形式,例如,3.14e2、3.14E2、314E2等。

Java中所有的基本数据类型都有固定的存储范围和所占内存空间的大小,而不受具体操作系统的影响,以保证Java程序的可移植性。整型数据默认为int数据类型,浮点型默认为double数据类型,如果要表示long型数据或float型数据就要在相应的数值后面加上l、L或f、F,所以定义一个长整型数据应这样写:“long a=19999999999999L;”,定义一个float型数据应这样写:“float b=3.324f;”,否则会出现编译问题。实际上在其他语言中如C语言中,字符型数据和整型数据是可以相互转换的,都是以ASCII码来存储,可以将字符型数据当整型数据来看待。

Java中常用的转义字符如表3.1所示。

表3.1  Java中常用的转义字符

转义字符

说  明

                       \b

               退格符

                       \n

               换行符

                       \r

               回车符

                       \t

               制表符

                       \’

               单引号

                       \’’

               双引号

                       \\

               反斜杠

 

ASCII(美国标准信息交换码)是计算机中用得最广泛的字符集及其编码,由美国国家标准局(ANSI)制定。ASCII已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。ASCII码适用于所有拉丁文字母,它有7位码和8位码两种形式。因为1位二进制数可以表示2(21)种状态:0、1;而2位二进制数可以表示4(22)种状态:00、01、10、11;以此类推,7位二进制数可以表示128(27)种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。所以,7位ASCII码是用7位二进制数进行编码的,可以表示128个字符。第0~32号及第127号(共34个)是控制字符或通信专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等。第33~126号(共94个)是字符,其中第48~57号为0~9共10个阿拉伯数字;65~90号为26个大写英文字母;97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

4.2  普及二进制

1. 二进制

计算机中的数据都以二进制数字保存的。二进制计算规则是:逢二进一。即只有0、1两个值。例如,十进制的10在计算机内保存为二进制的1010。

计算机中信息的存储单位有如下几种。

l   位(bit):表示一个二进制数码0或1,是计算机存储处理信息的最基本的单位。

l   字节(Byte):一个字节由8个位组成。它表示作为一个完整处理单位的8个二进制数码。

2. 十六进制和八进制

十六进制:因为二进制表示法太冗长,所以在程序中一般喜欢用十六进制。基数为十六,逢十六进一。它用a、b、c、d、e、f表示10、11、12、13、14、15。Java中十六进制数据要以0x或0X开头。例如,0x23D十六进制转换成二进制只需将每个十六进制数字替换为相对应的4个二进制位即可。

八进制:0~7,八进制表示法在早期的计算机系统中很常见。八进制适用于位数为3的倍数的计算机系统,对于现在的位数为2的幂(8位、16位、32位与64位)的计算机系统来说,八进制就不好用了。

3. 补码知识

事实上,计算机内的二进制数值是以补码形式表示的。一个正数的补码和其原码的形式是相同的。负数的补码是将该数的绝对值的二进制形式,按位取反再加1。由此可知,二进制补码数值的最高位(最左位)是符号位:该位为0,表示数值为正数;该位为1,表示数值为负数。例如: 

    10的补码

00000000  00000000  00000000  00001010

   -10的补码

11111111  11111111  11111111  11110110

 

4.3  进制间的转换

由于计算机中都是以二进制形式来存储数据的,那么进制间是如何相互转换的呢?进制的转换可以归为以下三类。

1. 各种进制转为十进制

其他进制数转换为十进制数的方法为:从右到左为这个数从0开始一位一位地标号,各个位上面的数乘以此进制数的标号次幂再求和,也就是“位权表示法”。如:

(123.12)10=1´102+2´101+3´100+1´10-1+2´10-2

(101.10)2=1´22+0´21+1´20+1´2-1+0´2-2

(123.12)8=1´82+2´81+3´80+1´8-1+2´8-2

(12A.C)16=1´162+2´161+10´160+12´16-1

2. 十进制转为各种进制

十进制数转为其他进制数的方法是:除以此进制数取余倒排序。以十转二为例方法为:整数部分除2反序取余数、小数部分乘2顺序取整数。十进制转为其他进制的方法以此类推,例如,除8反序取余法、乘8顺序取整法,除16反序取余法、乘16顺序取整法。如:(13.3125)10=(1101.0101)2,其示意如下。

3. 其他进制之间的转换

二进制转八进制、八进制转二进制、二进制转十六进制、十六进制转二进制,一般采用“分段法”来完成转换,下面以二进制和八进制之间的互转为例进行介绍。

二进制转成八进制:以小数点为界,将二进制数整数部分从低位开始,小数部分从高位开始,每3位一组,头尾不足3位的补0,然后将各组的3位二进制数分别转换为相应的八进制数,顺序排列。如:

(11111110)2=(376)8

八进制转成二进制:将八进制数的每一位分别转换为3位二进制数并顺序排列。“二、十六互转”与“二、八互转”不同的地方就是“每四位构成一组”。如:

(1101010110011.1111)2=(15263.74)8

(376)8 = (11111110)2

上述转换示意如下。

即(1101010110011.1111)2=(15263.74)8

4.4  基本数据类型间的转换

首先boolean类型不能转换成任何其他数据类型。

其他数据类型间的相互转换有以下两大类。

1. 自动类型转换

容量小的数据类型可以自动转换成容量大的数据类型,如:byte→short→int→long→float→double。

byte、short、int不会互相转换,它们三者在计算时会转换成int类型,如:

int a=6;

double b=a;

2. 强制类型转换

容量大的数据类型转换成容量小的数据类型时,要加上强制转换符,如:

long l = 100L;

int i = (int)l;

这样有可能造成精度降低或数据溢出,使用时要小心。

所谓的精度降低或溢出,即小数位丢掉,一般是不会出现大问题的。如果是在金融行业,这样的数据就需要特别注意,好在后面的学习过程中,Java语言为这些大数据专门提供了一些处理的类。

4.5  数据类型的应用实例

编写一个程序Hello2.java,输出Java课程考试最高分:98.5,输出最高分学员姓名:张三,输出最高分学员性别:男。

DataTypeDemo.java的代码如下:

public class DataTypeDemo{

  public static void main(String[ ] args) {

       double score = 98.5;   

       String name = "张三";   //字符串用英文双引号引起来

       char sex = '男';        // 字符用英文单引号引起来

       System.out.println("本次考试成绩最高分: " + score);

       System.out.println("本次考试成绩最高分学员姓名为: " + name);

       System.out.println("本次考试成绩最高分学员性别为: " + sex);

       //两字符串连接用"+"号

  }

}

输出结果为:

本次考试成绩最高分: 98.5

本次考试成绩最高分学员姓名为: 张三

本次考试成绩最高分学员性别为: 男

通过变量可以存储不同类型的数据,字符串连接用“+”运算符。

4.6  引用数据类型

字符型只能表示一个字符,多个字符如何表示呢?字符串型数据用于存储一串字符,表示方式是用双引号把相关的字符串引起来即可,字符数量是不受限至的。如:String a=“CSDN乐知学堂”,在本书后面的章节中将重点讲解字符串的各个应用。引用数据类型还有数组和接口,将在本书后面的章节中重点介绍,在此不多阐述。

五、  常量

1. 什么是常量

常量是指程序中持续不变的值,它是值不能改变的数据,如整型常量123。

Java语言常量表示形式如下。

  十进制整数:如12、-314、0。

八进制整数:要求以0开头,如0123表示八进制的123。

十六进制数:要求以0x或0X开头,如0x123。

浮点数(实型)常量:如3.14。

字符常量:如‘a’、‘\t’、‘\u0027’。

布尔(逻辑)常量:true、false。

字符串常量:如“a”、“hello world”。

null常量:表示对象的引用为空,不能作为基本数据类型的值使用。

2. 怎么使用常量

常量是装到变量存储空间中的数据,如:

public static final int PI=3.14;

3. 常量的书写规则

Java中的常量一般采用大写字母单词命名,单词与单词之间用下划线(_)加以分割,这也符合ANSI的常量命名规则。如:

static final int MIN_AGE = 100;

static final String MAX_PAGE = 1000;

关键字static是指变量类实例共享此变量;final是指这个变量一旦被初始化便不可改变。它们的用法在后面的章节中会详细讲述。

六、命名规则

包的命名 

  Java包的名字都是由小写单词组成。但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。
  例如: net.frontfree.javagroup

    包划分及命名规则:

        com.mycompany.util
        com.mycompany.myproject
        com.mycompany.myproject.util
        com.mycompany.myproject.model
        com.mycompany.myproject.dao
        com.mycompany.myproject.dao.ejb

        com.mycompany.myproject.dao.hibernate
        com.mycompany.myproject.service
        com.mycompany.myproject.service.impl
        com.mycompany.myproject.webapp.action
        com.mycompany.myproject.webapp.filter
        com.mycompany.myproject.webapp.listener
        com.mycompany.myproject.webapp.taglib

类的命名

  类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,还有一点命名技巧就是由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。  
  例如: Circle

方法的命名

  方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。
  例如: sendMessge

常量的命名

  常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。
  例如: MAX_VALUE

参数的命名

  参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。

Javadoc注释

  Java除了可以采用我们常见的注释方式之外,Java语言规范还定义了一种特殊的注释,也就是我们所说的Javadoc注释,它是用来记录我们代码中的API的。Javadoc注释是一种多行注释,以结束,注释可以包含一些HTML标记符和专门的关键词。使用Javadoc注释的好处是编写的注释可以被自动转为在线文档,省去了单独编写程序文档的麻烦。
  例如:

Java命名规则

在每个程序的最开始部分,一般都用Javadoc注释对程序的总体描述以及版权信息,之后在主程序中可以为每个类、接口、方法、字段添加Javadoc注释,每个注释的开头部分先用一句话概括该类、接口、方法、字段所完成的功能,这句话应单独占据一行以突出其概括作用,在这句话后面可以跟随更加详细的描述段落。在描述性段落之后还可以跟随一些以Javadoc注释标签开头的特殊段落,例如上面例子中的@auther和@version,这些段落将在生成文档中以特定方式显示。
  虽然为一个设计低劣的程序添加注释不会使其变成好的程序,但是如果按照编程规范编写程序并且为程序添加良好的注释却可以帮助你编写出设计完美,运行效率高且易于理解的程序,尤其是在多人合作完成同一项目时编程规范就变得更加重要。俗话说“磨刀不误砍柴工”,花费一点时间去适应一下Java编程规范是有好处的。

 

七、JAVA注释方法及格式
1、单行(single-line)--短注释://……   
单独行注释:在代码中单起一行注释,注释前最好有一行空行,并与其后的代码具有一样的缩进层级。如果单行无法完成,则应采用块注释。
注释格式:

行头注释:在代码行的开头进行注释。主要为了使该行代码失去意义。
注释格式:// 注释内容
  
行尾注释:尾端(trailing)--极短的注释,在代码行的行尾进行注释。一般与代码行后空8(至少4)个格,所有注释必须对齐。
注释格式:代码 + 8(至少4)个空格 + // 注释内容
2、块(block)--块注释:
注释若干行,通常用于提供文件、方法、数据结构等的意义与用途的说明,或者算法的描述。一般位于一个文件或者一个方法的前面,起到引导的作用,也可以根据需要放在合适的位置。这种域注释不会出现在HTML报告中。注释格式通常写成:

3、文档注释:
注释若干行,并写入javadoc文档。每个文档注释都会被置于注释定界符
之中,注释文档将用来生成HTML格式的代码报告,所以注释文
档必须书写在类、域、构造函数、方法,以及字段(field)定义之前。注释文档由两部分组成——描述、块标记。注释文档的格式如下:

public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    doPost(request, response);
}
前两行为描述,描述完毕后,由@符号起头为块标记注释。更多有关文档注
释和javadoc的详细资料,参见javadoc的主页: http://java.sun.com/javadoc/index.html
4、javadoc注释标签语法
@author    对类的说明标明开发该类模块的作者
@version   对类的说明 标明该类模块的版本
@see      对类、属性、方法的说明 参考转向,也就是相关主题
@param    对方法的说明对方法中某参数的说明
@return    对方法的说明 对方法返回值的说明
@exception  对方法的说明 对方法可能抛出的异常进行说明