JAVA新人常犯錯誤集錦

      學習程序設計,最怕的事情可能就是遇到錯誤卻找不到錯在哪裏。這裏列舉一下筆者發現的JAVA新人常犯的錯誤,供目前正在上筆者JAVA課程的學生參考,其餘JAVA初學者亦可借鑑。 html

一、源程序文件後綴名名義上是.java而其實是.txt java

      JAVA要求源程序文件的後綴名爲.java。也許是爲了防止用戶不當心更改了文件的後綴名,Windows默認狀況下是隱藏後綴名的,這就爲初學者犯錯埋下了隱患。此時,咱們建立一個文本文件,而後把它的「後綴名」改成.java,以下圖所示: 編輯器

121519355.png

      表面上看,它的文件全名是HelloWorld.java,然而當你編譯時卻報「找不到文件」的錯誤,以下圖所示: ide

141844485.png

      運行dir命令,顯示當前目錄下的全部目錄和文件,這個文件就會露出它的廬山真面目。以下圖所示: 工具


142033253.png

      能夠看出,它的後綴名仍然是.txt。Windows隱藏了文件的後綴名,因此當咱們把文件改名爲HelloWorld.java時,並無改掉它的後綴名,.java只是文件名的一部分,並不是爲後綴名。 學習

      解決辦法是不要讓Windows隱藏文件的後綴名。打開「個人電腦」,點擊頂部菜單欄的「工具」->「文件夾選項」,打開「文件夾選項」對話框,點擊「查看」標籤,在「高級設置」中,清除掉「隱藏已知文件類型的擴展名」前面的勾選。以下圖所示: spa

143553778.png

      肯定後,咱們就能夠在Windows下清楚地看到文件「HelloWorld.java」的真實面目了。以下圖所示: 設計

144128949.png

二、沒有區分中英文 orm

      在JAVA語言中(實際上其餘語言諸如C也同樣),起特殊做用的分號「;」、括號(包括圓括號「()」、中括號「[]」、大括號「{}」),以及雙引號「""」、單引號等,都必須是英文的。若不當心輸入爲中文的,就會報語法錯誤。此類錯誤對於初學者來講很是隱蔽,常會耗費大量的時間和耐心。以分號爲例,可採用以下方法檢測是否是誤寫爲中文的了:按快捷鍵Ctrl+F,可打開搜索對話框,輸入中文的分號,讓它搜索,看搜索到的分號是否是應該寫爲英文的。爲保證能對整個程序文件進行搜索,可在搜索前預先把光標移動到程序的開始處。由於搜索默認狀況下是從當前光標處搜索到文件尾,光標以前的內容不會搜索到。或者使用某些搜索選項,讓它搜索完整個文件。分別以EditPlus和Windows的記事本編輯器示例以下: htm

      Editplus,確認選中紅框中的選項。

133219268.png

      記事本:以下圖,默認向下搜索。向下搜索完後,再點擊「向上」,讓它向上搜索。

133256429.png

三、括號、引號等不配對

      在程序中,圓括號(())、方括號([])、大括號({})以及雙引號("")和單引號必須成對出現,不然報錯。如如下的的錯誤「進行語法解析時已到達文件結尾」,便是由於少了一個右大括號。爲避免發生此類錯誤,可先把左右括號/引號寫好,而後再往裏面添加代碼。

四、缺乏大括號

   對於if/else和循環,若只需執行一條語句,能夠不用大括號。可是當須要添加語句時,就須要用大括號把多條語句包含起來。這一點容易被忽略,而一旦被忽略,就是邏輯錯誤(程序能運行,但結果不對)。排查邏輯錯誤要比語法錯誤困難不少,由於編譯器不會報錯,因此經常會耗費大量時間和耐心。所以,爲避免這類錯誤,應養成習慣:即便只執行一條語句,也應用大括號包含。

5、類名/變量名寫錯或沒有區分大小寫

    類名應保證正確,變量定義後,再使用此變量也應該保證與定義時的名字一致。更容易出錯的是,JAVA是區分大小寫的語言,有人把String寫成string,或者同一個變量名,先後使用時大小寫不一致,都會報錯。所以,當編譯器報「找不到符號」的錯誤時,就應該根據編譯器的錯誤提示信息仔細檢查相關類名/變量名是否是這兩方面犯了錯。例如,下圖的錯誤分別是把類String寫成了string,以及定義了變量scan,但使用此變量時卻寫成了sscan。

133409492.png

六、公共類名應與文件名同名

      咱們通常寫的類都是公共的(public),JAVA要求保存公共類的文件的文件名必須與類同名,並且要注意大小寫。不然會報錯:類XX是公共的,應在名爲XX.java的文件中聲明。這裏的「XX」指代某個類名,如下亦然。

七、修改後未保存或未從新編譯

      發現錯誤更改後未保存,這時修改並未生效,所以應該首先保存。保存後還應從新編譯生成新的字節碼文件(.class)文件,由於真正運行的是字節碼文件。不從新編譯的話,運行的仍是舊的字節碼文件。

八、錯誤:僅當顯式請求註釋處理時才接受類名稱「XX.JAVA」

      這個錯誤是前一段時間批改學生程序時遇到的,程序自己沒有發現任何問題,只是文件名寫成了XX.JAVA,一時我也不知道錯在哪裏。後來把文件後綴名.JAVA改成.java,就行了。因爲筆者寫程序時一直把後綴名寫爲.java,所以一直未遇到這種問題(或者遇到了,可是忘記了)。看到大寫的後綴名後,潛意識裏認爲後綴名屬於Windows的概念,而Windows是不區分大小寫的,所以也未在乎。但我當時顯然忽略了一點,當咱們用javac命令編譯程序時,javac是JAVA的東西,它對於將要編譯的文件的文件名,是區分大小寫的。所以,文件名XX.JAVA與XX.java對它來講,是不同的。正如上面的第三條所講,公共類名應與文件名同名,並且要注意大小寫。而若是咱們把javac寫成JAVAC,則沒有問題。由於javac命令是Windows幫咱們調用的,它不區分大小寫。

九、設置classpath環境變量時忘了添加當前目錄

      在不使用IDE的狀況下,若要引用第三方jar包,需把這些jar包引入到classpath環境變量中。但若設置classpath時,沒有包含當前目錄(.),那麼即便是在字節碼文件所在的目錄使用java命令運行此字節碼文件,也會報java.lang.NoClassDefFoundError。這是由於若不設置classpath,則classpath自動包含當前目錄;而若設置後,則再也不自動包含當前目錄,須要咱們顯式指定包含,這一點與path環境變量不一樣。

十、方法調用沒有參數時遺漏了圓括號

      與C同樣,JAVA中調用方法,即便沒有參數,也應帶上圓括號。犯這種錯誤,說明基礎知識不牢固。

十一、import語句位置不對

      例如如下程序:

 
 
  1. import java.text.DecimalFormat;  

  2. class A  

  3. {  

  4. }  

  5. import java.util.Scanner;  

  6. class B  

  7. {  

      則會報第7行出錯:「須要爲 class、 interface或enum」。這是由於import語句應寫在類定義以前,不能在兩個類的定義之間出現import語句。所以,上述程序應修改以下:

 
 
  1. import java.text.DecimalFormat;  

  2. import java.util.Scanner;  

  3. class A  

  4. {  

  5. }  

  6. class B  

  7. {  

      爲避免此類錯誤,建議每一個類寫在單獨的文件中。

      (發現其餘問題,將繼續更新)

       猛戳這裏全面系統地學習MyBatis 3


低版本的JAVA6沒法訪問SQL Server 2008

相關文章
相關標籤/搜索