编辑/编译《thinking in JAVA》源代码

一、下载源代码

  首先,我阅读的是《thinking in JAVA》第四版,因此按照书中提供的链接找到了mindview主页,并找到了对应下载链接:https://www.mindviewllc.com/quicklinks/,并跳转到https://github.com/BruceEckel/TIJ4-code进行下载,下载后解压到某个目录:

D:\source\TIJ4_code\ examples\,下面所有操作涉及到源代码工程路径的都是基于该路径(该路径下面存储了各个章节的源代码,比如exceptions,innerclasses等)。

二、原生态编译和运行(初级)

  按照源代码一起发布的readme.me文档进行操作即可进行编译和运行,这里主要记录和说明在这过程中遇到的问题。基本的操作主要有:

1、解压源代码到某个目录,这里是D:\source\TIJ4_code\ examples\;

2、安装JDK,并将java/bin目录添加到PATH环境变量;

3、修改CLASSPATH,CLASSPATH=;.;..; D:\source\TIJ4_code\ examples\;

4、这时候,就可以编译和运行代码了。

cd D:\source\TIJ4_code\ examples\object

javac HelloDate.java

java HelloDate  //此处即可得到正确的输出。

编译生成后的程序HelloDate.class,如果按照以下命令执行,

java HelloDate.class

java ./HelloDate.class

java ./HelloDate

都会失败,出现:错误: 找不到或无法加载主类 HelloDate

三、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.java只需对二级目录examples\interfaces\执行上诉配置操作即可。这得益于这些三级目录下存储的源文件(*.java)通常有如下声明:

package 二级目录名称.三级目录名称;   //package interfaces.music4;

thinking in JAVA 编译记录的更多相关文章

  1. java—— 编译与运行

    内容:使用javac 指定编译多个目录下java文件 链接:http://zhidao.baidu.com/link?url=W5ZERu8_ouGD-L_JH0vqqawhJNitsGbonQAAT ...

  2. 浅谈java编译机制和运行机制

    源文件和字节码的组成方式 源文件: 拓展名后跟java的文件即java的源文件. Java 源码编译由以下三个过程组成: 1.分析和输入到符号表 2.注解处理 3.语义分析和生成class文件 流程图 ...

  3. java编译后字节码解析

    java编译后字节码解析 参考网摘: https://my.oschina.net/indestiny/blog/194260

  4. JAVA - JAVA编译运行过程

    Java编译原理 *.java→*.class→机器码 java编译器 (编译) → 虚拟机(解释执行) →  解释器(翻译) → 机器码 1.Java编译过程与c/c++编译过程不同 Java编译程 ...

  5. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  6. java编译错误 程序包javax.servlet不存在javax.servlet.*

    java编译错误 程序包javax.servlet不存在javax.servlet.* 编译:javac Servlet.java 出现 软件包 javax.servlet 不存在 软件包javax. ...

  7. Java编译过程、c/c++编译过程区别

    Java编译原理 1.Java编译过程与c/c++编译过程不同 Java编译程序将java源程序编译成jvm可执行代码--java字节码. c/c++编译过程: 当C编译器编译生成一个对象的代码时,该 ...

  8. java编译自动化

    java编译自动化 http://h2ofly.blog.51cto.com/6834926/1545452?utm_source=tuicool&utm_medium=referral

  9. 进行以上Java编译的时候,出现unmappable character for encoding GBK。

    public class Exerc02{ public static void main(String args []){ char c = '中国人'; System.out.pingtln(c) ...

随机推荐

  1. webpack4.0入门总结

    1. 安装webpack: // 初始化.安装webpack以及webpack-clinpm init npm install --save-dev webpack webpack-cli 2.创建配 ...

  2. 浏览器标签tab窗口切换时事件状态侦听

    做到 是大屏项目,用的websocket,在浏览器切换标签窗口后,过了一段时间回来,页面会非常卡,所以想页面切回来的时候刷新页面,找到了这个方法,这是原来的例子.这段代码可以自己复制去做下测试 var ...

  3. Go中http超时问题的排查

    背景 排查 推测 连接超时 疑问 http2 解决超时 并发连接数 服务端限制 真相 重试 解决办法 问题1 背景 最新有同事反馈,服务间有调用超时的现象,在业务高峰期发生的概率和次数比较高.从日志中 ...

  4. git jenkins 介绍

    1.什么是持续集成?2.什么是持续交付?3.什么是持续部署?4.版本控制工具? git    1.git基本操作    2.git 分支    3.git 标签tag    4.gitlab  git ...

  5. 函数基础(三) 装饰器\闭包 day 12

    目录 昨日回顾 可变长参数 * ** 函数对象 函数嵌套 名称空间和作用域 今日内容 闭包函数 装饰器 语法糖 装饰器模板 迭代器 昨日回顾 可变长参数 * *形参:接受多余的位置实参 *实参(可迭代 ...

  6. OptimalSolution(1)--递归和动态规划(4)其他问题

    一.汉诺塔问题(包括chapter 1中的汉诺塔问题) 二. 三. 四. 五. 六. 七. 八.

  7. SpringBoot接管SpringMvc

    SpringBoot接管SpringMvc Spring Web MVC framework(通常简称为“Spring MVC”)是一个丰富的“model 视图控制器”web framework. S ...

  8. Alpha阶段--第六周Scrum Meeting

    任务内容 本次会议为第六周的Scrum Meeting会议 召开时间为周四上午10点,在信南B317召开,召开时间约为30分钟,进行的项目规划和分工 队员 任务 张孟宇 进行用户登录界面的代码编写 吴 ...

  9. yii2中commands的简单应用

    class HelloController extends Controller { /** * This command echoes what you have entered as the me ...

  10. 使用VM虚拟机安装Linux系统详细流程

    最近新换了个电脑,所以需要重新安装虚拟机和Linux系统,话不多说,看流程吧 1.安装vm,这个就不说了,打开VM 2.点击安装虚拟机 3.选择自定义安装 4.选择稍后安装 5.选择要安装的系统 6. ...