编辑/编译《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. google hack 语法

    google hack a b c 自动对词进行拆分匹配 拆分标准 空格 "a b c " 把a b c 当成一个整体去查 " a*b" *通配符 里面是一个或 ...

  2. Spring Cloud Alibaba (nacos 注册中心搭建)

    [nacos下载地址](https://github.com/alibaba/nacos/releases) ### 什么是 Nacos? - nacos主要起到俩个作用一个是注册中心,另外一个是配置 ...

  3. linux文档、目录相关

    linux中常用文档的目录规则: /var 存放经常变化的文件 /home 普通用户家目录 /home/xiaoliu 小刘同学的用户家目录 /etc 存放配置文件的目录 /etc/my.cnf my ...

  4. mac外接显示器 字体发虚解决方案

    描述 今天买的LG性价比之王21:9的2k显示器到了,但是连接mbp后发现,字体发虚,模糊 Macbook 外接显示器默认为 TV 模式,TV 渲染模式下,文字效果非常非常非常差 解决 下载 patc ...

  5. TwoHandleSlider/RangeSlider

    项目需求:双滑块slider,可以实现选择一个范围 (一)添加两个slider,并把背景以及fill设置为透明,并去除RaycastTarget (二)在背景下添加个一个image,背景图为滑块划过后 ...

  6. Amazon S3数据存储

    从官网下载aws 的unity插件,并做了简单修改(主要用修改PostObject),问题: (一)获取Pool ID 通过服务-Cognito-管理/新建用户池,可以新建或者获取Pool ID (二 ...

  7. Dubbo学习系列之十六(ELK海量日志分析框架)

    外卖公司如何匹配骑手和订单?淘宝如何进行商品推荐?或者读者兴趣匹配?还有海量数据存储搜索.实时日志分析.应用程序监控等场景,Elasticsearch或许可以提供一些思路,作为业界最具影响力的海量搜索 ...

  8. RSA学习1

    对PEM文件(以前是一个邮件编码)进行编码,得到RSA公钥.国密的RSA标准,一般是tlv(tag-version)格式的. 明文hash后的数据进行BER编码再进行加密.-签名 对于RSA的结构,全 ...

  9. 基于 HTML5 + WebGL 实现 3D 可视化地铁系统

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

  10. 陈莉君教授: 回望踏入Linux内核之旅

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 陈莉君 来源: 微信公众号linux阅码场(id: linuxdev) 初次踏入Linux 几多耕耘,几多收获 ...