編輯/編譯《thinking in JAVA》源代碼java
1、下載源代碼
首先,我閱讀的是《thinking in JAVA》第四版,所以按照書中提供的連接找到了mindview主頁,並找到了對應下載連接:https://www.mindviewllc.com/quicklinks/,並跳轉到https://github.com/BruceEckel/TIJ4-code進行下載,下載後解壓到某個目錄:git
D:\source\TIJ4_code\ examples\,下面全部操做涉及到源代碼工程路徑的都是基於該路徑(該路徑下面存儲了各個章節的源代碼,好比exceptions,innerclasses等)。github
2、原生態編譯和運行(初級)
按照源代碼一塊兒發佈的readme.me文檔進行操做便可進行編譯和運行,這裏主要記錄和說明在這過程當中遇到的問題。基本的操做主要有:shell
一、解壓源代碼到某個目錄,這裏是D:\source\TIJ4_code\ examples\;json
二、安裝JDK,並將java/bin目錄添加到PATH環境變量;eclipse
三、修改CLASSPATH,CLASSPATH=;.;..; D:\source\TIJ4_code\ examples\;ui
四、這時候,就能夠編譯和運行代碼了。搜索引擎
cd D:\source\TIJ4_code\ examples\objecturl
javac HelloDate.javaspa
java HelloDate //此處便可獲得正確的輸出。
編譯生成後的程序HelloDate.class,若是按照如下命令執行,
java HelloDate.class
java ./HelloDate.class
java ./HelloDate
都會失敗,出現:錯誤: 找不到或沒法加載主類 HelloDate
3、Vs code編輯,編譯,運行(中級)
在第二節中已經實現了編輯(寫字板或者notepad++),編譯(javac),運行(java)單個java源文件,可是爲了提升編輯效率,特別是使用IDE的智能補全功能,但願可以經過IDE來編輯,編譯和運行這些源文件。IntelliJ IDEA功能很強大,可是比較龐大,對系統要求比較高,且加載比較慢,eclipse不夠fashion,NetBeans界面跟eclipse也差不了多。結合到以前使用的vs code,決定用vs code+java擴展包來搭建簡易的IDE。
3.1安裝vs code 和java 插件
這個步驟稍微參考搜索引擎獲得的結果就能夠完成,略去;
3.2導入工程,並配置工程
1.導入工程。
File->Open Folder->選擇D:\source\TIJ4_code\ examples\
這時候會在D:\source\TIJ4_code\examples\目錄生成.vscode文件夾,並生成默認的launch.json和settings.json。
2.修改launch.json,添加configurations以下:
"configurations": [
{
"type": "java",
"name": "Debug (Launch) - object/Current File",
"request": "launch",
"cwd": "${workspaceFolder}/object",
"classPaths": [".;..;${workspaceFolder};"],
"mainClass": "${file}"
}
]
打開object/目錄下的HelloDate.java,Debug->Start Debuging(F5)運行程序,若是以前已經編譯過該源碼,即object目錄已經存在HelloDate.class的,程序正常運行,可是若是以前沒有編譯過源文件的,則會出現以下錯誤:
錯誤: 找不到或沒法加載主類 HelloDate
這是由於創建的launch配置沒有進行運行前的編譯工做,所以須要經過新建task來完成。
3.新建編譯task
Terminal->Configure Tasks,在新增的tasks.json中,新增以下內容:
"tasks": [
{
"label": "javac",
"type": "shell",
"command": "javac ${file}",
//"isBackground": true,
}
]
新建任務後,在launch配置中,加入該任務,獲得新的launch.json文件,其配置章節以下:
{
"type": "java",
"name": "Debug (Launch) - object/Current File",
"request": "launch",
"cwd": "${workspaceFolder}/object",
"preLaunchTask": "javac",
"classPaths": [".;..;${workspaceFolder};"],
"mainClass": "${file}"
},
刪除object/HelloDate.class(若是已經存在的話),打開object/HelloDate.java,在該文件執行Debug->Start Debuging操做,此次應該可以看到程序可以正常的被編譯,運行。
4.創建更多configuration,適配其餘目錄源文件
若是但願編譯D:\source\TIJ4_code\ examples\目錄下,同object目錄同等級的其餘路徑下的源文件(如exceptions,interfaces等)怎麼辦呢?固然能夠直接修改上面object相關的配置文件,可是爲了更加通用性,選擇依葫蘆畫瓢,經過爲每一個二級目錄(examples\exceptions, examples\interfaces等)分別創建一個configuration,經過name進行區分,同時修改對應的cwd參數便可,
{
"type": "java",
"name": "Debug (Launch) - object/Current File",
"request": "launch",
"cwd": "${workspaceFolder}/object",
"preLaunchTask": "javac",
"classPaths": [".;..;${workspaceFolder};"],
"mainClass": "${file}"
},
{
"type": "java",
"name": "Debug (Launch) - interfaces/Current File",
"request": "launch",
"cwd": "${workspaceFolder}/interfaces",
"preLaunchTask": "javac",
"classPaths": [".;..;${workspaceFolder};"],
"mainClass": "${file}"
},
這樣,在編譯不一樣二級路徑(以examples\foobar\爲例)下面的源代碼時,只需作兩件相關的事情:
a.在launch.json的configuration節中新增一個配置,具體能夠直接從object配置clone過來後修改對應的name和cwd參數便可;
{
"type": "java",
"name": "Debug (Launch) - foobar/Current File",
"request": "launch",
"cwd": "${workspaceFolder}/foobar",
"preLaunchTask": "javac",
"classPaths": [".;..;${workspaceFolder};"],
"mainClass": "${file}"
},
b.在調試foobar/xxx.java以前,進入debug視窗,在DEBUG下拉框中,選擇相應的配置文件:「foobar」配置;
以後,在打開的foobar/xxx.java上執行Debug->Start Debuging(或者直接按F5)便可進行編譯和運行。
這種方法對於某些二級目錄下面有多個文件夾下面的源代碼也能正常工做,好比:
examples\interfaces\music4\music4.java只需對二級目錄examples\interfaces\執行上訴配置操做便可。這得益於這些三級目錄下存儲的源文件(*.java)一般有以下聲明:
package 二級目錄名稱.三級目錄名稱; //package interfaces.music4;