java語言基礎(chǔ)課件第2章_第1頁
java語言基礎(chǔ)課件第2章_第2頁
java語言基礎(chǔ)課件第2章_第3頁
java語言基礎(chǔ)課件第2章_第4頁
java語言基礎(chǔ)課件第2章_第5頁
已閱讀5頁,還剩103頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第2章Java語言基礎(chǔ)

?2.1數(shù)據(jù)類型

?2.2運算符和表達式

?2.3流程控制語句

2.1數(shù)據(jù)類型

?2.1.1保留字和標識符

?2.1.2Java數(shù)據(jù)類型

?2.1.3整數(shù)類型

?2.1.4浮點數(shù)類型

?2.1.5布爾型數(shù)據(jù)

?2.1.6字符型數(shù)據(jù)

2.1.1保留字和標識符

1.Java保留字

abstractcontinuefornewswitch

assertdefaultgotopackagesynchronized

booleandoifprivatethis

breakdoubleimplementsprotectedthrow

byteelseimportpublicthrows

caseenuminstanceofreturntransient

catchextendsintshorttry

charfinalinterfacestaticvoid

classfinallylongstrictfpvolatile

constfloatnativesuperwhile

2.1.1保留字和標識符

2.標識符

?標識符用來對變量、方法、對象和類進行命名。

?Java規(guī)定,標識符必須以字母、下劃線(_)或美元

符⑻開始,其后可以是字母、下劃線、美元符或

數(shù)字,長度沒有限制。

?如下面是一些合法的標識符:

intTest,Manager_Name,_var,$Var

?Java標識符是區(qū)分大小寫的

?下面兩個標識符是不同的:

Name,name

2.1.1保留字和標識符

3.Java標識符的命名約定

?(1)類名和接口名一般使用名詞,首字母大寫,若名稱

是多個單詞的組合,每個單詞的第一個字母都應(yīng)該大寫,

如:

classStudent{}

?(2)變量名和方法名一般用小寫英文單詞命名,若名稱

是多個單詞的組合,則第一個單詞小寫,后面單詞的第

一個字母大寫,如:

balanceAccount

?(3)常量名應(yīng)該全部大寫并用下劃線將詞分隔開,如:

MAXARRAYSIZE或MYNAME

2.1.2Java數(shù)據(jù)類型

?在程序設(shè)計中,數(shù)據(jù)是程序的必要組成部分,也

是程序處理的對象。不同的數(shù)據(jù)有不同的類型,

不同的數(shù)據(jù)類型有不同的數(shù)據(jù)結(jié)構(gòu)、不同的存儲

方式,并且參與的運算也不相同。

?Java語言的數(shù)據(jù)類型可分成兩大類,一類是基本

數(shù)據(jù)類型(primitivedatatype),另一類是引用

數(shù)據(jù)類型(referencedatatype),如表2.1所示:

2.1.2Java數(shù)據(jù)類型

表2.1Java語言的數(shù)據(jù)類型

字節(jié)型byte

短整型short

整數(shù)類型

整型int

長整型long

基本數(shù)據(jù)類型單浮點型float

浮點類型

雙浮點型double

布爾類型boolean

字符類型char

數(shù)組〃。加e[]類class

引用數(shù)據(jù)類型

接口interface枚舉類型enum

1.基本數(shù)據(jù)類型

表2.2Java基本數(shù)據(jù)類型的寬度和取值范圍

數(shù)據(jù)類型占字節(jié)數(shù)所占位數(shù)數(shù)的范圍

boolean11只有true和false兩個值

byte18-27?27-1

short216-215?215-1

int432-231?231-1

long864-263?263-1

char2160-65535

float4323.4e-038~3.4e+038

double864L7e-308?L7e+308

2.常量

?常量是在程序運行過程中,其值不能被改變的量。

?常量分為常數(shù)常量和標識符常量。

?常數(shù)常量也叫字面值,共有五種類型:整型、

浮點型、布爾型、字符型和字符串常量。

?標識符常量是有名稱的常量,或叫常值變量。

它實際上是一個由final關(guān)鍵字修飾的變量,一

旦為其賦值,其值在程序運行中就不能被改變。

?常值變量可以在聲明的同時賦值,也可以稍后賦

值。不管哪種情況,一旦賦值便不允許修改。

3.變量及賦值

?變量是在程序運行中其值可以改變的量。

?一個變量應(yīng)該有一個名字,在內(nèi)存中占據(jù)一定的

存儲單元。

?根據(jù)變量的數(shù)據(jù)類型分,Java有兩種類型的變量:

基本類型的變量和引用類型的變量。

?基本類型的變量包括數(shù)值型(整數(shù)型和浮點型)、

布爾型和字符型;

?引用類型的變量包括類、接口、枚舉和數(shù)組等。

?變量在使用之前必須定義,變量的定義包括變量

的聲明和賦值。

(1)變量的聲明

?一般格式為:

[modifier]typevarName[二value][,varName[=value

?其中:

?modifier為變量的訪問修飾符

?type為變量的類型

?varName為變量名

?下面聲明了幾個不同類型的變量:

intage;

doubledl,d2;

charchi,ch2;

(2)變量的賦值

?使用賦值運算符“二”來給變量賦值,一般稱為變

量的初始化。

?如下面是幾個賦值語句:

age=21;

chi='A';

dl=0.618;

?也可以在聲明變量的同時給變量賦值,例如:

booleanb=false;

2.1.3整數(shù)類型

?Java語言定義了4個整數(shù)類型,分別是字節(jié)型

(byte)、短整型(short)、整型(int)和長整型

(long)o這些整數(shù)類型都是有符號的數(shù),可以為

正值或負值。每種類型的整數(shù)在JVM中占的位數(shù)不

同,因此能夠表示的數(shù)的范圍也不同。

?注意,不要把整數(shù)類型的寬度理解成實際機器的

存儲空間,一個byte型的數(shù)據(jù)可能使用32位存儲。

1.整型常量

?與C、C++相同,Java的整型常量有三種形式:

(1)十進制整數(shù),如0、257、-365o

(2)八進制整數(shù),是以0開頭的數(shù),如0124表示十

進制數(shù)84,-012表示十進制數(shù)-10。

(3)十六進制整數(shù),是以O(shè)x或0X開頭的整數(shù),如

0x124表示十進制數(shù)的292。

?注意整型常量具有int類型,在JVM中占32位。對

于long型值,可以在后面加上1或L,表示long型常

量,如量5L,它在JVM中占64位。

2.整型變量

?Java的整型變量有byte、short>int、long四種

類型。

byteb=120;

shorts=1000;

inti=99999999;

long1=-9223372036854775808;//這是

long型數(shù)據(jù)的最小值

?注意,在給變量賦值時,不能超出該數(shù)據(jù)類型所

允許的范圍,否則編譯器給出錯誤提示。

程序2.1LightSpeed.java

publicclassLightSpeed(

publicstaticvoidmain(Stringargs[]){

intspeed=300000;

intdays=1000;

longseconds;

longdistance;

seconds=days*24*60*60;

distance=speed*seconds;

System,out.print(/zIn〃+days+〃days〃);

System,out.printin(/zlightwilltravel

〃+distance+〃kilometers./z);

2.1.4浮點數(shù)類型

?浮點類型的數(shù)就是我們所說的實數(shù)。

?在Java中有兩種浮點類型的數(shù)據(jù):float型和

double型。

?這兩種類型的數(shù)據(jù)在JVM中所占的位數(shù)不同,

float型占32位,double型占64位。

?通常float型稱為單精度浮點數(shù),double型稱為

雙精度浮點數(shù)。

1.浮點型常量

?浮點型常量有兩種表示方法:

?(1)十進制數(shù)形式,由數(shù)字和小數(shù)點組成,且

必須有小數(shù)點,如0.256、.345、256.>256.0

等。

?(2)科學(xué)記數(shù)法形式,如256e3、256e-3,它

們分別表示256X103和256X10-3。e之前必須

有數(shù)字,e后面的指數(shù)必須為整數(shù)。

2.浮點型變量

?浮點型變量的定義使用float和double關(guān)鍵字,如

下面兩行分別聲明了兩個浮點型變量f和d:

floatpi=3.1415926F;

doublee=2.71828;

?注意浮點型常量默認的類型是double型數(shù)據(jù)。

如果表示float型常量數(shù)據(jù),必須在后面加上F或f,

double型數(shù)據(jù)也可加D或d。

2.1.5布爾型數(shù)據(jù)

?布爾型數(shù)據(jù)用來表示邏輯真或邏輯假,只有兩個

值true和false,分別表示邏輯真和邏輯假。

?布爾型變量使用boolean關(guān)鍵字聲明,如:

booleant=true;

?所有關(guān)系表達式的返回值都是布爾型的數(shù)據(jù),如

表達式10〈9的結(jié)果為false。

?布爾型的數(shù)據(jù)也經(jīng)常用于選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的

條件中。

2.1.6字符型數(shù)據(jù)

?字符型數(shù)據(jù)用來表示一個字符,其類型為char。

?Java語言使用Unicode字符集來表示字符。

?ASCII碼字符集是Unicode字符集的子集。

1.字符型常量

?Java字符型常量的表示用單引號將字符括起來,

?大多數(shù)可見的Unicode碼字符都可用這種方式表示,

如,a,、'@'、,我―等。

?對于不能用單引號直接括起來的符號,需要使用

轉(zhuǎn)義序列來表示。表示方法是在一對單引號內(nèi)用

表示轉(zhuǎn)義,如'表示單引

號、'\n'表示換行。

?其他常用的轉(zhuǎn)義序列如表2.3所示:

1.字符型常量

表2.3Java常見的轉(zhuǎn)義字符序列

轉(zhuǎn)義字符說明轉(zhuǎn)義字符說明

\'單引號字符\r回車

\\反斜杠字符\n換行

\f換頁\t水平制表符

\b退格\a響鈴

\ddd3位八進制數(shù)所表示的字符

\uxxxx4位十六進制數(shù)所表示的字符

2.字符型變量

?字符型變量的類型是char,在內(nèi)存中占16位,它能表示的

數(shù)據(jù)范圍是0?65535。字符型變量的定義如:

charc='a';

charcl=97;

?Java字符型數(shù)據(jù)實際上是int型數(shù)據(jù)的一個子集,因此可

以與其他數(shù)值型數(shù)據(jù)混合運算。但字符型數(shù)據(jù)不能與int

型數(shù)據(jù)直接相互轉(zhuǎn)換。

?一般情況下,char類型的數(shù)據(jù)可直接轉(zhuǎn)換為int類型的

數(shù)據(jù),而int類型的數(shù)據(jù)轉(zhuǎn)換成char類型的數(shù)據(jù)需要強

制轉(zhuǎn)換。

程序2.2CharBoolDemo.java:?

publicclassCharBoolDemo{

publicstaticvoidmain(Stringargs[]){

booleanb;

charchi,ch2;

chi='Y';

ch2=65;

/z

System,out.printin(chl=〃+chl+〃,ch2=〃+ch2);

b二chi二二ch2;

System,out.printin(b);

ch2++;

System,out.printin(〃ch2=〃+ch2);

2.2運算符和表達式

?2.2.1算術(shù)運算符

?2.2.2關(guān)系運算符

?2.2.3位運算符

?2.2.4邏輯運算符

?2.2.5賦值運算符

?2.2.6條件運算符

?2.2.7運算符的優(yōu)先級

?2.2.8數(shù)據(jù)類型轉(zhuǎn)換

2.2運算符和表達式

?運算符和表達式是Java程序的基本組成要素。

?把表示各種不同運算的符號稱為運算符,參與運算

的各種數(shù)據(jù)稱為操作數(shù)。

?Java語言提供了多種運算符

?按操作數(shù)的個數(shù)可分為一元運算符,如++、一,

二元運算符,如*、/、%和三元運算符?:o

?按功能分可分為:

?算術(shù)運算符如++、--、+、-、*、/、%

關(guān)系運算符如>、<、>二、〈二、二二、!二

2.2運算符和表達式

位運算符如?、&、I、\〈〈、〉>、?>

?邏輯運算符如!、&&、||、&、|、八

賦值運算符如二、+二、-二等

?條件運算符如?:

?其他運算符如分量運算符.,下標運算符口,實例

運算符instanceof,類型轉(zhuǎn)換運算符()等。

?表達式是由運算符和操作數(shù)按一定語法規(guī)則組成的符號序

歹I」。如:a+b、(a+b)*(a—b)、"name=〃+〃李明〃

?每個表達式經(jīng)過運算后都會產(chǎn)生一個確定的值。一個常量

或一個變量是最簡單的表達式。

2.2.1算術(shù)運算符

?算術(shù)運算符一般用于對整型數(shù)和浮點型數(shù)運算。

?算術(shù)運算符有

?+(加)、-(減)、*(乘)、/(除)和%(取余數(shù))五個

二元運算符

?+(正)、-(負)、++(自增)、--(自減)四個一元

運算符。

1.二元運算符

(1)上溢和下溢

?二元運算符+、-、*、/和%分別用來進行加、減、

乘、除和取余運算。

?對*運算符要注意運算結(jié)果的溢出的問題

?對/運算符,若兩個操作數(shù)都為整數(shù),結(jié)果為兩個

操作數(shù)整除的商,只保留整數(shù)。

?請看下面一段代碼:

(1)上溢和下溢

inta=12345,b=234567,c,d;

longe,f;

c二a*b/b;//a*b超出了int類型,被截短再除以b,結(jié)果不正確

d=a/b*b;〃a/b是整數(shù)除法,結(jié)果為0,因此d的結(jié)果為0

System,out.println(z/c=〃+c);

System,out.println(,zd=〃+d);

e=(long)a*b/b;〃a被轉(zhuǎn)換為長整型,a*b的類型沒有超

過long的范圍,再除以b得到的結(jié)果正確

f二(long)a/b*b;

System,out.printin(〃e=〃+e);

System,out.println(z/f=〃+f);

(2)取余運算符

?%運算符用來求兩個操作數(shù)相除的余數(shù),操作數(shù)可以為整

數(shù),也可以為浮點數(shù)。例如7%4的結(jié)果為3,10.5%2.5的結(jié)

果為0.5o

?當操作數(shù)含有負數(shù)或?qū)Ω↑c數(shù)取余時,規(guī)則是余數(shù)的符號

與被除數(shù)相同且余數(shù)的絕對值小于除數(shù)的絕對值。例如:

10%3=1

10%-3=1

-10%3=-1

-10%-3=-1

(2)取余運算符

?在求余運算中,如果操作數(shù)涉及到負數(shù),可通過下

面規(guī)則計算結(jié)果:先去掉負號,再計算結(jié)果,結(jié)果

的符號取被除數(shù)的符號。如求-10%-3的結(jié)果,去

掉負號求10%3,結(jié)果為1。由于被除數(shù)是負值,

因此最終結(jié)果為-1。

?在整數(shù)除法及取余運算中,如果除數(shù)為0,則拋出

ArithmeticException異常。當操作數(shù)有一個是浮

點數(shù)時,如果除數(shù)為0,除法運算將返回Infinity

或-Infinity,求余運算將返回NaN。

(3)“+”運算符的重載

?“+”運算符不但可以用于計算兩個數(shù)值型數(shù)據(jù)的

和,還可以用于字符串對象的連接。例如:

System,out.printin(/zabcz/+〃de〃);

?當“+”運算符的兩個操作數(shù)一個是字符串而另一

個是其他數(shù)據(jù)類型,系統(tǒng)會自動將另一個操作數(shù)

轉(zhuǎn)換成字符串,然后再進行連接。例如:

intx=1,y=2,z=3;

System,out.printin(z/abcz/+x+y+z);

?注意下面代碼的輸出

System,out.printin(x+y+z+〃abc〃);

2.一元運算符

?一元運算符+和-用來改變操作數(shù)的符號,

?++和一運算符主要用于對變量的操作,分別稱為自

增和自減運算符,

?++表示加1,一表示減1

?它們都可以使用在變量的前面或后面

?放在變量前,表示給變量加1后再使用該變量;

放在變量的后面,表示使用完該變量后再加1。

程序2.3IncrementTest.java

publicclassIncrementTest{

publicstaticvoidmain(Stringargs[]){

inti=3;

ints=(i++)+(i++)+(i++);

System,out.printin(/zs=〃+s+〃,i=〃+i);

i=3;

s=(++i)+(++i)+(++i);

System,out.println(/zs=〃+s+〃,i=〃+i);

2.2.2關(guān)系運算符:?

?關(guān)系運算符(也稱比較運算符),用來比較兩個值的大

小。

?關(guān)系運算符有〉(大于)、<(小于)、〉二(大于等于)、

〈二(小于等于)、一(等于)、!二(不等于)六個。

?關(guān)系運算符一般用來構(gòu)成條件表達式,比較的結(jié)果返

回true或false。

?Java語言中,任何類型的數(shù)據(jù)(包括基本類型和引用類

型)都可以通過二二和!二比較是否相等,但只有基本類型

的數(shù)據(jù)(布爾型除外)可以比較大小。比較結(jié)果通常作

為判斷條件,如:if(x二二y)

2.2.3位運算符

?在Java語言中,有關(guān)位的運算有兩類:位邏輯運

算(bitwise)和移位運算(shift)o

?位邏輯運算符包括?(按位取反)、&(按位與)、

I(按位或)和人(按位異或)四種。

?移位運算符包括〈<(左移)、〉〉(右移)和〉〉〉(無

符號右移)三種。位運算符只能用于整型數(shù)據(jù),

包括byte、short>int>long和char類型。

?表2.4列出了各種位運算符的功能與示例。

2.2.3位運算符

表2.4位運算符

運算符功能示例

?按位取反op

&按位與opl&op2

按位或oplop2

按位異或oplop2

?按位左移opl<<op2

?按位右移opl>>op2

?>按位無符號右移opl>>>op2

1.位邏輯運算符

?位邏輯運算是對一個整數(shù)的二進制位進行運算。

?設(shè)A、B表示運算數(shù)中的一位,位邏輯運算的規(guī)則如

表2-7所示:

表2.5位邏輯運算的運算規(guī)則

AB?AA&BA|BAAB

001000

011011

100011

110110

2.移位運算符

?Java語言提供了3個移位運算符:?(左移運算符)、

>>(右移運算符)和>>>(無符號右移運算符)。

?左移運算符〃〈〈〃用來將一個整數(shù)的二進制位序

列左移若干位。移出的高位丟棄,右邊添0。

?右移運算符〃〉〉〃用來將一個整數(shù)的二進制位序

列右移若干位。移出的低位丟棄。若為正數(shù),移

入的高位是0,若為負數(shù),移入的高位是1。

?無符號右移運算符“〉〉〉”也是將一個整數(shù)的二進

制位序列右移若干位。它與右移運算符的區(qū)別是,

不論正數(shù)還是負數(shù)左邊一律移入0。

2.移位運算符

?注意位運算符和移位運算符都只能用于整型數(shù)

或字符型數(shù)據(jù),不能用于浮點型數(shù)據(jù)。

2.2.4邏輯運算符

?邏輯運算符的運算對象只能是布爾型數(shù)據(jù),并且

運算結(jié)果也是布爾型數(shù)據(jù)。

?邏輯運算符包括以下幾種:

?!(邏輯非)、&&(短路與)、II(短路或)、&

(邏輯與)、I(邏輯或)、八(邏輯異或)。

?假設(shè)A、B是兩個邏輯型數(shù)據(jù),則邏輯運算的規(guī)

則如表2.6所示:

2.2.4邏輯運算符

表2.6邏輯運算的運算規(guī)則

AB!AA&BA|BAABA&&BA||B

falsefalsetruefalsefalsefalsefalsefalse

falsetruetruefalsetruetruefalsetrue

truefalsefalsefalsetruetruefalsetrue

Htruetruefalsetruetruefalsetruetrue

程序2.4LogicalTest.java

publicclassLogicalTest{

publicstaticvoidmain(Stringargs[]){

intx=1,y=2,z=3;

booleanu=false;

u=!((x>=—y||y++<z—)&&y==z);

System.out.println(Hu=n+u);

y=2;

u=!((x>=-y|y++<z--)&y==z);

System.out.println(nu=n+u);

2.2.5賦值運算符

?賦值運算符用來為變量賦新值。

?賦值運算符主要有兩類,

?一類是使用“二”號賦值,它簡單地把一個表達

式的值賦給一個變量或?qū)ο螅?/p>

?另一類是擴展的賦值運算符。

1.賦值運算符

?賦值運算符〃=〃的一般格式為:

variableName=expression;

?其功能是將等號右邊的表達式的值賦給左邊的變

量。

?賦值運算必須是類型兼容的,即左邊的變量必須

能夠接受右邊的表達式的值,否則會產(chǎn)生編譯錯

誤。如下面的語句會產(chǎn)生編譯錯誤。

intj;

j=3.14;

1.賦值運算符

?如果是對象賦值,則稱為引用賦值。將右邊對象

的引用值(地址)賦給左邊的變量,這樣,兩個變

量地址相同,即指向同一對象。如:

Datedl=newDate();

Dated2=dl;

?此時dl、d2指向同一個對象。

?對象引用賦值與基本數(shù)據(jù)類型的拷貝賦值是不同

的。

2.擴展賦值運算符|::

?在賦值運算符〃二〃前加上其他運算符,即構(gòu)成擴

展賦值運算符。它的一般格式為:

varop=expression;

?例如,下面兩行是等價的:

a+=3;

a=a+3;

?擴展賦值運算符有n個,表2.7給出了所有的擴展

的賦值運算符及其使用方法。

2.擴展賦值運算符

表2.7擴展的賦值運算符

擴展賦值運算符表達式等價表達式

+=opl+=op2opl=opl+op2

___opl-=op2opl=opl-op2

*=opl*=op2opl=opl*op2

/=opl/=op2opl=opl/op2

%=opl%=op2opl=opl%op2

&—op1&=op2opl=opl&op2

1=op11=op2opl=oplop2

A—oplA=op2opl=oplAop2

?=opl?=op2opl=opl?op2

?=opl?=op2opl=opl?op2

?>=opl?>=op2opl=opl?>op2

2.2.6條件運算符

?條件運算符又稱三元運算符,為?:,格式如下:

expression?expressionl:expression2

?條件運算符號可以使用Java的if~else結(jié)構(gòu)表示。

例如,若a,b,c是int型變量,x是boolean型變

量,語句:

a=x?b:c;

?等價于下面的結(jié)構(gòu):

if(x){a=b;}

else{a=c;}

2.2.7運算符的優(yōu)先級

?運算優(yōu)先級是指在一個表達式中出現(xiàn)多個運算符

又沒有用括號分隔時,先運算哪個后運算哪個。

?不同的運算符有不同的運算優(yōu)先級。表2.8中按優(yōu)

先級的順序列出了各種運算符。

?為了使運算次序更明確,一般使用括號指定運算

的次序。

2.2.7運算符的優(yōu)先級

表2.8按優(yōu)先級從高到低的Java運算符

類別運算符結(jié)合性

F運算符+++—!?(type)從右向左

*/%

算術(shù)運算符+—從左向右

移位運算符???>從左向右

<<=>>=instanceof

關(guān)系運算符==1=從左向右

位運算符&八1從左向右

邏輯運算符&&11從左向右

條件運算符?:從左向右

賦值運算符二“op=”從右向左

2.2.8數(shù)據(jù)類型轉(zhuǎn)換

?整型、實型、字符型數(shù)據(jù)可能需要混合運算或相互賦值,

這就涉及到類型轉(zhuǎn)換的問題。

?Java語言是強類型的語言,即每個常量、變量、表達式

的值都有固定的類型,而且每種類型都是嚴格定義的。

?在Java程序編譯階段,編譯器要對類型進行嚴格的檢查,

任何不匹配的類型都不能通過編譯器。如果一定要把一

個浮點型的值賦給一個整型變量,需要進行類型轉(zhuǎn)換。

?在Java中,基本數(shù)據(jù)類型的轉(zhuǎn)換分為自動類型轉(zhuǎn)換和強

制類型轉(zhuǎn)換兩種。

1.自動類型轉(zhuǎn)換

?自動類型轉(zhuǎn)換也稱加寬轉(zhuǎn)換,它是指將具有較少

位數(shù)的數(shù)據(jù)類型轉(zhuǎn)換為具有較多位數(shù)的數(shù)據(jù)類型。

例如:

byteb=64;

inti=b;

?將byte型變量b的值賦給int型變量i,這是合法的,

因為int型數(shù)據(jù)占的位數(shù)多于byte型數(shù)據(jù)占的位數(shù),

這就是自動類型轉(zhuǎn)換。

1.自動類型轉(zhuǎn)換

表2.9Java允許的自動類型轉(zhuǎn)換

原數(shù)據(jù)類型可以轉(zhuǎn)換成的數(shù)據(jù)類型

byteshort>int、long>float、double

shortint、long、float、double

charint>long>float>double

intlong、float、double

longfloat、double

floatdouble

自動類型轉(zhuǎn)換

char

byte___short

float___double

圖2-1Java數(shù)據(jù)類型的自動轉(zhuǎn)換

1.自動類型轉(zhuǎn)換

?當使用二元運算符對兩個值進行計算時,如果兩

個操作數(shù)類型不同,一般要自動轉(zhuǎn)換成更寬的類

型。

?例如,計算n+f,其中n是整數(shù),f是浮點數(shù),

則結(jié)果為float型數(shù)據(jù)。對于寬度小于int型數(shù)

據(jù)的運算,結(jié)果為int型。

?注意布爾型數(shù)據(jù)不能與其他任何類型的數(shù)據(jù)相互

轉(zhuǎn)換。

2.強制類型轉(zhuǎn)換

?可以將高級數(shù)據(jù)類型轉(zhuǎn)換為低級數(shù)據(jù)類型,這時需要通過

強制類型轉(zhuǎn)換來完成。

?其語法是在圓括號中給出要轉(zhuǎn)換的目標類型,隨后是待轉(zhuǎn)

換的變量名。例如:

byteb=5;

doubled=333.567;

b二(byte)d;〃將double型值強制轉(zhuǎn)換成byte類型值

?由此可見,強制類型轉(zhuǎn)換有時可能要丟失信息。因此,在

進行強制類型轉(zhuǎn)換時應(yīng)測試轉(zhuǎn)換后的結(jié)果是否在正確的范

圍。

3.表達式中類型的自動提升

?除了賦值要發(fā)生類型轉(zhuǎn)換外,在含有變量的表達

式中也有類型轉(zhuǎn)換的問題,如:

bytea=40;

byteb=50;

bytec;

c=a+b;〃編譯錯誤

c=(byte)(a+b);

inti=a+b;

3.表達式中類型的自動提升

?但是下面代碼不發(fā)生編譯錯誤,即常量表達式不

發(fā)生類型提升。如:

c=40+50;

?自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換的問題也發(fā)生在對

象中,對象的強制類型轉(zhuǎn)換也使用括號實現(xiàn)。

?關(guān)于對象類型的轉(zhuǎn)換問題,請參閱第5章。

2.3流程控制語句

?2.3.1數(shù)據(jù)的輸入輸出

?2.3.2選擇結(jié)構(gòu)

?2.3.3循環(huán)結(jié)構(gòu)

2.3流程控制語句

?流程控制是幾乎所有編程語言的基本功能,它們

主要用來控制程序中各語句的執(zhí)行順序。

?在Java語言中最主要的流程控制方式是結(jié)構(gòu)化程

序設(shè)計中規(guī)定的三種基本流程結(jié)構(gòu),即順序結(jié)構(gòu)、

選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。

2.3.1數(shù)據(jù)的輸入輸出

1.格式化輸出

?在Java1.6中還可以使用一種與C語言的printf()

串數(shù)類似的格式化輸出方法,定義在

java.io.PrintStream類中,格式如下:

publicPrintStreamprintf(Stringformat,Object…args)

?參數(shù)format是格式控制字符串,其中可以嵌入格

式符(Specifier)指定參數(shù)如何輸出。args為輸

出參數(shù)列表,參數(shù)可以是基本數(shù)據(jù)類型,也可以

是引用數(shù)據(jù)類型。

1.格式化輸出

?格式符的一般格式如下:

%[argument_index^>][flags]^width\[.precision\conversion

?格式符以百分號(%)開頭,至少包含一個轉(zhuǎn)義字符,其

他為可選內(nèi)容。

?arg〃勿6771_,77加工用來指定哪個參數(shù)應(yīng)用該格式。例如,

“%2$”表示列表中的第2個參數(shù)。

?Flags用來指定一個選項,如“+”表示數(shù)據(jù)前面添一個加

號,“0”表示數(shù)據(jù)前面用0補充。

?應(yīng)心力和夕recox分別表示數(shù)據(jù)所占最少的字符數(shù)和小數(shù)

的位數(shù)。

?為指定的格式符,表2-10列出了常用的格式符。

1.格式化輸出

表2-10常用的格式符

格式符含義

%d結(jié)果被格式化成十進制整數(shù)

%f結(jié)果被格式化成十進制浮點數(shù)

%s結(jié)果以字符串輸出

%b結(jié)果以布爾值(true或false)形式輸出

%c結(jié)果為Unicode字符

(1)“%d”格式符

?"%d”用來輸出十進制整數(shù),可以有長度修飾。如果指定

的長度大于實際的長度,則前面補以空格;如果指定的長

度小于實際的長度,則以實際長度輸出。例如:

System,out.printf(/zyear二|%6d|%n/z,2005);

輸出結(jié)果為:year二|20051

?"%d”可以應(yīng)用的數(shù)據(jù)類型有byte、Byte、short>Short>

int、Integer、long、Long>Biglntegero

?下面的語句是錯誤的,將產(chǎn)生運行時異常。

System,out.printf(〃%8d〃,10.10);

?下面的語句是正確的,因為參數(shù)被轉(zhuǎn)換成了int數(shù):

System,out.printf(〃%8d〃,(int)10.10);

(2)“%f”格式符

?"%f”用來以小數(shù)方式輸出??梢詰?yīng)用下列浮點型數(shù)

據(jù):float、Float、double>Double>BigDecimalo

可以指定格式寬度和小數(shù)位,也可以僅指定小數(shù)位。

?例如:System,out.printf(z/%8.3f|z/,2005.1234);

輸出結(jié)果為:2005.123

?注意,如果使用格式符“%f”,而參數(shù)為整型數(shù),也

會產(chǎn)生運行時異常,如下面語句是錯誤的,因為2005

是整數(shù):

System,out.printf(z/%8.3f〃,2005);

(3)“%c”格式符______|r

?“蹌”用來以字符方式輸出。它可以應(yīng)用的數(shù)據(jù)

類型有:char、Character、byte>Byte>short>

Short,這些數(shù)據(jù)類型都能夠轉(zhuǎn)換成Unicode字符。

byteb=65;

System,out.printf(〃b=%c%n〃,b);

輸出結(jié)果為:

b=A

(4)“%b”格式符

?“加”格式符可以用在任何類型的數(shù)據(jù)上。如果參數(shù)值為

null,結(jié)果輸出false;如果參數(shù)是boolean或Boolean類

型的數(shù)據(jù),結(jié)果是調(diào)用String.valueOf()方法的結(jié)果,否

則結(jié)果是true。例如:

byteb=0;Strings=null;

System,out.printf(〃bl=%b%n〃,b);

System,out.printf(〃b2二%b%n〃,true);

System,out.printf(〃b3二%b%n〃,s);

?輸出結(jié)果為:

bl二true

b2二true

b3=false

(5)“%s”格式符

?"%S”格式符也可以用在任何類型的數(shù)據(jù)上。如果參數(shù)值

為null,結(jié)果輸出null;如果參數(shù)實現(xiàn)了Formatter接口,

結(jié)果是調(diào)用args.formatTo()的結(jié)果,否則,結(jié)果是調(diào)用

args.toStringO的結(jié)果。

?如果將上面代碼中“%b”改為“%s”,輸出結(jié)果為:

bl=0

b2二true

b3二null

2.格式化輸入

?傳統(tǒng)的方法是將標準輸入System,in轉(zhuǎn)換成字符輸

入流,然后從中讀取數(shù)據(jù),再轉(zhuǎn)換成需要的數(shù)據(jù)

類型,這種方法對初學(xué)者來說較難。

?在java,util包中提供了一個Scanner類,使用這

個類可以方便地從鍵盤上讀取各種類型的數(shù)據(jù)。

程序2?5ComputeArea.java

?下面例子從鍵盤上讀取一個浮點數(shù),然后輸出以

這個浮點數(shù)為半徑的圓的面積。

importjava.util.Scanner;

publicclassComputeArea{

publicstaticvoidmain(String[]args){

//創(chuàng)建Scanner類的對象

Scannersc=newScanner(System.in);

System.out.print("請輸入半徑值:”);

doubleradius=sc.nextDouble();

System.out.printf("面積=%10.2f%n",Math.Prradius*radius);

}

)

程序2.6ComputeLoan,java

importjava.util.Scanner;

publicclassComputeLoan{

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System,in);

System.out.print(〃請輸入年利率:〃);

doubleannualRate=sc.nextDouble();

doublemonthlyRate=annualRate/1200;//計算月利率

System.out.print(〃請輸入貸款總額:〃);

doubleloanAmount=sc.nextDouble();

System,out.print(〃請輸入年數(shù):〃);

doublenumberOfYear=sc.nextDouble();

doublemonthlyPayment=1oanAmount*monthlyRate/(1-

1/Math.pow(l+monthlyRate,numberOfYear*12));

doubletotalPayment=monthlyPayment*12*number0fYear;

System,out.printf(〃月支付額:%.2f%nz/,monthlyPayment);

System,out.printf(〃總支付額:%.2f%n〃,totalPayment);

2.3.2選擇結(jié)構(gòu)

?Java語言提供了兩種選擇結(jié)構(gòu),

?if?else結(jié)構(gòu)

?switch結(jié)構(gòu)

1.if?else語句

?可以實現(xiàn)單分支和雙分支結(jié)構(gòu)。

?if語句的一般格式如下:

if(boolean-express!on)

statements1;

.else

statements2

1.if?else語句

?下面的程序要求從鍵盤上輸入一個年份,輸出該

年是否是閏年。符合下面兩個條件之一的年份即

為閏年:①能被4整除,但不能被100整除;②

能被400整除。

程序2.7LeapYear.java

importjava.util.Scanner;

publicclassLeapYear(

publicstaticvoidmain(Stringargs[]){

Scannersc=newScanner(System,in);

System.out.print(〃請輸入年份:〃);

intyear=sc.nextlnt();

if((year%4==0&&year%100!=0)||year%400==0){

System,out.printin(year+/z年是閏年?!?;

}else{

System,out.printin(year+/z年不是閏年?!?;

1.if?else語句

?if語句可以嵌套,但是嵌套必須合理。

?下面的程序輸出給定的3個整數(shù)的最大值。

程序2.8MaxNumber.java

publicclassMaxNumber{

publicstaticvoidmain(Stringargs[]){

inta=10,b=20,c=30;intmax;

if(a>b){//a大于b的情況

if(a>c)//a再跟c比較

max=a;

else

max=c;

}else{//a小于等于b的情況

if(b>c)//b再跟c比較

max=b;

else

max=c;

)〃〃

System.out.printin(〃Maxnumberis:〃+max);

2.switch語句

?如果需要在多個選項選擇其中一個,可以使用switch語句。

?switch語句主要實現(xiàn)多分支結(jié)構(gòu),一般格式如下:

switch(expression){

casevalue1\

statementsequence

[break;]

casevalue2:

statementsequence

[break;]

casevaluew:

statementsequence

[break;]

[default:

statementsequence]

2.switch語句

?程序進入switch結(jié)構(gòu),首先計算expression的值,然后用

該值依次與每個case中的常量(或常量表達式)的值進行

比較,如果等于某個值,則執(zhí)行該case子句中后面的語句,

直到遇到break語句為止。

?break語句的功能是退出switch結(jié)構(gòu)。如果在某個情況處理

結(jié)束后就離開switch結(jié)構(gòu),則必須在該case結(jié)構(gòu)的后面加

上break語句。

?default子句是可選的,當表達式的值與每個case子句中的

值都不匹配時,就執(zhí)行default后的語句。

?如果表達式的值與每個case子句中的值都不匹配,且又沒

有default子句,則程序不執(zhí)行任何操作,而是直接跳出

switch結(jié)構(gòu),執(zhí)行后面的語句。

2.switch語句

?下面的程序是給定學(xué)生的一個百分制成績,打印

輸出等級的成績。等級的規(guī)定為,90分(包括)

以上的為“A”,80分(包括)以上的為“B”,

60分(包括)以上的為“C”,60分以下為“D”。

程序2.9GradeTest.java

publicclassGradeTest(

publicstaticvoidmain(Stringargs[]){

intgrade=75;charg='';

grade=grade/10;

switch(grade){

default:g二,》;break

case10:

case9:g二'A';break;

case8:g二,B,;break;

case7:

case6:g二'c';break;

System,out.printin(zzYourgradelevelis〃+g);

2.3.3循環(huán)結(jié)構(gòu)

?在程序設(shè)計中,有時需要反復(fù)執(zhí)行一段相同的代

碼,這時就需要使用循環(huán)結(jié)構(gòu)來實現(xiàn)。

?Java語言提供了4種循環(huán)語句:

?while循環(huán)

?do-while循環(huán)

?for循環(huán)

?增強的for循環(huán)

2.3.3循環(huán)結(jié)構(gòu)

?一般情況下,一個循環(huán)結(jié)構(gòu)包含四部分內(nèi)容:

①初始化部分(initialization):設(shè)置循環(huán)開始

時的程序狀態(tài)。

②循環(huán)條件(condition):循環(huán)條件一般是一個布

爾表達式,當表達式的值為true時執(zhí)行循環(huán)體,

為false時退出循環(huán)。

③循環(huán)體部分(loopbody):需要重復(fù)執(zhí)行的代碼。

④迭代部分(iteration):改變變量的狀態(tài)。

1.while循環(huán)

?while語句是Java最基本的循環(huán)語句,這種循環(huán)是

在某個條件為true時,重復(fù)執(zhí)行一個語句或語句

塊。它的一般格式如下:

.initialization]

while(boolean_express!on){

bodyofloop

[iteration]

1.while循環(huán)

?該循環(huán)首先判斷循環(huán)條件,當條件為true時,

直反復(fù)執(zhí)行循環(huán)體。這種循環(huán)一般稱為“當循

?一般用在循環(huán)次數(shù)不確定的情況下。

?while循環(huán)的執(zhí)行流程如圖2.2所示:

1.while循環(huán)

圖2.2while循環(huán)結(jié)構(gòu)圖2.3do-while循環(huán)結(jié)構(gòu)

程序2.10IncreRate.java

publicclassIncreRate(

publicstaticvoidmain(Stringargs[]){

doublerate=0.078;

intn=0;

doublesum=1.0;

while(sum<2){

sum=sum+sum*rate;

n=n+1;

System,out.printf("year二%d%n〃,n);

System,out.printf("sum=%4.2f%n〃,sum);

2.do-while循環(huán)

?do-while循環(huán)的一般格式如下:

.initialization]

do{

loopbody

[iteration]

)while(termination);

2.do-while循環(huán)

?do-while循環(huán)執(zhí)行過程如圖2.3所示。

?它是先執(zhí)行循環(huán)體,然后計算條件表達式

termination0如果表達式的值為true,則返回到

循環(huán)的開始繼續(xù)循環(huán)體,直到termination的值為

false循環(huán)結(jié)束。

?這種循環(huán)一般稱為“直到型”循環(huán)。該循環(huán)結(jié)構(gòu)

與while循環(huán)結(jié)構(gòu)的不同之處是,do-while循環(huán)至

少執(zhí)行一次循環(huán)體。

程序2.11AvgNumber.java

importjava.util.Scanner;

publicclassAvgNumber{

publicstaticvoidmain(Stringargs[]){

Scannersc=newScanner(System,in);

doublesum=0.0;doubleavg=0.0;intnum=0;

do(

System.out.print(,zPleaseInputaNumber(0exit)”);

doubled=sc.nextDouble();

if(d==0)

break;

else{

sum=sum+d;num=num+1;avg=sum/num;

}

}while(true);

System.out.printf(^Averageof%dnumberis:%.2f%n〃,num,avg);

}}

3.for循環(huán)與增強的for循環(huán)

?for循環(huán)是Java語言中4種循環(huán)結(jié)構(gòu)中功能最強,

也是使用最廣泛的循環(huán)結(jié)構(gòu)。

?for循環(huán)的一般格式如下:

for(initialization;termination;

iteration){

loopbody

for循環(huán)

?在for循環(huán)中,initialization為循環(huán)的初始化部分,

termination為循環(huán)的條件,iteration為迭代部分,三部

分需用分號隔開。

?for循環(huán)開始執(zhí)行時首先執(zhí)行初始化部分,并且該部分在

整個循環(huán)中只執(zhí)行一次。在這里可以定義循環(huán)變量并賦初

值,可以定義多個循環(huán)變量,中間用逗號分隔。

?接下來判斷循環(huán)的終止條件,若為true則執(zhí)行循環(huán)體部分,

否則退出循環(huán)。

?當循環(huán)體執(zhí)行結(jié)束后,程序控制返回到迭代部分,執(zhí)行迭

代,然后再次判斷終止條件,若為true則反復(fù)執(zhí)行循環(huán)體。

for循環(huán)

?在初始化部分可以聲明多個變量,它們的作用域

在循環(huán)體內(nèi),如下面循環(huán)中聲明了兩個變量i和j。

for(inti=0,j=10;i<j;i++,j—)

?for循環(huán)中的一部分或全部可為空,循環(huán)體也可

為空,但分號不能省略,如:

for(;;){)

for循環(huán)和while、do?while循環(huán)相互轉(zhuǎn)換

?例如:

for(inti=0,j=10;i<j;i++,j—){

System,out.printin(z/i=〃+i+〃,j=〃+j);

}

?可以轉(zhuǎn)換為下面等價的while循環(huán)結(jié)構(gòu)。

inti=0,j=10;

while(i<j){

System,out.printin(/zi=〃+i+〃,j=〃+j);

i++;

j—;

增強的for循環(huán)

?在J2SE5.0中,Java語言增加了一種循環(huán)結(jié)構(gòu),

稱為增強的for循環(huán),它主要用于對數(shù)組和集合對

象的元素的迭代。

?關(guān)于增強的for循環(huán)將在4.1.2節(jié)中討論。

4.循環(huán)結(jié)構(gòu)與分支結(jié)構(gòu)的嵌套

?下面的程序隨機產(chǎn)生一個100?200之間的整數(shù),用

戶從鍵盤上輸入所猜的數(shù),程序顯示是否猜中的

消息,如果沒有猜中要求用戶繼續(xù)猜,直到猜中

為止。

程序2.12GuessNumber.java

importjava.util.Scanner;

publicclassGuessNumber{

publicstaticvoidmain(Stringargs[]){

intmagic=(int)(Math,random()*101)+100;intguess;

Scannersc二newScanner(System,in);

System.out.print(''Inputtheguessnumber:");

guess=sc.nextlnt();

do(

if(guess!=magic){

if(guess>magic)

System.out.print(''Wrong!toohigh.Guessagain:");

else

System.out.print(''Wrong!toolow.Guessagain:");

)

guess=sc.nextlnt();

}while(guess!=magic);

System.out.println(,,Right!\nThenumberis〃+magic);

5.continue語句和break語句

?在Java循環(huán)體中可以使用continue語句和break語

句。這兩個語句的格式為:

continue;

bre

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論