編譯時(shí)Java最常見的錯(cuò)誤
學(xué)習(xí)一種新的編程語言總是一種挑戰(zhàn),因?yàn)楹?jiǎn)單的失誤就可以產(chǎn)生錯(cuò)誤,對(duì)于門外漢來說都是神秘和充滿困惑的。如果你不是足夠幸運(yùn)有一個(gè)有經(jīng)驗(yàn)的程序員在旁邊看著你并提供指導(dǎo),排除你代碼的故障將是非常令人沮喪的。
如果你正學(xué)習(xí)Java語言,你在編譯和執(zhí)行代碼的時(shí)候遇到問題,一般來說問題將分為2類:無論你遇到的是編譯時(shí)錯(cuò)誤,這說明你的程序編譯失敗,還是你遇 到運(yùn)行時(shí)錯(cuò)誤,這是指錯(cuò)誤發(fā)生在你成功地編譯了程序但不能運(yùn)行并且沒有產(chǎn)生錯(cuò)誤。當(dāng)然,在你遇到一個(gè)運(yùn)行時(shí)錯(cuò)誤之前,你的代碼必須首先能夠編譯,所以在這 里我們將研究最常見的開發(fā)者可能遇到的編譯時(shí)錯(cuò)誤的原因。
最常見的編譯時(shí)錯(cuò)誤
我們將使用下面的代碼作為一個(gè)Java示例類作為討論:
public class Game { public static void main(String args[]) { System.out.println(“If I choose Paper,”); System.out.println(“And you choose Scissors,”); System.out.println(“Then I win, and you lose!”); } } |
Java文件錯(cuò)誤的命名方式--Java文件的名稱必須和代碼中相關(guān)的公共類完全匹配。因此,如果你的代碼包含一個(gè)公共類“Game”,Java文件必 須命名為“Game.Java”,而不能命名為“game.Java”,或者是“GAME.Java”,再或者是“MyGame.Java”.該文件的名 稱和公共類的名稱在拼寫和大小寫上都必須完全匹配。
代碼錯(cuò)誤的大小寫--Java對(duì)大小寫敏感,因此“public”與 “Public”或“puBliC”都是不相同的。Java新手往往利用首字母大寫,反之亦然,由于大小寫錯(cuò)誤導(dǎo)致他們編寫的代碼編譯失敗。為了進(jìn)一步復(fù) 雜化這個(gè)問題,編譯時(shí)錯(cuò)誤信息由于大寫問題往往是隱蔽和沒有幫助的。例如,如果你把主方法中的聲明“public static and void”第一個(gè)字母大寫,你會(huì)得到以下錯(cuò)誤消息,說需要一個(gè)分號(hào),這真的不是問題的根本:
C:\_jdk1.7\bin>Javac Game.Java Game.Java:3: error: ';' expected Public Static Void main (String args[]) { 1 error |
錯(cuò)誤匹配的括號(hào)--你可以看到你的代碼中的每一個(gè)開著的括弧,它可能是一個(gè)方括號(hào),大括弧或圓括號(hào),你需要一個(gè)與之匹配的關(guān)閉的括弧。有時(shí),一個(gè)程序員 會(huì)忘記關(guān)閉方法的括弧,或者他們會(huì)記得關(guān)閉一個(gè)方法的括弧,但是忘記關(guān)閉類的括弧。不管它是如何發(fā)生的,如果括號(hào)不匹配,你將會(huì)一直得到一個(gè)編譯時(shí)錯(cuò)誤。
例如,一個(gè)Java類的最后一個(gè)大括弧不關(guān)閉,試圖編譯代碼將產(chǎn)生下列編譯時(shí)錯(cuò)誤:
C:\_jdk1.7\bin>Javac Game.Java Game.Java:11: error: reached end of file while parsing } 1 error |
就我個(gè)人而言,每當(dāng)我創(chuàng)建一個(gè)新的方法或類時(shí),在敲入開始的括弧之后,我總是敲一些回車,然后添加一個(gè)結(jié)束的封閉括號(hào)。我只有在括號(hào)匹配的情況下我才會(huì) 開始類主體或方法的代碼編碼。這樣,你的括號(hào)會(huì)總是匹配狀態(tài),你樣就可以在編寫類或者方法代碼時(shí),不用擔(dān)心將來的某個(gè)時(shí)刻需要關(guān)閉括號(hào)。
漏掉分號(hào)--人們?cè)絹碓绞煜さ腏ava另一個(gè)常見編碼錯(cuò)誤是漏掉需要的分號(hào)。作為一項(xiàng)規(guī)則,每一個(gè)語句必須以分號(hào)結(jié)束。不幸的是,這個(gè)規(guī)則有時(shí)可能會(huì)像它的作用一樣另人費(fèi)解,尤其是當(dāng)你有一個(gè)很難弄清楚它到底是不是一個(gè)語句的時(shí)候。
例如,在一個(gè)方法的主體里面,所有的“system.out.print”調(diào)用都以分號(hào)結(jié)束。如果我們?cè)谝粋€(gè)方法體中忘記給“system.out”加上分號(hào),我們將會(huì)得到一個(gè)編譯時(shí)錯(cuò)誤消息,就像下面一樣:
C:\_jdk1.7\bin>Javac Game.Java Game.Java:7: error: ';' expected System.out.println(“Then I win and you lose!”) 1 error |
容易混淆的部分是由于在Java中并不是每一行你寫的代碼就是一個(gè)語句。例如,類聲明是不被視為一個(gè)語句,所以它不跟分號(hào)。同樣,一個(gè)方法聲明是不被視 為一個(gè)語句的,所以它也不跟分號(hào)。要想容易識(shí)別哪個(gè)是一個(gè)語句哪個(gè)不是一個(gè)語句需要一定的練習(xí),這也需要一定的時(shí)間,但請(qǐng)放心,如果你確實(shí)有一個(gè)語句,它 就必須跟著一個(gè)分號(hào),否則編譯器會(huì)開始報(bào)錯(cuò)。
隨著時(shí)間的推移,任何編程語言的細(xì)微差別最終都會(huì)成為司空見慣的事,而Java眾所周知的 請(qǐng)求和市場(chǎng)上其他編程語言沒什么區(qū)別。如果你是Java新手,記住這四個(gè)小提示,如果你碰到一個(gè)編譯時(shí)錯(cuò)誤,看看是不是Java文件的命名方式產(chǎn)生的問 題,代碼中單詞和字母的大小寫情況,不匹配的括號(hào)和或漏掉分號(hào)。保持這四個(gè)問題點(diǎn)在你的腦海里將幫助你解決Java代碼故障排除問題,并希望減輕一些學(xué)習(xí) Java程序語言的挫折。
posted on 2012-09-14 09:43 順其自然EVO 閱讀(689) 評(píng)論(0) 編輯 收藏