a=a+i;
if(a==max){
b=b+a;//nestedblockishere
a=0;
}
}
1.4.空白
空白:
是空格、tabs和新行的统称。
在源代码元素之间允许插入任意数量的空白。
空白可以改善源代码的视觉效果,增强源代码的可读性。
例如:
{
intx;
x=23*54;
}
intx
x=23+54;
}
2.标识符
标识符是语言元素的名称,是我们在程序中表示变量、类或方法等等的符号。
标识符可从一个字母、下划线(_)或美元符号($)开始;随后跟随字母、下划线(_)、美元符号($)或数字。
标识符是大小写区别对待的。
标识符未规定最大长度。
下列标识符是有效的:
identifier
userName
User_name
_sys_varl
$change
Java技术源程序采用双字节的“统一字符编码”(Unicode)标准,而不是单字节的ASCII文本。
因而,一个字母有着更广泛的定义,而不仅仅是a到z和A到Z。
标识符不能是关键字,但是它可包含一个关键字作为它的名字的一部分。
例如,thisone是一个有效标识符,但this却不是,因为this是一个Java关键字。
3.Java关键字
表2-1列出了使用在Java编程语言中的关键字。
abstractdoimplementsprivatethrow
booleandoubleimportprotectedthrows
breakelseinstanceofpublictransient
byteextendsintreturntrue
casefalseinterfaceshorttry
catchfinallongstaticvoid
charfinallynativesupervolatile
classfloatnewswitchwhile
continuefornullsynchronized
defaultifpackagethis
关键字对Java技术编译器有特殊的含义,它们可标识数据类型名或程序构造(construct)名。
以下是有关关键字的重要注意事项:
-true、false和null为小写,而不是象在C++语言中那样为大写。
-无sizeof运算符;所有类型的长度和表示是固定的,不依赖执行。
-goto和const不是Java编程语言中使用的关键字。
4.基本Java数据类型
Java编程语言定义了八种原始数据类型:
逻辑型boolean
文本型char
整数型byte,short,int,long
浮点型double,float
4.1.逻辑型──boolean
逻辑值有两种状态,即人们经常使用的“true”和“false”。
这样的值是用boolean类型来表示的。
boolean有两个文字值,即true和false。
以下是一个有关boolean类型变量的声明和初始化:
booleantruth=true;//declaresthevariabletruth
//asbooleantypeandassignsitthevaluetrue
注意:
在整数类型和boolean类型之间无转换计算。
有些语言(特别值得强调的是C和C++)允许将数字值转换成逻辑值,这在Java编程语言中是不允许的;boolean类型只允许使用boolean值。
4.2.字符型──char
使用char类型可表示单个字符。
一个char代表一个16-bit无符号的(不分正负的)Unicode字符。
一个char文字必须包含在单引号内(‘’)。
‘a’
‘\t’一个制表符
‘\u?
?
?
?
’一个特殊的Unicode字符。
?
?
?
?
应严格按照四个16进制数字进行替换。
例如:
’\u03A6’表示希腊字母“Φ”
Char类型变量的声明和初始化如下所示:
charch=`A';//declaresandinitializesacharvariable
charch1,ch2;//declarestwocharvariables
4.3.文本类──String
String不是原始类型,而是一个类(class),它被用来表示字符序列。
字符本身符合Unicode标准。
与C和C++不同,String不能用\0作为结束。
String的文字应用双引号封闭,如下所示:
“The quickbrownfoxjumpedoverthelazydog.”
String类型变量的声明和初始化如下所示:
//declaretwoStringvariablesandinitializethem
Stringgreeting="GoodMorning!
!
\n";
Stringerr_msg="RecordNotFound!
";
Stringstr1,str2;//declaretwoStringvariables
4.4.整数型──byte,short,int,long
在Java编程语言中有四种整数类型,它们分别使用关键字byte,short,int和long中的任意一个进行声明。
整数类型的文字可使用十进制、八进制和16进制表示,如下所示:
2十进制值是2
077首位的0表示这是一个八进制的数值
0xBAAC首位的0x表示这是一个16进制的数值
注意──所有Java编程语言中的整数类型都是带符号的数字。
整数类文字被默认为int类型。
整数类文字后面紧跟着一个字母“L”,可以强制它为long型。
例如:
2L十进制值是2,是一个long
077L首位的0表示这是一个八进制的数值
0xBAACL前缀0x表示这是一个16进制的数值
四种整数类型的长度和范围如表3-2所示。
这些长度和范围是按Java编程语言规范定义的,是不依赖于平台。
IntegerLength
NameorType
Range
8bits
byte
-27...27-1
16bits
short
-215...215-1
32bit
int
-231...231-1
64bits
long
-263...263-1
表3-2整数数据类型—范围
4.5.浮点数──float和double
如果一个数字文字包括小数点或指数部分,则该数字文字为double型浮点数。
例如:
3.14
3.02E23
如果一个数字文字后带有字母F或f,则该数字文字为float型浮点数。
例如:
2.718F
如果一个数字文字后带有字母D或d,则该数字文字为double型浮点数。
例如:
123.4E-306D
浮点变量可用关键字float或double来声明。
Java技术规范的浮点数的格式是由电力电子工程师学会(IEEE)754定义的,是独立于平台的。
浮点数据类型具有下列范围:
浮点长度
名称或类型
取值范围
32bits
float
1.40239846e-45f至3.40282347e+38f
64bits
double
4.94065645841246544e-324至1.79769313486231570e+308
5.变量、声明和赋值
变量用于存储信息。
一个变量代表一个特殊类型的存储位置,它指向内存的某个单元,而且指明这块内存有多大。
变量的值可以是基本类型,也可以是对象。
下列程序显示了如何声明及赋值整数、浮点、boolean、字符和String类型变量。
publicclassAssign{
publicstaticvoidmain(Stringargs[]){
intx,y;//declareintvariables
floatz=3.414f;//declareandassignfloat
doublew=3.1415;//declareandassigndouble
booleantruth=true;//declareandassignboolean
charc;//declarecharactervariable
Stringstr;//declareString
Stringstr1="bye";//declareandassignStringvariable
c='A';//assignvaluetocharvariable
str="Hioutthere!
";//assignvaluetoStringvariable
x=6;
y=1000;//assignvaluestointvariables
}
}
6.引用(Reference)类型
早些时候的编程语言和初级程序员将每个变量看作相互无关的实体。
例如,如果一个程序需处理某个日期,则要声明三个单独的整数:
intday,month,year;
上述语句作了两件事,一是当程序需要日、月或年的有关信息时,它将操作一个整数;二是为那些整数分配存储器。
尽管这种作法很容易理解,但它存在两个重大缺陷。
首先,如果程序需同时记录几个日期,则需要三个不同的声明。
例如,要记录两个生日,你可能使用:
intmyBirthDay,myBirthMonth,myBirthYear;
intyourBirthDay,yourBirthMonth,yourBirthYear;
这种方法很快就会引起混乱,因为需要的名称很多。
第二个缺陷是这种方法忽视了日、月和年之间的联系并把每个变量都作为一个独立的值,每个变量都是一个独立单元(在本例中为日期)的一部分并被相应地处理。
6.1.创建一个新类型
为克服上述两种缺陷,Java编程语言使用类来创建新类型。
例如可以用下面的类表示日期:
classMyDate
privateintday=1;
privateintmonth=1;
privateintyear=2000;
关键字class是用来声明类的。
MyDate是我们给表示日期的类指定的名称。
一个变量可被声明为归属于类型MyDate,从而日、月和年部分将被隐含声明。
例如:
MyDatemyBirth,yourBirth;
myBirth=newMyDate();
yourBirth=newMyDate();
6.2.创建并初始化一个对象
当任何原始类型(如boolean,byte,short,char,int,long,float或double类型)的变量被声明时,作为上述操作的一部分,存储器空间也同时被分配。
使用非原始类型(如String或class)的变量的声明不为对象分配存储器空间。
事实上,使用class类型声明的变量不是数据本身,而是数据的引用(reference)。
引用可以理解为C语言的指针(Pointer),但是不能象C语言那样计算指针。
在你使用引用变量之前,必须为它分配实际存储空间。
这个工作是通过使用关键字new来实现的。
如下所示:
MyDatemyBirth;
myBirth=newMyDate();
第一个语句仅为引用分配了空间,而第二个语句则通过调用对象的构造函数MyDate()为对象生成了一个实例。
这两个操作被完成后,MyDate对象的内容则可通过myBirth进行访问。
还可以用一条语句创建并初始化一个对象:
MyDatemyBirth=newMyDate(27,1,1964);
6.3.存储器分配和布局
在一个方法体中,做如下声明:
MyDatetoday;
today=newMyDate();
语句MyDatetoday;仅为一个引用分配存储器
today
在语句today=newMyDate();中关键字new意味着为对象分配存储器,并初始化:
6.4.引用类型的赋值
在Java编程语言中,一个被类声明的变量,叫做引用类型变量,这是因为它正在引用一个非原始类型,这对赋值具有重要的意义。
请看下列代码片段:
intx=7;
inty=x;
Strings=“Hello”;
Stringt=s;
四个变量被创建:
两个原始类型int和两个引用类型String。
x的值是7,而这个值被复制到y。
x和y是两个独立的变量且其中任何一个的进一步的变化都不对另外一个构成影响。
至于变量s和t,只有一个String对象存在,它包含了文本”Hello”,s和t均引用这个单一的对象。
将变量t重新定义,t="world";则新的对象World被创建,而t引用这个对象。
上述过程被描述如下:
6.5.值传递
Java编程语言只由值传递参数,也就是说,参数不能由被调用的方法来改变。
当一个对象实例作为一个参数传递到方法中时,参数的值就是对象的引用。
对象的内容可以在被调用的方法中改变,但对象引用是永远不会改变的。
下面的代码例子可以阐明这一点:
publicclassPassTest{
floatptValue;
//Methodstochangethecurrentvalues
publicvoidchangeInt(intvalue){
value=55;
}
publicvoidchangeStr(Stringvalue){
value=newString("different");
}
publicvoidchangeObjValue(PassTestref){
ref.ptValue=99.0f;
}
publicstaticvoidmain(Stringargs[]){
Stringstr;
intval;
PassTestpt=newPassTest();//Createaninstanceoftheclass
val=11;//Assigntheint
pt.changeInt(val);//Trytochangeit
System.out.println("Intvalueis:
"+val);//Whatisthecurrentvalue?
str=newString("hello");//Assignthestring
pt.changeStr(str);//Trytochangeit
System.out.println("Strvalueis:
"+str);//Whatisthecurrentvalue?
pt.ptValue=101.0f;//NowsettheptValue
pt.changeObjValue(pt);//Nowchangethevalueofthefloatthroughtheobjectreference
System.out.println("CurrentptValueis:
"+pt.ptValue);//Whatisthecurrentvalue?
}
}
这个代码输出如下内容:
c:
\student\source\>javaPassTest
Intvalueis:
11
Strvalueis:
hello
CurrentptValueis:
99.0
字符串对象是不会被changeStr()改变的,但是,PassTest对象的内容被改变了。
6.6.this引用
关键字this是用来指向当前对象(类实例)的。
这里,this.day指的是当前对象的day字段。
publicclassMyDate{
privateintday,month,year;
publicvoidtomorrow(){
intday;
day=this.day+1;
//wraparoundcode...
}
}
Java编程语言自动将所有实例变量和方法引用与this关键字联系在一起,因此,使用关键字在某些情况下是多余的。
下面的代码与前面的代码是等同的。
publicclassMyDate{
privateintday,month,year;
publicvoidtomorrow(){
day=day+1;//no`this.'before`day'
//wraparoundcode...
}
}
也有关键字this使用不多余的情况。
如,需要在某些完全分离的类中调用一个方法并将当前对象的一个引用作为参数传递时。
例如:
BirthdaybDay=newBirthday(this);
7.Java编码约定
虽然任何一个合法的标识符都可以用来当作变量、类、方法等的名称,但是Java编程语言极力推荐它的编码约定:
classes──类名应该是名词,大小写可混用,但首字母应大写。
例如:
classAccountBook
classComplexVariable
interface──界面(接口)名大小写规则与类名相同。
interfaceAccount
method──方法名应该是动词,大小写可混用,但首字母应小写。
在每个方法名内,大写字母将词分隔并限制使用下划线。
例如:
balanceAccount()
addComplex()
Variables──所有变量都可大小写混用,但首字符应小写。
词由大写字母分隔,限制用下划线,限制使用美元符号($),因为这个字符对内部类有特殊的含义。
currentCustomer
变量应该代表一定的含义,通过它可传达给读者使用它的意图。
尽量避免使用单个字符,除非是临时“即用即扔”的变量(例如,用i,j,k作为循环控制变量)
constant──原始常量应该全部大写并用下划线将词分隔;对象常量可大小写混用。
HEAD_COUNT
MAXIMUM_SIZE
controlstructures──当语句是控制结构的一部分时,即使是单个语句也应使用括号({})将语句封闭。
例如:
if(condition){
dosomething
}else{
dosomethingelse
}
spacing──每行只写一个语句并使用四个缩进的空格使你的代码更易读。
comments──用注释来说明那些不明显的代码段落;对一般注释使用//分隔符,而大段的代码可使用/*···*/分隔符。
使用/**···*/将注释形成文档,并输入给javadoc以生成HTML代码文档。
//Acommentthattakesuponlyoneline.
/*Commentsthatcontinuepastonelineandtakeupspaceonmultiplelines..