编辑/编译《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;