java變量與基礎(chǔ)語法課件_第1頁
java變量與基礎(chǔ)語法課件_第2頁
java變量與基礎(chǔ)語法課件_第3頁
java變量與基礎(chǔ)語法課件_第4頁
java變量與基礎(chǔ)語法課件_第5頁
已閱讀5頁,還剩129頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

JAVA變量與基礎(chǔ)語法

java變量與基礎(chǔ)語法課件◆標(biāo)識(shí)符與關(guān)鍵字◆基本數(shù)據(jù)類型◆運(yùn)算符與表達(dá)式◆程序的流程結(jié)構(gòu)(分支,循環(huán))◆數(shù)組◆方法◆基本的輸入與輸出本章目標(biāo)◆標(biāo)識(shí)符與關(guān)鍵字本章目標(biāo)簡(jiǎn)單輸出語句◆如果要將某些信息打印到屏幕上,就必須使用輸出語句;◆使用System.out.println()實(shí)現(xiàn)換行輸出效果;◆使用System.out.print()實(shí)現(xiàn)輸出但不換行效果;◆無論輸出什么類型的數(shù)據(jù),只需將數(shù)據(jù)作為參數(shù)傳遞給它們即可,而無需像C語言中那樣,使用%s、%d之類的控制字符,如:

inta=10;

floatf=3.14f; System.out.println(a); System.out.print(f); System.out.println('X');簡(jiǎn)單輸出語句◆如果要將某些信息打印到屏幕上,就必須使用輸出語簡(jiǎn)單輸入語句◆使用System.in.read()實(shí)現(xiàn)輸入效果;◆

read()函數(shù)的返回值是字符的Unicode值,是int類型的。public

static

voidmain(String[]args)

throwsIOException{

intcharc=System.in.read();System.out.printf("%c",charc);}◆

JDK5中還增加了Scanner類用于,可用于輸入。簡(jiǎn)單輸入語句◆使用System.in.read()實(shí)現(xiàn)輸入效◆概念:

在編寫程序時(shí),對(duì)各種變量,方法和類等要素命名時(shí)使用的字符序列稱為標(biāo)識(shí)符?!裘?guī)則:只能由字母,下劃線,美元符或數(shù)字組。只能由字母,下劃線”_”和美元符”$”開頭。不能是java中的關(guān)鍵字和保留字?!粽f明:java中嚴(yán)格區(qū)分大小寫,所以標(biāo)識(shí)符也是大小寫敏感的,但長(zhǎng)度沒有限制。約定俗成:java標(biāo)識(shí)符的選取要做到”見名知其意”且不能為java語言中的關(guān)鍵字。定義時(shí)盡量不要與預(yù)定義標(biāo)識(shí)符重名。標(biāo)識(shí)符◆概念:標(biāo)識(shí)符◆關(guān)鍵字:

java中一些賦予特定的含義,用做專門用途的字符串稱為關(guān)鍵字(Keyword)。

說明:

在一些編輯器和IDE中會(huì)將關(guān)鍵字使用特殊方式和顏色標(biāo)出來。在java中所有的關(guān)鍵字都是英文小寫。

在java中g(shù)oto和const雖然從未被使用,也當(dāng)作關(guān)鍵字保留了下來?!舯A糇郑?/p>

不是關(guān)鍵字,但在程序中又不能作為用戶定義標(biāo)識(shí)符的字符串(reservedwords)。Java中的保留字有:true,false,和null。關(guān)鍵字與保留字◆關(guān)鍵字:關(guān)鍵字與保留字JAVA中的關(guān)鍵字abstractcontinuefornewswitchassert***defaultgoto*packagesynchronizedbooleandoifprivatethisbreakdoubleimplementsprotectedthrowbyteelseimportpublicthrowscaseenum****instanceofreturntransientcatchextendsintshorttrycharfinalinterfacestaticvoidclassfinallylongstrictfp**volatileconst*floatnativesuperwhileJAVA中的關(guān)鍵字abstractcontinueforne關(guān)鍵字說明*notused**addedin1.2***addedin1.4****addedin5.0關(guān)鍵字說明*notused**addedin1.2**標(biāo)識(shí)符舉例合法標(biāo)識(shí)符非法標(biāo)識(shí)符非法說明TeStHelloWorld含有空格A11A數(shù)字開頭$ab@sb含有不合法字母@mainboolean關(guān)鍵字Truetrue保留字_boolean標(biāo)識(shí)符舉例合法標(biāo)識(shí)符非法標(biāo)識(shí)符非法說明TeStHelloW◆java的常量類型:

◆整型常量:十進(jìn)制(12),十六進(jìn)制(0x12),八進(jìn)制(012)

◆長(zhǎng)整型常量:13L◆單精度浮點(diǎn)數(shù):5.1f,.4f,2e3f,0f◆雙精度浮點(diǎn)數(shù):5.1,.4,2e-3,0d說明:?jiǎn)尉雀↑c(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)統(tǒng)稱為實(shí)型數(shù)。默認(rèn)的小數(shù)為雙精度浮點(diǎn)數(shù)?!暨壿嫵A浚簍rue和falseJava常量◆java的常量類型:Java常量◆字符常量:‘a(chǎn)’,‘8’,'\u0027'‘\r‘表示接受鍵盤輸入,相當(dāng)于按下了回車鍵;‘\n‘是換行;‘\t‘是制表符,相當(dāng)于table鍵;‘\b‘是退格鍵,相當(dāng)于BackSpace;‘\‘‘是單引號(hào),而‘\“‘是雙引號(hào);‘\\‘是一個(gè)斜杠“\”。

◆字符串常量:“helloproject”

注意點(diǎn):

◆字符串常量和字符常量的區(qū)別。

◆注意常量這個(gè)名詞的應(yīng)用語境,有時(shí)候,常量這個(gè)名詞應(yīng)用在其他語境中表示值不可變的變量。參見”final關(guān)鍵字”。

Java常量◆字符常量:Java常量◆概念:變量是系統(tǒng)為程序分配的一塊內(nèi)存存儲(chǔ)單元,用來存儲(chǔ)各種數(shù)據(jù)類型的數(shù)據(jù),根據(jù)所存儲(chǔ)的變量值的數(shù)據(jù)類型不同,可以劃分為各種不同數(shù)據(jù)類型的變量,其要素為變量名,數(shù)據(jù)類型,變量值和作用域??梢愿鶕?jù)變量名稱來訪問其對(duì)應(yīng)內(nèi)存存儲(chǔ)單元中的變量值.如下定義了一個(gè)變量:intage=20;(其在內(nèi)存表示如右圖)

Java變量age20age表示變量名20表示存儲(chǔ)單元名稱為age中的值◆概念:Java變量age20age表示變量名20表示存儲(chǔ)◆請(qǐng)參見java變量按數(shù)據(jù)類型劃分的圖Java變量數(shù)據(jù)類型數(shù)據(jù)類型基本數(shù)據(jù)類型引用數(shù)據(jù)類型數(shù)值型字符型(char)布爾型(boolean)整數(shù)類型(byte,int,short,long)浮點(diǎn)類型(float,double)類(class)接口(interface)數(shù)組◆請(qǐng)參見java變量按數(shù)據(jù)類型劃分的圖Java變量數(shù)據(jù)類型數(shù)byte占用一個(gè)字節(jié),數(shù)字大小為-27—27-1short占用兩個(gè)字節(jié),數(shù)字大小為-215—215-1int占用四個(gè)字節(jié),數(shù)字大小為-231—231-1long占用八個(gè)字節(jié),數(shù)字大小為-263—263-1float占用四個(gè)字節(jié),數(shù)字大小為1.4E-45~3.4E+38,-1.4E-45~-3.4E+38。用二進(jìn)制的指數(shù)形式表示一個(gè)浮點(diǎn)數(shù)的格式,如:101*22,101*2-3double占用八個(gè)字節(jié),數(shù)字大小為4.9E-324~1.7E+308,-4.9E-324~-1.7E+308。char占兩個(gè)字節(jié),數(shù)字大小為0—216-1,是unicode編碼。字符的本來面目,我們?yōu)槭裁纯梢灾苯訉⒁粋€(gè)數(shù)字賦給字符變量。boolean占一個(gè)字節(jié),其取值只有兩個(gè),true和false。JAVA變量字節(jié)大小及有效取值范圍byte占用一個(gè)字節(jié),數(shù)字大小為-27—27-1JAVA變量◆變量定義:

java程序中每個(gè)變量都屬于特定的數(shù)據(jù)類型,在使用前必須對(duì)其聲明,聲明格式為:

dataTypevariableName[=variableValue];◆變量聲明舉例:

intage=20;

floatprice=20.06f;doubled1,d2,d3=0.456;intx=1,y;

y=x+3;注意:從本質(zhì)上講,變量其實(shí)是內(nèi)存中的一小塊內(nèi)存單元,可以通過其名字(變量名)來訪問這塊區(qū)域,因此,每個(gè)變量使用前必須要先申請(qǐng)(聲明),然后必須對(duì)其進(jìn)行賦值,才可以使用。

Java變量的定義◆變量定義:Java變量的定義JAVA變量的默認(rèn)值DataTypeDefaultValue(forfields)byte0short0int0long0Lfloat0.0fdouble0.0dchar'\u0000'String(oranyobject)

nullbooleanfalseJAVA變量的默認(rèn)值DataTypeDefaultVal◆按被聲明的位置劃分

◆局部變量::方法的參數(shù)列表中和方法內(nèi)部以及語句塊中聲明的變量。

◆成員變量:

方法外面且在類的里面聲明的變量?!綮o態(tài)成員變量:用static關(guān)鍵字修飾的成員變量。

注意:java語言中,類外面(與類對(duì)應(yīng)的大括號(hào)外面)不能有變量的聲明.◆按所屬的數(shù)據(jù)類型劃分

◆基本數(shù)據(jù)類型變量

◆引用數(shù)據(jù)類型變量Java變量的分類◆按被聲明的位置劃分Java變量的分類◆初始化問題:Java的成員變量在聲明時(shí),如果沒有指定初始化的值,系統(tǒng)會(huì)根據(jù)成員變量的數(shù)據(jù)類型給出默認(rèn)的值,但局部變量在聲明時(shí)候沒有初始化,則系統(tǒng)不會(huì)給出默認(rèn)的初始化值,如果在使用前,沒有對(duì)其進(jìn)行初始華,在編譯時(shí)就會(huì)報(bào)錯(cuò)。請(qǐng)看下面的代碼:publicvoidmethodName(){intheight;intwidth=height+5;//編譯出錯(cuò),height還沒有被初始化.}Java的局部變量和成員變量◆初始化問題:Java的局部變量和成員變量◆分類:自動(dòng)類型轉(zhuǎn)換(也叫隱式類型轉(zhuǎn)換)強(qiáng)制類型轉(zhuǎn)換(也叫顯式類型轉(zhuǎn)換)◆類型轉(zhuǎn)換的原理及什么時(shí)候要用強(qiáng)制類型轉(zhuǎn)換◆表達(dá)式的數(shù)據(jù)類型自動(dòng)提升分析System.out.println(‘a(chǎn)’+1)與 System.out.println(“”+’a’+1)的區(qū)別。Java數(shù)據(jù)類型轉(zhuǎn)化byteshortcharintlongfloatdouble◆分類:Java數(shù)據(jù)類型轉(zhuǎn)化byteshortcharin◆變量的作用域指變量起作用的范圍,說明變量在什么部分可以被訪問;◆變量的生命周期是指變量在內(nèi)存中存在的周期,即什么時(shí)候分配空間,什么時(shí)候銷毀;◆變量要先定義,后使用,但也不是在變量定義后的語句一直都能使用前面定義的變量。我們可以用大括號(hào)將多個(gè)語句包起來形成一個(gè)復(fù)合語句,變量只能在定義它的復(fù)合語句中使用。JAVA變量的生命周期與作用域◆變量的作用域指變量起作用的范圍,說明變量在什么部分可以被publicclassTestScope{publicstaticvoidmain(String[]args){ intx=12;{intq=96;//x和q都可用

intx=3;//錯(cuò)誤的定義,Java中不允許有這種嵌套定義

System.out.println("xis"+x);System.out.println("qis"+q);}q=x;/*錯(cuò)誤的行,只有x可用,q超出了作用域范圍*/System.out.println("xis"+x);}}JAVA變量的生命周期與作用域JAVA變量的生命周期與作用域◆運(yùn)算符是一種特殊符號(hào),用以表示數(shù)據(jù)的運(yùn)算、賦值和比較,一般由一至三個(gè)字符組成。運(yùn)算符共分以下幾種:算術(shù)運(yùn)算符賦值運(yùn)算符比較運(yùn)算符邏輯運(yùn)算符移位運(yùn)算符java中的運(yùn)算符◆運(yùn)算符是一種特殊符號(hào),用以表示數(shù)據(jù)的運(yùn)算、賦值和比較,一般◆算術(shù)運(yùn)算符◆算術(shù)運(yùn)算符◆“+”除字符串相加功能外,還能把非字符串轉(zhuǎn)換成字符串,如:“x”+123;的結(jié)果是“x123”。如果對(duì)負(fù)數(shù)取模,可以把模數(shù)負(fù)號(hào)忽略不記,如:5%-2=1。但被模數(shù)是負(fù)數(shù)就另當(dāng)別論了。對(duì)于除號(hào)“/”,它的整數(shù)除和小數(shù)除是有區(qū)別的:整數(shù)之間做除法時(shí),只保留整數(shù)部分而舍棄小數(shù)部分。intx=3510;x=x/1000*1000;實(shí)際運(yùn)行結(jié)果是3000,想想為什么?

算術(shù)運(yùn)算符的注意問題◆“+”除字符串相加功能外,還能把非字符串轉(zhuǎn)換成字符串,如◆賦值運(yùn)算符注1:在JAVA里可以把賦值語句連在一起,如:

x=y=z=5;

在這個(gè)語句中,所有三個(gè)變量都得到同樣的值5。注2:x+=3等效于x=x+3,等于*=,-=,/=依此類推。◆賦值運(yùn)算符注1:在JAVA里可以把賦值語句連在一起,如:◆比較運(yùn)算符注1:比較運(yùn)算符的結(jié)果都是boolean型,也就是要么是true,要么是false。注2:比較運(yùn)算符“==”不能誤寫成“=”

,切記!切記!◆比較運(yùn)算符注1:比較運(yùn)算符的結(jié)果都是boolean型,也◆邏輯運(yùn)算符注1:邏輯運(yùn)算符用于對(duì)boolean型結(jié)果的表達(dá)式進(jìn)行運(yùn)算,運(yùn)算的結(jié)果都是boolean型。注2:“&”和“&&”的區(qū)別在于,如果使用前者連接,那么無論任何情況,“&”兩邊的表達(dá)式都會(huì)參與計(jì)算。如果使用后者連接,當(dāng)“&&”的左邊為false,則將不會(huì)計(jì)算其右邊的表達(dá)式?!皘”和“||”的區(qū)別與“&”和“&&”的區(qū)別一樣?!暨壿嬤\(yùn)算符注1:邏輯運(yùn)算符用于對(duì)boolean型結(jié)果的表◆publicclassTestAnd{publicstaticvoidmain(String[]args){intx=0;inty=3;if(x!=0&&y==y/x) System.out.println("y="+y);}}上面例子中,由于while語句的判斷條件中的第一個(gè)布爾表達(dá)式是不成立的,程序就不會(huì)判斷第二個(gè)布爾表達(dá)式的值,這就是“短路”。如果兩個(gè)表達(dá)式之間用“&”來連接,如果正好碰到上面所示的特殊情況,程序運(yùn)行時(shí)就會(huì)出錯(cuò)“&”和“&&”的區(qū)別分析◆publicclassTestAnd“&”和“&&”的◆移位運(yùn)算符適用類型有byte、short、char、int、long對(duì)低于int型的操作數(shù)將先自動(dòng)轉(zhuǎn)換為int型再移位。 對(duì)于int型整數(shù)移位a>>b,系統(tǒng)先將b對(duì)32取模,得到的結(jié)果才是真正移位的位數(shù)。例如:a>>33和a>>1結(jié)果是一樣的,a>>32的結(jié)果還是a原來的數(shù)字。對(duì)于long型整數(shù)移位時(shí)a>>b,則是先將移位位數(shù)b對(duì)64取模。移位不會(huì)改變變量本身的值。如a>>1;在一行語句中單獨(dú)存在,毫無意義。x>>1的結(jié)果和x/2的結(jié)果是一樣的,x<<2和x*4的結(jié)果也是一樣的??傊?,一個(gè)數(shù)左移n位,就是等于這個(gè)數(shù)乘以2的n次方,一個(gè)數(shù)右移n位,就是等于這個(gè)數(shù)除以2的n次方。請(qǐng)思考:如何用程序?qū)崿F(xiàn)求2的x次方。答案:y=1<<x;

移位運(yùn)算注意事項(xiàng)◆移位運(yùn)算符適用類型有byte、short、char、int◆運(yùn)算符的優(yōu)先級(jí)我們可以使用括號(hào)改變運(yùn)算賦的優(yōu)先級(jí),分析inta=2;intb=a+3*a;語句的執(zhí)行過程與inta=2;intb=(a+3)*a;語句的執(zhí)行過程的區(qū)別。◆運(yùn)算符的優(yōu)先級(jí)我們可以使用括號(hào)改變運(yùn)算賦的優(yōu)先級(jí),分析i◆對(duì)于inta=2;intb=a+3*a++;這樣的語句,b最終等于多少呢?作者試驗(yàn)得到的結(jié)果是8。對(duì)于inta=2;intb=(a++)+3*a;這樣的語句,b最終等于多少呢?如何避免多個(gè)運(yùn)算符帶來的問題◆對(duì)于inta=2;intb=a+3*a+◆與其去思考其中的原因,我們還不如將上面的第二句改為幾條語句來實(shí)現(xiàn)我們想要的結(jié)果。不要在一行中編寫太復(fù)雜的表達(dá)式,也就是不要在一行中進(jìn)行太多的運(yùn)算在一行中進(jìn)行太多的運(yùn)算并不能為你帶來什么好處,相反只能帶來壞處,它并不比改成幾條語句的運(yùn)行速度快,它除可讀行差外,還極容易出錯(cuò)。對(duì)于優(yōu)先級(jí)順序,讀者不用刻意去記,有個(gè)印象就行如果你實(shí)在弄不清這些運(yùn)算先后關(guān)系的話,就用括號(hào)或是分成多條語句來完成你想要的功能,因?yàn)槔ㄌ?hào)的優(yōu)先級(jí)是最高的,這也是軟件編碼規(guī)范的一個(gè)要求。如何避免多個(gè)運(yùn)算符帶來的問題◆與其去思考其中的原因,我們還不如將上面的第二句改為幾條語句◆表達(dá)式:表達(dá)式是運(yùn)算符和操作數(shù)的結(jié)合,它是任何一門編程語言的關(guān)鍵組成部分表達(dá)式允許程序員進(jìn)行數(shù)學(xué)計(jì)算、值的比較、邏輯操作以及在Java中進(jìn)行對(duì)象的操作。一些表達(dá)式的例子:◆語句:◆空語句:◆復(fù)合語句:{}◆代碼塊:{}表達(dá)式和語句◆表達(dá)式:表達(dá)式和語句◆順序結(jié)構(gòu)◆選擇結(jié)構(gòu)◆循環(huán)結(jié)構(gòu)顧名思義,順序結(jié)構(gòu)就是程序從上到下一行一行執(zhí)行的結(jié)構(gòu),中間沒有判斷和跳轉(zhuǎn),直到程序結(jié)束。程序的流程控制◆順序結(jié)構(gòu)程序的流程控制◆if(表達(dá)式)語句;◆if(表達(dá)式)語句1;

else語句2;◆if(表達(dá)式1)語句1;

elseif(表達(dá)式2)語句2;

elseif(表達(dá)式2)語句3;

… else語句n;if語句的選擇結(jié)構(gòu)◆if(表達(dá)式)語句;if語句的選擇結(jié)構(gòu)◆每個(gè)語句可以是使用{}組成的復(fù)合語句?!魲l件表達(dá)式:

變量=布爾表達(dá)式?語句1:語句2;◆

If語句還可以嵌套使用

if(表達(dá)式1) if(表達(dá)式2)語句1;

else語句2;

esle if(表達(dá)式2)語句3;

else語句4; 嵌套時(shí)最好使用{}確定層次界限,舉例說明。if語句的選擇結(jié)構(gòu)◆每個(gè)語句可以是使用{}組成的復(fù)合語句。if語句的選擇結(jié)構(gòu)◆Switch(表達(dá)式){ case常量表達(dá)式1:語句1;break; case常量表達(dá)式2:語句2;break; … case常量表達(dá)式n:語句n;break; default:語句n;}default語句是可選的,它接受除上面接受值的其他值,通俗的講,就是誰也不要的都?xì)w它。case后面可以跟多個(gè)語句,這些語句可以不用大括號(hào)括起來。switch語句判斷條件可接受int,byte,char,short型,不可以接受其他類型。一旦碰到第一次case匹配,就會(huì)開始順序執(zhí)行以后所有的程序代碼,而不管后面的case條件是否匹配,后面case條件下的代碼都會(huì)被執(zhí)行,直到碰到break語句為止。我們可以利用這個(gè)特點(diǎn)來用同一段語句處理多個(gè)case條件。switch語句的選擇結(jié)構(gòu)◆Switch(表達(dá)式)switch語句的選擇結(jié)構(gòu)◆While(表達(dá)式)語句;intx=1;while(x<3){System.out.println("x="+x);x++;}腳下留心:while表達(dá)式的括號(hào)后面一定不要加“;”while循環(huán)語句◆While(表達(dá)式)語句;while循環(huán)語句◆do語句;while(表達(dá)式);publicclassTestDo{publicstaticvoidmain(String[]args){ intx=3; while(x==0) { System.out.println("ok1"); x++;}inty=3;do{ System.out.println("ok2"); y++;}while(y==0);}}do-while循環(huán)語句◆do語句;while(表達(dá)式);do-while◆編寫一個(gè)程序,這個(gè)程序不斷地讀取從鍵盤上輸入的字符,直到讀到字符’q’時(shí),程序結(jié)束。◆提示:調(diào)用System.in.read();可以讀取到一個(gè)從鍵盤上輸入字符對(duì)應(yīng)的整數(shù)。通過這個(gè)程序,你一定能體會(huì)到在什么樣的情況下,用do-while循環(huán)語句比while循環(huán)語句方便。do-while循環(huán)語句◆編寫一個(gè)程序,這個(gè)程序不斷地讀取從鍵盤上輸入的字符,直到讀◆for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句;◆for循環(huán)的三個(gè)表達(dá)式中的任意一個(gè)都可以省略,甚至是三個(gè)都可以省略,但是兩個(gè)“;”是不能省略的。◆如下面幾種寫法是等價(jià)的:for(intx=1;x<10;x++){System.out.println("x="+x);}等效于for循環(huán)語句◆for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句;for循環(huán)intx=1;for(;x<10;x++){System.out.println("x="+x);}等效于intx=1;for(;x<10;){System.out.println("x="+x);x++;}等效于intx=1;for(;;){if(x>=10) break;System.out.println("x="+x);x++;}for循環(huán)語句intx=1;for循環(huán)語句◆break語句可以中止循環(huán)中的子語句和switch語句。一個(gè)無標(biāo)號(hào)的break語句會(huì)把控制傳給當(dāng)前(最內(nèi))循環(huán)(while,do.for或Switch)的下一條語句。如果有標(biāo)號(hào),控制會(huì)被傳遞給當(dāng)前方法中的帶有這一標(biāo)號(hào)的語句。如:st:while(true){while(true){ breakst;}}break語句◆break語句可以中止循環(huán)中的子語句和switch語句。一◆continue語句只能出現(xiàn)在循環(huán)語句(while,do,for)的子語句塊中,無標(biāo)號(hào)的continue語句的作用是跳過當(dāng)前循環(huán)的剩余語句塊,接著執(zhí)行下一次循環(huán)。用continue語句的打印出0到10之間的所有奇數(shù)的程序例子。

for(inti=0;i<10;i++){if(i%2==0) continue;System.out.println(i);}continue語句◆continue語句只能出現(xiàn)在循環(huán)語句(while,do,◆Java中的原始數(shù)據(jù)類型與C語言中的基本數(shù)據(jù)類型一樣,其變量都是在棧中分配空間;◆而除了8種原始數(shù)據(jù)類型以外,其它的任何數(shù)據(jù)都不可以在棧中分配,只能到堆中開辟空間,而在堆中分配的空間又只能通過指針訪問;◆通過指針訪問堆內(nèi)存的方式,在Java中被稱作引用數(shù)據(jù)類型;◆可以認(rèn)為,Java中的引用就類似于C語言中的指針,只是對(duì)指針進(jìn)行了一定程度上的包裝,避免了因直接操作指針而造成的數(shù)據(jù)意外損壞,從而導(dǎo)致程序錯(cuò)誤的情況。Java中的內(nèi)存分配◆Java中的原始數(shù)據(jù)類型與C語言中的基本數(shù)據(jù)類型一樣,其◆數(shù)組用于將相同類型的數(shù)據(jù)存儲(chǔ)在連續(xù)的存儲(chǔ)單元中;◆可以通過指定數(shù)組的名稱和長(zhǎng)度來聲明數(shù)組;◆一旦聲明數(shù)組的大小,就不能再修改;◆數(shù)組元素通過數(shù)組名和索引來訪問,索引從0開始;◆數(shù)組可以是一維,也可以是多維。數(shù)組◆數(shù)組用于將相同類型的數(shù)據(jù)存儲(chǔ)在連續(xù)的存儲(chǔ)單元中;數(shù)組◆在Java中,不允許將數(shù)組分配在棧內(nèi)存中,只能分配在堆內(nèi)存中;◆Java中沒有類似于malloc、calloc、realloc和free等函數(shù),取而代之的是new關(guān)鍵字;◆new是Java中內(nèi)置的操作符;◆new操作符用來從堆中分配指定類型的內(nèi)存空間,并返回相應(yīng)類型的引用,其作用類似于malloc函數(shù)。new關(guān)鍵字◆在Java中,不允許將數(shù)組分配在棧內(nèi)存中,只能分配在堆內(nèi)存◆Java中聲明數(shù)組的幾種方式//僅聲明數(shù)組的引用,但沒有分配內(nèi)存空間float[]fAry;//聲明數(shù)組的同時(shí),根據(jù)指定的長(zhǎng)度分配內(nèi)存,但數(shù)組中沒有值char[]chAry=new

char[10];//聲明數(shù)組并分配內(nèi)存,同時(shí)將其初始化int[]ary1=new

int[]{1,2,3,4,5};//與前一種方式相同,僅僅只是語法相對(duì)簡(jiǎn)略int[]ary2={1,2,3,4,5};◆Java中聲明數(shù)組的幾種方式//僅聲明數(shù)組的引用,但沒有分◆C語言中,不可以將數(shù)組直接賦值給另一個(gè)數(shù)組;◆在Java中,語法上允許這樣做,但實(shí)際得到的效果是兩個(gè)數(shù)組引用指向同一塊內(nèi)存。

int[]ary1={2,4,6,8,10};

int[]ary2; ary2=ary1;

數(shù)組之間賦值108642堆棧ary1ary2◆C語言中,不可以將數(shù)組直接賦值給另一個(gè)數(shù)組;數(shù)組之間賦值1◆在Java中,程序員可以不再關(guān)注數(shù)組的長(zhǎng)度,數(shù)組自帶的length屬性將負(fù)責(zé)保管數(shù)組的長(zhǎng)度;◆C語言不檢查數(shù)組的邊界,數(shù)組索引完全由程序員掌握;◆

Java對(duì)數(shù)組下標(biāo)越界情況強(qiáng)加約束;◆如果試圖訪問不在有效索引以內(nèi)的元素,將會(huì)引發(fā)運(yùn)行錯(cuò)誤。關(guān)于數(shù)組長(zhǎng)度◆在Java中,程序員可以不再關(guān)注數(shù)組的長(zhǎng)度,數(shù)組自帶的le數(shù)組賦值示例public

classArrayDemo{

public

static

voidmain(String[]args){

int[]ary1={2,4,6,8,10};//聲明并初始化數(shù)組1

int[]ary2;//聲明數(shù)組2ary2=ary1;//將數(shù)組1賦值給數(shù)組2

ary2[3]=1024;//通過數(shù)組2修改其中一個(gè)元素的值

//打印出數(shù)組1中的元素

System.out.println("數(shù)組1中的元素:");

for(inti=0;i<ary1.length;i++){System.out.println(ary1[i]);}

//打印出數(shù)組2中的元素

System.out.println("數(shù)組2中的元素:");

for(inti=0;i<ary2.length;i++){System.out.println(ary2[i]);}}}數(shù)組賦值示例publicclassArrayDemo{◆如何理解多維數(shù)組,類似我們的棋盤?!鬸ava中并沒有真正的多維數(shù)組,只有數(shù)組的數(shù)組,Java中多維數(shù)組不一定是規(guī)則矩陣形式。多維數(shù)組◆如何理解多維數(shù)組,類似我們的棋盤。多維數(shù)組◆多維數(shù)組中元素的引用方式,如:x[1][2]。◆規(guī)則矩陣數(shù)組可以在一條語句中產(chǎn)生,如:intxx[][]=newint[2][3];◆多維數(shù)組的靜態(tài)初始化,如:

int[][]xx={{3,2,7},{1,5},{6}};多維數(shù)組◆多維數(shù)組中元素的引用方式,如:x[1][2]。多維數(shù)組◆定義一個(gè)多維數(shù)組int[][]xx;xx=newint[3][];xx[0]=newint[3];xx[1]=newint[2];多維數(shù)組◆定義一個(gè)多維數(shù)組多維數(shù)組◆使用循環(huán)作數(shù)組復(fù)制int[]arr1={1,2,3,4,5};int[]arr2=newint[5];for(inti=0;i<arr1.length;i++)arr2[i]=arr1[i];for(inti=0;i<arr2.length;i++)System.out.print(arr2[i]+"");System.out.println();數(shù)組復(fù)制◆使用循環(huán)作數(shù)組復(fù)制數(shù)組復(fù)制◆不可用'=='比較兩個(gè)數(shù)組的元素值是否相等int[]arr1={1,2,3,4,5};int[]arr2={1,2,3,4,5};int[]tmp=arr1;System.out.println(arr1==tmp);System.out.println(arr2==tmp);數(shù)組比較◆不可用'=='比較兩個(gè)數(shù)組的元素值是否相等數(shù)組比較foreach與數(shù)組◆加強(qiáng)的for循環(huán)(EnhancedforLoop)

for(typeelement:array){

System.out.println(element)....

}◆J2SE5.0之前

int[]arr={1,2,3,4,5};

for(inti=0;i<arr.length;i++)

System.out.println(arr[i]);◆在J2SE5.0之后

int[]arr={1,2,3,4,5};

for(intelement:arr)

System.out.println(element);foreach與數(shù)組◆加強(qiáng)的for循環(huán)(Enhancedfforeach與數(shù)組◆如果是對(duì)象的話◆二維數(shù)組String[]names={"caterpillar","momor","bush"};for(Stringname:names)System.out.println(name);int[][]arr={{1,2,3},{4,5,6},{7,8,9}};for(int[]row:arr){for(intelement:row){System.out.println(element);}}foreach與數(shù)組◆如果是對(duì)象的話String[]nam◆函數(shù)(子程序)的概念與作用。◆定義一個(gè)函數(shù)的格式:返回值類型函數(shù)名(參數(shù)類型形式參數(shù)1,參數(shù)類型形式參數(shù)2,….){程序代碼

[return返回值;]}其中:形式參數(shù):在方法被調(diào)用時(shí)用于接收外部傳入的數(shù)據(jù)的變量。參數(shù)類型:就是該形式參數(shù)的數(shù)據(jù)類型。返回值:方法在執(zhí)行完畢后返還給調(diào)用它的程序的數(shù)據(jù)。返回值類型:函數(shù)要返回的結(jié)果的數(shù)據(jù)類型。如沒有返回值,則為void。實(shí)參:調(diào)用函數(shù)時(shí)實(shí)際傳給函數(shù)形式參數(shù)的數(shù)據(jù)。函數(shù)◆函數(shù)(子程序)的概念與作用。函數(shù)◆java中函數(shù)參數(shù)的傳遞和C語言中一樣,都是值傳遞。classtestpass{publicstaticvoidswap(intx,inty){inta=x;x=y;y=a;System.out.println(“x=”+x+”y=”+y);}publicstaticvoidman(){inta=2,b=3;swap(a,b);System.out.println(“a=”+a+”b=”+b);}}函數(shù)參數(shù)的傳遞◆java中函數(shù)參數(shù)的傳遞和C語言中一樣,都是值傳遞。函數(shù)參◆Java語言中參數(shù)傳遞的規(guī)則,和其它程序設(shè)計(jì)語言類似,Java語言的參數(shù)傳遞也分為兩種:按值傳遞(byvalue)適用范圍:8種基本數(shù)據(jù)類型、String對(duì)象特點(diǎn):在內(nèi)存中復(fù)制一份數(shù)據(jù),把復(fù)制后的數(shù)據(jù)傳遞到方法內(nèi)部作用:在方法內(nèi)部改變參數(shù)的值,外部數(shù)據(jù)不會(huì)跟著發(fā)生改變按址傳遞(byaddress)適用范圍:數(shù)組、除String以外的其他所有類型的對(duì)象特點(diǎn):將對(duì)象的地址傳遞到方法內(nèi)部作用:在方法內(nèi)部修改對(duì)象的內(nèi)容,外部數(shù)據(jù)也會(huì)跟著發(fā)生改變Java語言中的參數(shù)傳遞◆Java語言中參數(shù)傳遞的規(guī)則,和其它程序設(shè)計(jì)語言類似,Ja◆

以上特性是Java語言中的規(guī)定,在語法上無法指定參數(shù)傳遞是按值傳遞還是按址傳遞,但是可以通過下面的變換實(shí)現(xiàn):對(duì)于按值傳遞的參數(shù),如果需要在方法調(diào)用以后修改參數(shù)的值,可以利用返回值來實(shí)現(xiàn)。對(duì)于按地址傳遞的參數(shù),如果需要在方法內(nèi)部修改時(shí)原來的參數(shù)不改變,則可以在方法內(nèi)部重新創(chuàng)建該對(duì)象實(shí)現(xiàn)。Java語言中的參數(shù)傳遞◆以上特性是Java語言中的規(guī)定,在語法上無法指定參數(shù)傳遞不定長(zhǎng)度自變量◆J2SE5.0之后開始支持「不定長(zhǎng)度自變量」(Variable-lengthArgument)◆實(shí)際上nums是一個(gè)數(shù)組publicstaticintsum(int...nums){//使用...宣告參數(shù)

intsum=0;for(intnum:nums){sum+=num;}returnsum;}不定長(zhǎng)度自變量◆J2SE5.0之后開始支持「不定長(zhǎng)度自變量不定長(zhǎng)度自變量◆宣告的參數(shù)必須設(shè)定在參數(shù)列的最后一個(gè),下面的方式是合法的◆下面的方式是不合法的publicvoidsomeMethod(intarg1,intarg2,

int...varargs){//....}publicvoidsomeMethod(int...varargs,

intarg1,intarg2){//....}不定長(zhǎng)度自變量◆宣告的參數(shù)必須設(shè)定在參數(shù)列的最后一個(gè),下面的不定長(zhǎng)度自變量publicvoidsomeMethod(int...varargs1,

int...varargs2){//....}publicvoidsomeMethod(SomeClass...somes){//....}不定長(zhǎng)度自變量publicvoidsomeMethod(遞歸方法◆在方法中呼叫自身同名方法,而呼叫者本身會(huì)先被置入內(nèi)存「堆?!梗⊿tack)中◆堆棧是一種「先進(jìn)后出」(Firstin,lastout)的數(shù)據(jù)結(jié)構(gòu)privatestaticintgcd(intm,intn){if(n==0)returnm;elsereturngcd(n,m%n);}遞歸方法◆在方法中呼叫自身同名方法,而呼叫者本身會(huì)先被置入內(nèi)總結(jié):◆Java中的數(shù)據(jù)類型大體上分為兩種:原始數(shù)據(jù)類型和引用數(shù)據(jù)類型;◆變量是存儲(chǔ)數(shù)據(jù)的基本單位;◆運(yùn)算符和流程控制基本上與C相似;◆Java中數(shù)組是引用數(shù)據(jù)類型;◆數(shù)組必須由new關(guān)鍵字為其分配內(nèi)存;總結(jié):◆Java中的數(shù)據(jù)類型大體上分為兩種:原始數(shù)據(jù)類型和引

JAVA變量與基礎(chǔ)語法

java變量與基礎(chǔ)語法課件◆標(biāo)識(shí)符與關(guān)鍵字◆基本數(shù)據(jù)類型◆運(yùn)算符與表達(dá)式◆程序的流程結(jié)構(gòu)(分支,循環(huán))◆數(shù)組◆方法◆基本的輸入與輸出本章目標(biāo)◆標(biāo)識(shí)符與關(guān)鍵字本章目標(biāo)簡(jiǎn)單輸出語句◆如果要將某些信息打印到屏幕上,就必須使用輸出語句;◆使用System.out.println()實(shí)現(xiàn)換行輸出效果;◆使用System.out.print()實(shí)現(xiàn)輸出但不換行效果;◆無論輸出什么類型的數(shù)據(jù),只需將數(shù)據(jù)作為參數(shù)傳遞給它們即可,而無需像C語言中那樣,使用%s、%d之類的控制字符,如:

inta=10;

floatf=3.14f; System.out.println(a); System.out.print(f); System.out.println('X');簡(jiǎn)單輸出語句◆如果要將某些信息打印到屏幕上,就必須使用輸出語簡(jiǎn)單輸入語句◆使用System.in.read()實(shí)現(xiàn)輸入效果;◆

read()函數(shù)的返回值是字符的Unicode值,是int類型的。public

static

voidmain(String[]args)

throwsIOException{

intcharc=System.in.read();System.out.printf("%c",charc);}◆

JDK5中還增加了Scanner類用于,可用于輸入。簡(jiǎn)單輸入語句◆使用System.in.read()實(shí)現(xiàn)輸入效◆概念:

在編寫程序時(shí),對(duì)各種變量,方法和類等要素命名時(shí)使用的字符序列稱為標(biāo)識(shí)符?!裘?guī)則:只能由字母,下劃線,美元符或數(shù)字組。只能由字母,下劃線”_”和美元符”$”開頭。不能是java中的關(guān)鍵字和保留字?!粽f明:java中嚴(yán)格區(qū)分大小寫,所以標(biāo)識(shí)符也是大小寫敏感的,但長(zhǎng)度沒有限制。約定俗成:java標(biāo)識(shí)符的選取要做到”見名知其意”且不能為java語言中的關(guān)鍵字。定義時(shí)盡量不要與預(yù)定義標(biāo)識(shí)符重名。標(biāo)識(shí)符◆概念:標(biāo)識(shí)符◆關(guān)鍵字:

java中一些賦予特定的含義,用做專門用途的字符串稱為關(guān)鍵字(Keyword)。

說明:

在一些編輯器和IDE中會(huì)將關(guān)鍵字使用特殊方式和顏色標(biāo)出來。在java中所有的關(guān)鍵字都是英文小寫。

在java中g(shù)oto和const雖然從未被使用,也當(dāng)作關(guān)鍵字保留了下來?!舯A糇郑?/p>

不是關(guān)鍵字,但在程序中又不能作為用戶定義標(biāo)識(shí)符的字符串(reservedwords)。Java中的保留字有:true,false,和null。關(guān)鍵字與保留字◆關(guān)鍵字:關(guān)鍵字與保留字JAVA中的關(guān)鍵字abstractcontinuefornewswitchassert***defaultgoto*packagesynchronizedbooleandoifprivatethisbreakdoubleimplementsprotectedthrowbyteelseimportpublicthrowscaseenum****instanceofreturntransientcatchextendsintshorttrycharfinalinterfacestaticvoidclassfinallylongstrictfp**volatileconst*floatnativesuperwhileJAVA中的關(guān)鍵字abstractcontinueforne關(guān)鍵字說明*notused**addedin1.2***addedin1.4****addedin5.0關(guān)鍵字說明*notused**addedin1.2**標(biāo)識(shí)符舉例合法標(biāo)識(shí)符非法標(biāo)識(shí)符非法說明TeStHelloWorld含有空格A11A數(shù)字開頭$ab@sb含有不合法字母@mainboolean關(guān)鍵字Truetrue保留字_boolean標(biāo)識(shí)符舉例合法標(biāo)識(shí)符非法標(biāo)識(shí)符非法說明TeStHelloW◆java的常量類型:

◆整型常量:十進(jìn)制(12),十六進(jìn)制(0x12),八進(jìn)制(012)

◆長(zhǎng)整型常量:13L◆單精度浮點(diǎn)數(shù):5.1f,.4f,2e3f,0f◆雙精度浮點(diǎn)數(shù):5.1,.4,2e-3,0d說明:?jiǎn)尉雀↑c(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)統(tǒng)稱為實(shí)型數(shù)。默認(rèn)的小數(shù)為雙精度浮點(diǎn)數(shù)。◆邏輯常量:true和falseJava常量◆java的常量類型:Java常量◆字符常量:‘a(chǎn)’,‘8’,'\u0027'‘\r‘表示接受鍵盤輸入,相當(dāng)于按下了回車鍵;‘\n‘是換行;‘\t‘是制表符,相當(dāng)于table鍵;‘\b‘是退格鍵,相當(dāng)于BackSpace;‘\‘‘是單引號(hào),而‘\“‘是雙引號(hào);‘\\‘是一個(gè)斜杠“\”。

◆字符串常量:“helloproject”

注意點(diǎn):

◆字符串常量和字符常量的區(qū)別。

◆注意常量這個(gè)名詞的應(yīng)用語境,有時(shí)候,常量這個(gè)名詞應(yīng)用在其他語境中表示值不可變的變量。參見”final關(guān)鍵字”。

Java常量◆字符常量:Java常量◆概念:變量是系統(tǒng)為程序分配的一塊內(nèi)存存儲(chǔ)單元,用來存儲(chǔ)各種數(shù)據(jù)類型的數(shù)據(jù),根據(jù)所存儲(chǔ)的變量值的數(shù)據(jù)類型不同,可以劃分為各種不同數(shù)據(jù)類型的變量,其要素為變量名,數(shù)據(jù)類型,變量值和作用域??梢愿鶕?jù)變量名稱來訪問其對(duì)應(yīng)內(nèi)存存儲(chǔ)單元中的變量值.如下定義了一個(gè)變量:intage=20;(其在內(nèi)存表示如右圖)

Java變量age20age表示變量名20表示存儲(chǔ)單元名稱為age中的值◆概念:Java變量age20age表示變量名20表示存儲(chǔ)◆請(qǐng)參見java變量按數(shù)據(jù)類型劃分的圖Java變量數(shù)據(jù)類型數(shù)據(jù)類型基本數(shù)據(jù)類型引用數(shù)據(jù)類型數(shù)值型字符型(char)布爾型(boolean)整數(shù)類型(byte,int,short,long)浮點(diǎn)類型(float,double)類(class)接口(interface)數(shù)組◆請(qǐng)參見java變量按數(shù)據(jù)類型劃分的圖Java變量數(shù)據(jù)類型數(shù)byte占用一個(gè)字節(jié),數(shù)字大小為-27—27-1short占用兩個(gè)字節(jié),數(shù)字大小為-215—215-1int占用四個(gè)字節(jié),數(shù)字大小為-231—231-1long占用八個(gè)字節(jié),數(shù)字大小為-263—263-1float占用四個(gè)字節(jié),數(shù)字大小為1.4E-45~3.4E+38,-1.4E-45~-3.4E+38。用二進(jìn)制的指數(shù)形式表示一個(gè)浮點(diǎn)數(shù)的格式,如:101*22,101*2-3double占用八個(gè)字節(jié),數(shù)字大小為4.9E-324~1.7E+308,-4.9E-324~-1.7E+308。char占兩個(gè)字節(jié),數(shù)字大小為0—216-1,是unicode編碼。字符的本來面目,我們?yōu)槭裁纯梢灾苯訉⒁粋€(gè)數(shù)字賦給字符變量。boolean占一個(gè)字節(jié),其取值只有兩個(gè),true和false。JAVA變量字節(jié)大小及有效取值范圍byte占用一個(gè)字節(jié),數(shù)字大小為-27—27-1JAVA變量◆變量定義:

java程序中每個(gè)變量都屬于特定的數(shù)據(jù)類型,在使用前必須對(duì)其聲明,聲明格式為:

dataTypevariableName[=variableValue];◆變量聲明舉例:

intage=20;

floatprice=20.06f;doubled1,d2,d3=0.456;intx=1,y;

y=x+3;注意:從本質(zhì)上講,變量其實(shí)是內(nèi)存中的一小塊內(nèi)存單元,可以通過其名字(變量名)來訪問這塊區(qū)域,因此,每個(gè)變量使用前必須要先申請(qǐng)(聲明),然后必須對(duì)其進(jìn)行賦值,才可以使用。

Java變量的定義◆變量定義:Java變量的定義JAVA變量的默認(rèn)值DataTypeDefaultValue(forfields)byte0short0int0long0Lfloat0.0fdouble0.0dchar'\u0000'String(oranyobject)

nullbooleanfalseJAVA變量的默認(rèn)值DataTypeDefaultVal◆按被聲明的位置劃分

◆局部變量::方法的參數(shù)列表中和方法內(nèi)部以及語句塊中聲明的變量。

◆成員變量:

方法外面且在類的里面聲明的變量?!綮o態(tài)成員變量:用static關(guān)鍵字修飾的成員變量。

注意:java語言中,類外面(與類對(duì)應(yīng)的大括號(hào)外面)不能有變量的聲明.◆按所屬的數(shù)據(jù)類型劃分

◆基本數(shù)據(jù)類型變量

◆引用數(shù)據(jù)類型變量Java變量的分類◆按被聲明的位置劃分Java變量的分類◆初始化問題:Java的成員變量在聲明時(shí),如果沒有指定初始化的值,系統(tǒng)會(huì)根據(jù)成員變量的數(shù)據(jù)類型給出默認(rèn)的值,但局部變量在聲明時(shí)候沒有初始化,則系統(tǒng)不會(huì)給出默認(rèn)的初始化值,如果在使用前,沒有對(duì)其進(jìn)行初始華,在編譯時(shí)就會(huì)報(bào)錯(cuò)。請(qǐng)看下面的代碼:publicvoidmethodName(){intheight;intwidth=height+5;//編譯出錯(cuò),height還沒有被初始化.}Java的局部變量和成員變量◆初始化問題:Java的局部變量和成員變量◆分類:自動(dòng)類型轉(zhuǎn)換(也叫隱式類型轉(zhuǎn)換)強(qiáng)制類型轉(zhuǎn)換(也叫顯式類型轉(zhuǎn)換)◆類型轉(zhuǎn)換的原理及什么時(shí)候要用強(qiáng)制類型轉(zhuǎn)換◆表達(dá)式的數(shù)據(jù)類型自動(dòng)提升分析System.out.println(‘a(chǎn)’+1)與 System.out.println(“”+’a’+1)的區(qū)別。Java數(shù)據(jù)類型轉(zhuǎn)化byteshortcharintlongfloatdouble◆分類:Java數(shù)據(jù)類型轉(zhuǎn)化byteshortcharin◆變量的作用域指變量起作用的范圍,說明變量在什么部分可以被訪問;◆變量的生命周期是指變量在內(nèi)存中存在的周期,即什么時(shí)候分配空間,什么時(shí)候銷毀;◆變量要先定義,后使用,但也不是在變量定義后的語句一直都能使用前面定義的變量。我們可以用大括號(hào)將多個(gè)語句包起來形成一個(gè)復(fù)合語句,變量只能在定義它的復(fù)合語句中使用。JAVA變量的生命周期與作用域◆變量的作用域指變量起作用的范圍,說明變量在什么部分可以被publicclassTestScope{publicstaticvoidmain(String[]args){ intx=12;{intq=96;//x和q都可用

intx=3;//錯(cuò)誤的定義,Java中不允許有這種嵌套定義

System.out.println("xis"+x);System.out.println("qis"+q);}q=x;/*錯(cuò)誤的行,只有x可用,q超出了作用域范圍*/System.out.println("xis"+x);}}JAVA變量的生命周期與作用域JAVA變量的生命周期與作用域◆運(yùn)算符是一種特殊符號(hào),用以表示數(shù)據(jù)的運(yùn)算、賦值和比較,一般由一至三個(gè)字符組成。運(yùn)算符共分以下幾種:算術(shù)運(yùn)算符賦值運(yùn)算符比較運(yùn)算符邏輯運(yùn)算符移位運(yùn)算符java中的運(yùn)算符◆運(yùn)算符是一種特殊符號(hào),用以表示數(shù)據(jù)的運(yùn)算、賦值和比較,一般◆算術(shù)運(yùn)算符◆算術(shù)運(yùn)算符◆“+”除字符串相加功能外,還能把非字符串轉(zhuǎn)換成字符串,如:“x”+123;的結(jié)果是“x123”。如果對(duì)負(fù)數(shù)取模,可以把模數(shù)負(fù)號(hào)忽略不記,如:5%-2=1。但被模數(shù)是負(fù)數(shù)就另當(dāng)別論了。對(duì)于除號(hào)“/”,它的整數(shù)除和小數(shù)除是有區(qū)別的:整數(shù)之間做除法時(shí),只保留整數(shù)部分而舍棄小數(shù)部分。intx=3510;x=x/1000*1000;實(shí)際運(yùn)行結(jié)果是3000,想想為什么?

算術(shù)運(yùn)算符的注意問題◆“+”除字符串相加功能外,還能把非字符串轉(zhuǎn)換成字符串,如◆賦值運(yùn)算符注1:在JAVA里可以把賦值語句連在一起,如:

x=y=z=5;

在這個(gè)語句中,所有三個(gè)變量都得到同樣的值5。注2:x+=3等效于x=x+3,等于*=,-=,/=依此類推?!糍x值運(yùn)算符注1:在JAVA里可以把賦值語句連在一起,如:◆比較運(yùn)算符注1:比較運(yùn)算符的結(jié)果都是boolean型,也就是要么是true,要么是false。注2:比較運(yùn)算符“==”不能誤寫成“=”

,切記!切記!◆比較運(yùn)算符注1:比較運(yùn)算符的結(jié)果都是boolean型,也◆邏輯運(yùn)算符注1:邏輯運(yùn)算符用于對(duì)boolean型結(jié)果的表達(dá)式進(jìn)行運(yùn)算,運(yùn)算的結(jié)果都是boolean型。注2:“&”和“&&”的區(qū)別在于,如果使用前者連接,那么無論任何情況,“&”兩邊的表達(dá)式都會(huì)參與計(jì)算。如果使用后者連接,當(dāng)“&&”的左邊為false,則將不會(huì)計(jì)算其右邊的表達(dá)式。“|”和“||”的區(qū)別與“&”和“&&”的區(qū)別一樣?!暨壿嬤\(yùn)算符注1:邏輯運(yùn)算符用于對(duì)boolean型結(jié)果的表◆publicclassTestAnd{publicstaticvoidmain(String[]args){intx=0;inty=3;if(x!=0&&y==y/x) System.out.println("y="+y);}}上面例子中,由于while語句的判斷條件中的第一個(gè)布爾表達(dá)式是不成立的,程序就不會(huì)判斷第二個(gè)布爾表達(dá)式的值,這就是“短路”。如果兩個(gè)表達(dá)式之間用“&”來連接,如果正好碰到上面所示的特殊情況,程序運(yùn)行時(shí)就會(huì)出錯(cuò)“&”和“&&”的區(qū)別分析◆publicclassTestAnd“&”和“&&”的◆移位運(yùn)算符適用類型有byte、short、char、int、long對(duì)低于int型的操作數(shù)將先自動(dòng)轉(zhuǎn)換為int型再移位。 對(duì)于int型整數(shù)移位a>>b,系統(tǒng)先將b對(duì)32取模,得到的結(jié)果才是真正移位的位數(shù)。例如:a>>33和a>>1結(jié)果是一樣的,a>>32的結(jié)果還是a原來的數(shù)字。對(duì)于long型整數(shù)移位時(shí)a>>b,則是先將移位位數(shù)b對(duì)64取模。移位不會(huì)改變變量本身的值。如a>>1;在一行語句中單獨(dú)存在,毫無意義。x>>1的結(jié)果和x/2的結(jié)果是一樣的,x<<2和x*4的結(jié)果也是一樣的。總之,一個(gè)數(shù)左移n位,就是等于這個(gè)數(shù)乘以2的n次方,一個(gè)數(shù)右移n位,就是等于這個(gè)數(shù)除以2的n次方。請(qǐng)思考:如何用程序?qū)崿F(xiàn)求2的x次方。答案:y=1<<x;

移位運(yùn)算注意事項(xiàng)◆移位運(yùn)算符適用類型有byte、short、char、int◆運(yùn)算符的優(yōu)先級(jí)我們可以使用括號(hào)改變運(yùn)算賦的優(yōu)先級(jí),分析inta=2;intb=a+3*a;語句的執(zhí)行過程與inta=2;intb=(a+3)*a;語句的執(zhí)行過程的區(qū)別。◆運(yùn)算符的優(yōu)先級(jí)我們可以使用括號(hào)改變運(yùn)算賦的優(yōu)先級(jí),分析i◆對(duì)于inta=2;intb=a+3*a++;這樣的語句,b最終等于多少呢?作者試驗(yàn)得到的結(jié)果是8。對(duì)于inta=2;intb=(a++)+3*a;這樣的語句,b最終等于多少呢?如何避免多個(gè)運(yùn)算符帶來的問題◆對(duì)于inta=2;intb=a+3*a+◆與其去思考其中的原因,我們還不如將上面的第二句改為幾條語句來實(shí)現(xiàn)我們想要的結(jié)果。不要在一行中編寫太復(fù)雜的表達(dá)式,也就是不要在一行中進(jìn)行太多的運(yùn)算在一行中進(jìn)行太多的運(yùn)算并不能為你帶來什么好處,相反只能帶來壞處,它并不比改成幾條語句的運(yùn)行速度快,它除可讀行差外,還極容易出錯(cuò)。對(duì)于優(yōu)先級(jí)順序,讀者不用刻意去記,有個(gè)印象就行如果你實(shí)在弄不清這些運(yùn)算先后關(guān)系的話,就用括號(hào)或是分成多條語句來完成你想要的功能,因?yàn)槔ㄌ?hào)的優(yōu)先級(jí)是最高的,這也是軟件編碼規(guī)范的一個(gè)要求。如何避免多個(gè)運(yùn)算符帶來的問題◆與其去思考其中的原因,我們還不如將上面的第二句改為幾條語句◆表達(dá)式:表達(dá)式是運(yùn)算符和操作數(shù)的結(jié)合,它是任何一門編程語言的關(guān)鍵組成部分表達(dá)式允許程序員進(jìn)行數(shù)學(xué)計(jì)算、值的比較、邏輯操作以及在Java中進(jìn)行對(duì)象的操作。一些表達(dá)式的例子:◆語句:◆空語句:◆復(fù)合語句:{}◆代碼塊:{}表達(dá)式和語句◆表達(dá)式:表達(dá)式和語句◆順序結(jié)構(gòu)◆選擇結(jié)構(gòu)◆循環(huán)結(jié)構(gòu)顧名思義,順序結(jié)構(gòu)就是程序從上到下一行一行執(zhí)行的結(jié)構(gòu),中間沒有判斷和跳轉(zhuǎn),直到程序結(jié)束。程序的流程控制◆順序結(jié)構(gòu)程序的流程控制◆if(表達(dá)式)語句;◆if(表達(dá)式)語句1;

else語句2;◆if(表達(dá)式1)語句1;

elseif(表達(dá)式2)語句2;

elseif(表達(dá)式2)語句3;

… else語句n;if語句的選擇結(jié)構(gòu)◆if(表達(dá)式)語句;if語句的選擇結(jié)構(gòu)◆每個(gè)語句可以是使用{}組成的復(fù)合語句?!魲l件表達(dá)式:

變量=布爾表達(dá)式?語句1:語句2;◆

If語句還可以嵌套使用

if(表達(dá)式1) if(表達(dá)式2)語句1;

else語句2;

esle if(表達(dá)式2)語句3;

else語句4; 嵌套時(shí)最好使用{}確定層次界限,舉例說明。if語句的選擇結(jié)構(gòu)◆每個(gè)語句可以是使用{}組成的復(fù)合語句。if語句的選擇結(jié)構(gòu)◆Switch(表達(dá)式){ case常量表達(dá)式1:語句1;break; case常量表達(dá)式2:語句2;break; … case常量表達(dá)式n:語句n;break; default:語句n;}default語句是可選的,它接受除上面接受值的其他值,通俗的講,就是誰也不要的都?xì)w它。case后面可以跟多個(gè)語句,這些語句可以不用大括號(hào)括起來。switch語句判斷條件可接受int,byte,char,short型,不可以接受其他類型。一旦碰到第一次case匹配,就會(huì)開始順序執(zhí)行以后所有的程序代碼,而不管后面的case條件是否匹配,后面case條件下的代碼都會(huì)被執(zhí)行,直到碰到break語句為止。我們可以利用這個(gè)特點(diǎn)來用同一段語句處理多個(gè)case條件。switch語句的選擇結(jié)構(gòu)◆Switch(表達(dá)式)switch語句的選擇結(jié)構(gòu)◆While(表達(dá)式)語句;intx=1;while(x<3){System.out.println("x="+x);x++;}腳下留心:while表達(dá)式的括號(hào)后面一定不要加“;”while循環(huán)語句◆While(表達(dá)式)語句;while循環(huán)語句◆do語句;while(表達(dá)式);publicclassTestDo{publicstaticvoidmain(String[]args){ intx=3; while(x==0) { System.out.println("ok1"); x++;}inty=3;do{ System.out.println("ok2"); y++;}while(y==0);}}do-while循環(huán)語句◆do語句;while(表達(dá)式);do-while◆編寫一個(gè)程序,這個(gè)程序不斷地讀取從鍵盤上輸入的字符,直到讀到字符’q’時(shí),程序結(jié)束?!籼崾荆赫{(diào)用System.in.read();可以讀取到一個(gè)從鍵盤上輸入字符對(duì)應(yīng)的整數(shù)。通過這個(gè)程序,你一定能體會(huì)到在什么樣的情況下,用do-while循環(huán)語句比while循環(huán)語句方便。do-while循環(huán)語句◆編寫一個(gè)程序,這個(gè)程序不斷地讀取從鍵盤上輸入的字符,直到讀◆for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句;◆for循環(huán)的三個(gè)表達(dá)式中的任意一個(gè)都可以省略,甚至是三個(gè)都可以省略,但是兩個(gè)“;”是不能省略的?!羧缦旅鎺追N寫法是等價(jià)的:for(intx=1;x<10;x++){System.out.println("x="+x);}等效于for循環(huán)語句◆for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句;for循環(huán)intx=1;for(;x<10;x++){System.out.println("x="+x);}等效于intx=1;for(;x<10;){System.out.println("x="+x);x++;}等效于intx=1;for(;;){if(x>=10) break;System.out.println("x="+x);x++;}for循環(huán)語句intx=1;for循環(huán)語句◆break語句可以中止循環(huán)中的子語句和switch語句。一個(gè)無標(biāo)號(hào)的break語句會(huì)把控制傳給當(dāng)前(最內(nèi))循環(huán)(while,do.for或Switch)的下一條語句。如果有標(biāo)號(hào),控制會(huì)被傳遞給當(dāng)前方法中的帶有這一標(biāo)號(hào)的語句。如:st:while(true){while(true){ breakst;}}break語句◆break語句可以中止循環(huán)中的子語句和switch語句。一◆continue語句只能出現(xiàn)在循環(huán)語句(while,do,for)的子語句塊中,無標(biāo)號(hào)的continue語句的作用是跳過當(dāng)前循環(huán)的剩余語句

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論