a=a+i;
if(a==max){
b=b+a;//nestedblockishere
a=0;
}
}
在源代码元素之间允许空白,空白的数量不限。
空白(包括空格、tabs和新行)可以改善你的对源代码的视觉感受。
{
intx;
x=23*54;
}
intx
x=23+54;
}
第四节标识符
标识符
-是赋予变量、类和方法的名称
-可从一个字母、下划线(_)或美元符号($)开始
-是大小写区别对待的,且无最大长度
在Java编程语言中,标识符是赋予变量、类或方法的名称。
标识符可从一个字母、下划线(_)或美元符号($)开始,随后也可跟数字。
标识符是大小写区别对待的并且未规定最大长度。
有效标识符如下:
-identifier
-userName
-User_name
-_sys_varl
-$change
Java技术源程序采用有效的16-bit双字节字符编码标准(Unicode),而不是8-bitASCII文本。
因而,一个字母有着更广泛的定义,而不仅仅是a到z和A到Z。
谨慎对待非ASCII字符,因为Unicode可支持看似相同而实际不同的字符。
标识符不能是关键字,但是它可包含一个关键字作为它的名字的一部分。
例如,thisone是一个有效标识符,但this却不是,因为this是一个Java关键字。
Java关键字将在后面讨论。
注意──包含美元符号($)的关键字通常用的较少,尽管它在BASIC和VAX/VMS系统语言中有着广泛的应用。
由于它们不被熟知,因而最好避免在标识符中使用它们,除非有本地使用上的习惯或其他不得已的原因。
第五节Java关键字
表2-1列出了使用在Java编程语言中的关键字。
abstractdoimplementsprivatethrow
booleandoubleimportprotectedthrows
breakelseinstanceofpublictransient
byteextendsintreturntrue
casefalseinterfaceshorttry
catchfinallongstaticvoid
charfinallynativesupervolatile
classfloatnewswitchwhile
continuefornullsynchronized
defaultifpackagethis
关键字对Java技术编译器有特殊的含义,它们可标识数据类型名或程序构造(construct)名。
以下是有关关键字的重要注意事项:
-true、false和null为小写,而不是象在C++语言中那样为大写。
严格地讲,它们不是关键字,而是文字。
然而,这种区别是理论上的。
-无sizeof运算符;所有类型的长度和表示是固定的,不依赖执行。
-goto和const不是Java编程语言中使用的关键字。
第六节基本Java类型
Java编程语言定义了八个原始类型
-逻辑类boolean
-文本类char
-整数类byte,short,int,long
-浮点类double,float
2.6.1原始类型
Java编程语言为八个原始数据类型和一个特殊类型定义了文字值。
原始类型可分为四种:
-逻辑类boolean
-文本类char
-整数类byte,short,int,long
-浮点类double,float
2.6.2基本Java类型
1.逻辑类──boolean
逻辑值有两种状态,即人们经常使用的“on”和“off”或“true”和“false”或“yes”和“no”,这样的值是用boolean类型来表示的。
boolean有两个文字值,即true和false。
以下是一个有关boolean类型变量的声明和初始化:
booleantruth=true;//declaresthevariabletruth
//asbooleantypeandassignsit
//thevaluetrue
注意──在整数类型和boolean类型之间无转换计算。
有些语言(特别值得强调的是C和C++)允许将数字值转换成逻辑值,这在Java编程语言中是不允许的;boolean类型只允许使用boolean值。
2.文本类──char和String
文本类──char和String
char
-代表一个16-bitUnicode字符
-必须包含用单引号(’’)引用的文字
-使用下列符号:
‘a’
‘\t’一个制表符
‘\u?
?
?
?
’一个特殊的Unicode字符,?
?
?
?
应严格使用四个16进制数进行替换
使用char类型可表示单个字符。
一个char代表一个16-bit无符号的(不分正负的)Unicode字符。
一个char文字必须包含在单引号内(‘’)。
‘a’
‘\t’一个制表符
‘\u?
?
?
?
’一个特殊的Unicode字符。
?
?
?
?
应严格按照四个16进制数字进行替换
String不是原始类型,而是一个类(class),它被用来表示字符序列。
字符本身符合Unicode标准,且上述char类型的反斜线符号适用于String。
与C和C++不同,String不能用\0作为结束。
文本类──char和String
String
-不是一个原始数据类型,它是一个类
-具有用双引号引用的文字
“The quickbrownfoxjumpedoverthelazydog.”
-可按如下情形使用:
Stringgreeting=“GoodMorning!
!
\n”;
Stringerr_meg=“recordnotfound!
”;
文本类──char和String(续)
String的文字应用双引号封闭,如下所示:
“The quickbrownfoxjumpedoverthelazydog.”
Char和String类型变量的声明和初始化如下所示:
charch=`A';//declaresandinitializesacharvariable
charch1,ch2;//declarestwocharvariables
//declaretwoStringvariablesandinitializethem
Stringgreeting="GoodMorning!
!
\n";
Stringerr_msg="RecordNotFound!
";
Stringstr1,str2;//declaretwoStringvariables
2.6.3整数类──byte,short,int,long
在Java编程语言中有四种整数类型,每种类型可使用关键字byte,short,int和long中的任意一个进行声明。
整数类型的文字可使用十进制、八进制和16进制表示,如下所示:
2十进制值是2
077首位的0表示这是一个八进制的数值
0xBAAC首位的0x表示这是一个16进制的数值
注意──所有Java编程语言中的整数类型都是带符号的数字。
整数类──byte,short,int,long(续)
整数类文字属int类型,除非在其后直接跟着一个字母“L”。
L表示一个long值。
请注意,在Java编程语言中使用大写或小写L同样都是有效的,但由于小写l与数字1容易混淆,因而,使用小写不是一个明智的选择。
上述文字的long的形式如下:
2L十进制值是2,是一个long
077L首位的0表示这是一个八进制的数值
0xBAACL前缀0x表示这是一个16进制的数值
整数类──byte,short,int,long
每个整数数据类型具有下列范围:
IntegerLengthNameorTypeRange
8bitsbyte-27...27-1
16bitsshort-215...215-1
32bitint-231...231-1
64bitslong-263...263-1
整数类──byte,short,int,long(续)
四个整数类型的长度和范围如表2-2所示。
范围的表示是按Java编程语言规范定义的且不依赖于平台。
表2-2整数数据类型—范围
IntegerLengthNameorTypeRange
8bitsbyte-27...27-1
16bitsshort-215...215-1
32bitint-231...231-1
64bitslong-263...263-1
2.6.4浮点──float和double
浮点──float和double
-缺省为double
-浮点文字包括小数点或下列各项之一
-E或e(增加指数值)
-F或f(float)
-D或d(double)
3.14一个简单的浮点值(adouble)
4.02E23一个大浮点值
2.718F一个简单的float长度值
123.4E+306D一个大的带冗余D的double值
浮点变量可用关键字float或double来声明,下面是浮点数的示例。
如果一个数字文字包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数字文字为浮点。
3.14一个简单的浮点值(adouble)
4.02E23一个大浮点值
2.718F一个简单的float长度值
123.4E+306D一个大的带冗余D的double值
浮点──float和double
浮点数据类型具有下列范围:
浮点长度名称或类型
32bitsfloat
64bitsdouble
浮点──float和double(续)
表2—3浮点数据类型──范围
浮点长度名称或类型
32bitsfloat
64bitsdouble
注意──浮点文字除非明确声明为float,否则为double
第七节变量、声明和赋值
Java技术规范的浮点数的格式是由电力电子工程师学会(IEEE)754定义的,它使用表2—3的长度,并且是独立于平台的。
下列程序显示了如何为整数、浮点、boolean、字符和string类型变量声明和赋值。
1.publicclassAssign{
2.publicstaticvoidmain(Stringargs[]){
3.intx,y;//declareint
//variables
4.floatz=3.414f;//declareandassign
//float
5.doublew=3.1415;//declareandassign
//double
6.booleantruth=true;//declareandassign
//boolean
7.charc;//declarecharacter
//variable
8.Stringstr;//declareString
9.Stringstr1="bye";//declareandassign
//Stringvariable
10.c='A';//assignvaluetochar
//variable
11.str="Hioutthere!
";//assignvalueto
//Stringvariable
12.x=6;
13.y=1000;//assignvaluestointvariables
14....
15.}
16.}
非法赋值举例
y=3.1415926;//3.1415926isnotanint.
//Requirescastinganddecimalwill
//betruncated.
w=175,000;//thecommasymbol(,)cannotappear
truth=1;//acommonmistakemadebyex-C/C++
//programmers.
z=3.14156;//can'tfitdoubleintoa
//Float.Requirescasting.
第八节Java编码约定
Java编程语言的一些编码约定是:
classes──类名应该是名词,大小写可混用,但首字母应大写。
例如:
classAccountBook
classComplexVariable
interface──界面名大小写规则与类名相同。
interfaceAccount
method──方法名应该是动词,大小写可混用,但首字母应小写。
在每个方法名内,大写字母将词分隔并限制使用下划线。
例如:
balanceAccount()
addComplex()
Java编码约定
Variables──所有变量都可大小写混用,但首字符应小写。
词由大写字母分隔,限制用下划线,限制使用美元符号($),因为这个字符对内部类有特殊的含义。
currentCustomer
变量应该代表一定的含义,通过它可传达给读者使用它的意图。
尽量避免使用单个字符,除非是临时“即用即扔”的变量(例如,用i,j,k作为循环控制变量)
constant──原始常量应该全部大写并用下划线将词分隔;对象常量可大小写混用。
HEAD-COUNT
MAXIMUM-SIZE
controlstructures──当语句是控制结构的一部分时,即使是单个语句也应使用括号({})将语句封闭。
例如:
if(condition){
dosomething
}else{
dosomethingelse
}
spacing──每行只写一个语句并使用四个缩进的空格使你的代码更易读。
comments──用注释来说明那些不明显的代码段落;对一般注释使用//分隔符,而大段的代码可使用/*···*/分隔符。
使用/**···*/将注释形成文档,并输入给javadoc以生成HTML代码文档。
//Acommentthattakesuponlyoneline.
/*Commentsthatcontinuepastonelineandtakeupspaceonmultiplelines...*/
/**Acommentfordocumentationpurposes.
@seeAnotherclassformoreinformation
*/
注意──@see是一个有关类或方法的特殊的javadoc标记符(”seealso”)。
有关javadoc的详细资料,请参见“TheDesignofDistributedHyperlinkedProgrammingDocumentation”(Lisa著)的有关文档系统的完整定义。
该资料可从下列地址获得:
第九节理解对象
2.9.1回顾对象的历史
早些时候的编程语言和初级程序员将每个变量看作相互无关的实体。
例如,如果一个程序需处理某个日期,则要声明三个单独的整数:
intday,month,year;
上述语句作了两件事,一是当程序需要日、月或年的有关信息时,它将操作一个整数;二是为那些整数分配存储器。
尽管这种作法很容易理解,但它存在两个重大缺陷。
首先,如果程序需同时记录几个日期,则需要三个不同的声明。
例如,要记录两个生日,你可能使用:
intmyBirthDay,myBirthMonth,myBirthYear;
intyourBirthDay,yourBirthMonth,yourBirthYear;
这种方法很快就会引起混乱,因为需要的名称很多。
第二个缺陷是这种方法忽视了日、月和年之间的联系并把每个变量都作为一个独立的值,每个变量都是一个独立单元(在本例中为date)的一部分并被相应地处理。
2.9.2创建一个新类型
为克服上述两种缺陷,Java编程语言使用类来创建新类型。
请看下列原始类型声明:
intday;
Java编程语言被用来分配一定量的存储器并解释该存储器的内容。
于是,要定义一个新的类型,你必须指出需要多大存储器和如何解释存储器内容。
这不是根据字节数或位的顺序和含义来做,而是根据已经定义的其它类型来做。
例如,要定义一个表示日期的类型,你需要足够的存储器存储三个整数变量;进而,日、月和年的意义即由这些整数变量给出。
如下所示:
classMyDate
intday;
intmonth;
intyear;
词class是Java编程语言的一个关键字,必须全部小写。
名称MyDate按照大小写的有关约定处理,而不是由语意要求来定。
注意-----class不仅仅是一个集合数据类型,这个问题以后还将进一步讨论。
一个变量可被声明为归属于类型MyDate,从而日、月和年部分将被隐含声明。
例如:
MyDatemyBirth,yourBirth;
使用这个声明,Java编程语言允许变量的部分(day,month和year)通过调用成员和使用点(·)运算符而被访问。
例如:
myBirth.day=26;
myBirth.month=11;
yourBirth.year=1960;
2.9.3创建一个对象
当任何原始类型(如boolean,byte,short,char,int,long,float或double类型)的变量被声明时,作为上述操作的一部分,存储器空间也同时被分配。
使用非原始类型(如String或class)的变量的声明不为对象分配存储器空间。
事实上,使用class类型声明的变量不是数据本身,而是数据的引用(reference)。
注意----你也可以认为引用是一个指针(pointer),这可能会有助于你的理解。
实际上,在大多数实现中,也确实可以这样认为。
值得注意的是,Java编程语言实际上不支持指针数据类型。
在你可以使用变量之前,实际存储器必须被分配。
这个工作是通过使用关键字new来实现的。
如下所示:
MyDatemyBirth;
myBirth=newMyDate();
第一个语句(声明)仅为引用分配了足够的空间,而第二个语句则通过调用对象为构成MyDate的三个整数分配了空间。
对象的赋值使变量myBirth重新正确地引用新的对象。
这两个操