- 相關(guān)推薦
Java語(yǔ)言中的常見(jiàn)錯(cuò)誤
導(dǎo)語(yǔ):Java語(yǔ)言雖然功能強(qiáng)大,使用方便、靈活,但是要學(xué)好、用好Java語(yǔ)言并不容易。下面就由小編為大家介紹一下Java語(yǔ)言中的常見(jiàn)錯(cuò)誤,歡迎大家閱讀!
1編譯錯(cuò)誤
它是指在編寫(xiě)程序時(shí),輸入錯(cuò)誤的關(guān)鍵字或者標(biāo)識(shí)符、遺漏標(biāo)點(diǎn)符號(hào)及賦值時(shí)數(shù)據(jù)類型不匹配等錯(cuò)誤。
大小寫(xiě)字母混淆:Java語(yǔ)言是嚴(yán)格區(qū)分大小寫(xiě)的計(jì)算機(jī)編程語(yǔ)言。類、方法、變量的名稱必須前后完全一致,否則將出現(xiàn)無(wú)法解析符號(hào)的錯(cuò)誤。
使用末聲明的變量:在有些高級(jí)語(yǔ)言中,變量不需要聲明,就可以直接使用。而Java語(yǔ)言規(guī)定在使用任何變量前必須先聲明該變量的類型。如果使用末聲明的變量,編譯程序時(shí)會(huì)出現(xiàn)無(wú)法解析符號(hào)的錯(cuò)誤。(cannot resolve symbol)
使用末初始化的變量:雖然聲明了變量,但是在末賦初值前就進(jìn)行計(jì)算或者打印輸出等非賦值操作。這種情況下,會(huì)顯示變量可能末被初始化的錯(cuò)誤提示信息(might mot have been initialized)。
語(yǔ)句后面遺漏分號(hào):Java語(yǔ)言規(guī)定每條語(yǔ)句的末尾必須有分號(hào),也就是說(shuō)分號(hào)是兩條語(yǔ)句之間的分隔點(diǎn)。如果某條語(yǔ)句的分號(hào)沒(méi)有輸入,則程序編譯時(shí)就會(huì)出現(xiàn)錯(cuò)誤。在一般情況下,錯(cuò)誤提示會(huì)正確指出程序中缺少分號(hào)的位置。但是如果語(yǔ)句比較復(fù)雜,錯(cuò)誤提示指出的位置可能并不是實(shí)際缺少分號(hào)的位置,編程者必須仔細(xì)查看程序,自行找出錯(cuò)誤的位置。
數(shù)據(jù)類型與變量類型不符:當(dāng)數(shù)據(jù)類型與變量類型不符時(shí),如果Java語(yǔ)言可以自行轉(zhuǎn)換的話,則不會(huì)給出錯(cuò)誤信息,但是運(yùn)行結(jié)果將很可能與編程者意愿不符。如果Java語(yǔ)言不可以自行轉(zhuǎn)換的話,則會(huì)顯示錯(cuò)誤。
小括號(hào)不配對(duì):小括號(hào)左右個(gè)數(shù)不等的現(xiàn)象經(jīng)常出現(xiàn)在if 語(yǔ)句和while語(yǔ)句的條件表達(dá)式中。當(dāng)表達(dá)式結(jié)構(gòu)復(fù)雜,必須使用多層小括號(hào)時(shí),很容易出現(xiàn)這類錯(cuò)誤。因此,建議編程者養(yǎng)成先輸入一對(duì)小括號(hào),然后再在其中輸入內(nèi)容的好習(xí)慣。
2運(yùn)行錯(cuò)誤
它是指在Java程序執(zhí)行時(shí)因非法操作或者操作失敗等產(chǎn)生的錯(cuò)誤。這些錯(cuò)誤在編譯時(shí)一般是無(wú)法發(fā)現(xiàn)的,產(chǎn)生運(yùn)行錯(cuò)誤時(shí),程序會(huì)被中斷,并顯示錯(cuò)誤信息。下面列出常見(jiàn)的運(yùn)行錯(cuò)誤。
數(shù)組下標(biāo)越界是初學(xué)者常犯的一個(gè)錯(cuò)誤。Java語(yǔ)言規(guī)定數(shù)組的下標(biāo)由0開(kāi)始到數(shù)組元素個(gè)數(shù)減1為止。(java.long.ArrayIndexOutOfBounds Exception)
除數(shù)為零:Java語(yǔ)言不允許計(jì)算過(guò)程中出現(xiàn)除數(shù)為零的情況,因此,在編寫(xiě)程序時(shí),一定要注意計(jì)算過(guò)程中的中間值。如果出現(xiàn)除數(shù)為零的情況,則程序會(huì)被中斷并顯示除數(shù)為0的錯(cuò)誤信息。(ArithmeticException:/by zero)
運(yùn)行錯(cuò)誤通常比較隱蔽,而且會(huì)造成程序中斷甚至系統(tǒng)死機(jī)等現(xiàn)象。為此Java語(yǔ)言提供處理這類錯(cuò)誤的方法,幫助編程者避免程序中斷等現(xiàn)象的發(fā)生。
3邏輯錯(cuò)誤
程序運(yùn)行后,沒(méi)有得到預(yù)期的結(jié)果,這說(shuō)明程序存在邏輯錯(cuò)誤。這類錯(cuò)誤從語(yǔ)法上來(lái)說(shuō)是有效的,只是程序邏輯上存在缺陷。例如,使用的變量類型不正確、語(yǔ)句次序錯(cuò)誤、循環(huán)變量的初值和終值不正確等。通常,邏輯錯(cuò)誤不會(huì)產(chǎn)生錯(cuò)誤提示信息,所以錯(cuò)誤較難排除,需要編程者仔細(xì)地分析整個(gè)程序的運(yùn)行步驟。
超出數(shù)據(jù)類型的數(shù)值范圍:在Java語(yǔ)言中,每種數(shù)據(jù)類型都有其數(shù)值范圍,一旦數(shù)據(jù)超出了數(shù)據(jù)類型的取值范圍,就會(huì)造成計(jì)算結(jié)果的錯(cuò)誤。
將等于關(guān)系符號(hào)寫(xiě)成“=”,在許多高級(jí)語(yǔ)言和數(shù)據(jù)表達(dá)式中,用“=”符號(hào)來(lái)表示相等的關(guān)系,而在Java語(yǔ)言中,該符號(hào)是賦值運(yùn)算符號(hào),“==”才是關(guān)系運(yùn)算符號(hào)。在一般情況下,只要比較的數(shù)據(jù)類型不是boolean類型,Java語(yǔ)言可以在編譯程序的時(shí)候發(fā)現(xiàn)該錯(cuò)誤,但是如果進(jìn)行比較的兩個(gè)數(shù)據(jù)通信的類型本身就是boolean類型,Java語(yǔ)言可以在編譯程序的時(shí)候發(fā)現(xiàn)該錯(cuò)誤,但是如果進(jìn)行比較的兩個(gè)數(shù)據(jù)的類型本身就是boolean類型,則很難發(fā)現(xiàn)該錯(cuò)誤,最終造成程序出現(xiàn)邏輯錯(cuò)誤。
例如:
Boolean boo=false;
if(boo=true)System.out.println(“yes”);
在上面的if語(yǔ)句中表達(dá)式,Java語(yǔ)言編譯系統(tǒng)將boo=true作為賦值表達(dá)式進(jìn)行處理,也就是說(shuō)先將true賦值給變量boo,然后再判斷boo的值是否為true,如果為true,則執(zhí)行打印語(yǔ)句,否則繼續(xù)執(zhí)行下面的語(yǔ)句。很顯然,無(wú)論變量boo之前的值是什么,該表達(dá)式的值永遠(yuǎn)是true,所以打印語(yǔ)句一定會(huì)被執(zhí)行。
這種錯(cuò)誤在編譯時(shí)是檢查不出來(lái)的,但運(yùn)行結(jié)果往往是錯(cuò)的。而且由于習(xí)慣的影響,編程者自己也很難發(fā)現(xiàn)。
語(yǔ)句體忘記加大括號(hào):大括號(hào)在Java程序中具有非常重要的位置,當(dāng)語(yǔ)句體的語(yǔ)句不止一條時(shí),必須使用大括號(hào),否則很容易出現(xiàn)錯(cuò)誤。例如:下面的語(yǔ)句本意是要計(jì)算1+2+3+…+100的和,但是因?yàn)橥浟耸褂么罄ㄌ?hào)將語(yǔ)句體括起來(lái),所以實(shí)際上只是重復(fù)執(zhí)行了sum=sum+i;語(yǔ)句而且進(jìn)入了死循環(huán)狀態(tài)。
int sum=0,i=1;
while(i<=100)
sum=sum+I;
i++;
為了避免這類錯(cuò)誤的發(fā)生,最好在任何情況下都使用大括號(hào)將語(yǔ)句體括起來(lái)。
【Java語(yǔ)言中的常見(jiàn)錯(cuò)誤】相關(guān)文章:
java struts常見(jiàn)錯(cuò)誤以及原因解析08-23
Java語(yǔ)言中substr和substring的區(qū)別07-12
java的常見(jiàn)排序方法08-31
Java常用的語(yǔ)法錯(cuò)誤08-18
java常見(jiàn)的排序算法的代碼09-20