- 零基礎學Java(第5版)
- 黃傳祿 常建功 陳浩
- 1712字
- 2020-06-17 18:13:06
1.4 常見疑難解答
對于初學者而言,在Java程序的開發、編譯和執行過程中,都會或多或少遇到問題,如環境變量設置不正確,源程序的語法錯誤、語義錯誤,或在程序編譯、運行期發生錯誤等。如果這些錯誤或問題不能得到適當的處理,那么會對初學者造成很大的障礙。本節將介紹幾種常見的錯誤,以使讀者在學習過程中少走彎路。
1.4.1 環境變量設置錯誤
在編譯并運行Java應用程序之前,需要設置環境變量,其目的是使Windows系統可以知道DOS窗口中運行的Java工具可執行程序,如Javac源程序編譯工具等。圖1-12說明Windows操作系統無法發現Javac編譯程序。

圖1-12 無法找到Javac可執行程序
當然如果已經安裝了JDK,則可以在DOS提示符下輸入Javac的絕對路徑,通過絕對路徑來識別該命令的位置。顯然這種方式很煩瑣,因為每次編譯源文件都要輸入一串路徑和命令信息。讀者可以通過2.1節掌握如何設置JDK環境變量。
1.4.2 語法錯誤
Java語言規范設計了語法規則,但是如果疏漏了部分內容,違反了Java的語法規則,編譯器會發出語法錯誤消息,該消息包含錯誤類型、發生錯誤的代碼在程序中的位置(以該錯誤代碼行號為標識)等,并且在錯誤處標識一個“^”。出現語法錯誤的情況如圖1-13所示。

圖1-13 語法錯誤
在HelloWorld.java源程序中將語句System.out.println(“HelloWorld!”)后的分號去掉,使得程序語句缺少結束標志,這就違反了Java語法規則。在編譯期發生任何類型的錯誤都會導致無法生成.class文件。所以此時需要讀者仔細分析錯誤類型,細致檢查程序中的錯誤,直到源程序順利通過編譯。
1.4.3 語義錯誤
編譯器也會發現語義錯誤。編譯器無法識別一個標識的語義時就會產生語義錯誤,如發現一個未定義的變量、錯誤輸入了系統類庫的類名等。圖1-14演示了一個語義錯誤,筆者故意將語句System的首字母改為小寫,使編譯器無法識別,從而輸出語義錯誤。

圖1-14 語義錯誤
注意 Java程序區分大小寫。
1.4.4 運行時錯誤
運行時錯誤指在執行程序過程中發生的錯誤,如某個類沒有實例化而造成空指針、無法找到指定的類文件等。下面介紹三種初學者常見的運行時錯誤。
1.無法發現類文件
在用戶編譯或執行Java程序時,由于種種原因可能輸入了不正確的類名,使得編譯器或虛擬機無法發現該文件所在位置。類文件名輸入錯誤如圖1-15所示。

圖1-15 類文件名輸入錯誤
在圖1-15中,筆者想運行HelloWorld程序,但是輸入了錯誤的類名HelloWorldd,所以執行時系統拋出java.lang.ClassNotFoundException錯誤。
使用Java工具會啟動Java虛擬機,此時系統會首先在當前目錄下尋找類文件,如果沒有則默認到操作系統的系統環境變量ClassPath中搜索,所以讀者也可以在該變量中設置需要編譯的類文件所在的目錄。
注意 變量的設置方式可以參考2.1.2節“設定環境變量”。
2.類名輸入錯誤
對于初學者而言,很容易出現的一個錯誤是,執行Java程序時往往會輸入類文件名,如HelloWorld.class,這是不允許的,此時會拋出類名輸入錯誤異常,如圖1-16所示。

圖1-16 類名輸入錯誤
注意 在調用Java工具執行程序時,需要在其后輸入類名而不是類文件名,如輸入java HelloWorld才是正確的方式。
3.無法發現main()方法
在1.3節已經知道,任何Java應用程序執行的類中必須有main()方法,該方法是程序的入口,以后才可以繼續調用程序所需的各種其他資源。如果在類中沒有定義main()方法或該方法書寫錯誤,都會導致如圖1-17所示的缺少main()方法錯誤。

圖1-17 缺少main()方法錯誤
筆者在HelloWorld.java源程序中修改了main()方法的名字,繼續編譯并執行該程序,虛擬機將無法裝載該類,因為無法發現類HelloWorld的程序入口。
1.4.5 初學者如何選擇Java參考書
一個程序員如果沒有半米多高的技術書堆,就沒有人會認為他是真正的程序員。如何從眼花繚亂的開發叢書中找到適合自己的書,也是一門學問。
書評:比較成功的書籍在上市的前后,都會有名家撰寫的書評,這些書評包括對該書積極一面的評價,也有對書中內容的指摘,通過正反兩面的對照,相信可以幫助初學者做出購買的選擇。
道聽途說:口碑的重要性在現代社會中日益突出,如果真是一本好書,可能會在不同場合聽到不同的人對它給予相同的贊許,這就是該書的價值了。
不要忘記舊書攤:這不是在鼓勵懷舊,而事實是老書的質量和作者的寫書態度也許更嚴謹端正,這就是老書的好處。多次印刷的書也是值得考慮購買的對象,多版本說明作者對該書的精益求精和新技術的更新,同時也反映了該書在市場上的受歡迎程度。
預先閱覽:最好的當然是自己能夠預先瀏覽,從朋友那里借也好,在網上看看電子版也好,覺得自己喜歡,或是覺得有收藏的價值,再進行購買。
- Node.js Design Patterns
- Python數據分析基礎
- Ext JS Data-driven Application Design
- Learning ArcGIS Pro
- Python Web數據分析可視化:基于Django框架的開發實戰
- Vue.js 2 Web Development Projects
- Quantum Computing and Blockchain in Business
- Developing SSRS Reports for Dynamics AX
- Java EE企業級應用開發教程(Spring+Spring MVC+MyBatis)
- 從零開始學Selenium自動化測試:基于Python:視頻教學版
- 微前端設計與實現
- SAP Web Dynpro for ABAP開發技術詳解:基礎應用
- Xamarin Cross-Platform Development Cookbook
- Using Yocto Project with BeagleBone Black
- Java Web入門很輕松(微課超值版)