《Java从入门到失业》第二章:Java环境(三):Java命令行工具
2.3Java命令行工具
2.3.1编译运行
到了这里,是不是开始膨胀了,想写一段代码来秀一下?好吧,满足你!国际惯例,我们写一段HelloWorld。我们在某个目录下记事本,编写一段代码如下:

保存为“HelloWorld.java”。然后呢?傻了吧,不知道该怎么办了?哈哈!别急,回忆一下java的工作原理,第一步是不是需要编译成字节码文件?前面我们说过JDK的bin目录下包含编译工具和其他工具,其中javac.exe就是编译工具。我们先来研究一下javac。
我们打开一个命令行工具,切换到javac.exe所在目录,输入javac:

我们可以看到,有大量的提示信息,他的用法为:javac <options> <source files>,最常用的为:javac -d descDir sourceFile。
- -d descDir:指定存放编译后的.class文件的路径,当前目录可以用“.”表示。如果省略该选项,则默认在当前目录下生成class文件,并且不生成包文件夹(关于包在后面详细说明)
- sourceFile:源文件.java文件的路径
我们来试一下,我的HelloWorld.java文件存放在“C:\Java大失叔\示例代码\ch02”下,因此我们应该输入:javac -d C:\Java大失叔\示例代码\ch02 C:\Java大失叔\示例代码\ch02\HelloWorld.java,然后回车:

没有任何信息,然后我们发现多了个“HelloWorld.class”文件,成功了!
接下来第二步,就是运行class文件,这就需要用java.exe工具,同样,我们先来看看java工具的用法:

我们发现,其中一个用法为:java [options] class [args…],比较常用的是:
java -classpath class
-classpath:类的路径
我们来试一下,输入:java -classpath C:\Java大失叔\示例代码\ch02 HelloWorld

控制台输出了“Hello World”,程序运行成功了。
2.3.2环境变量
上面这个例子,我们编译和运行的时候,都是在Java安装目录的bin目录(C:\Program Files\Java\jdk1.8.0_261\bin)下来执行javac.exe和java.exe的,我们试试直接在java源文件所在目录下编译,这样编译命令为:javac -d . HelloWorld.java

报错了,为啥呢?回答之前,我们先看一下系统的环境变量。
右键我的电脑,单击“属性”;在出现的系统框中点击“高级系统设置”,你会进入一个系统属性框,选择里面的环境变量,你就会看到下面的框:

我们看到环境变量分成2种:用户变量和系统变量。
- 用户变量:在该处配置的环境变量,只对这个用户(即当前登录这台电脑的用户)有效,一旦用户进行了更换,这里的环境变量将改为新登录用户的环境变量。
- 系统变量:在该处配置的环境变量,对所有用户都生效,不管你换哪个用户,都是生效的
我们主要关注“Path”这个环境变量。我们双击系统变量的Path:

我们发现Path其实就是由若干个路径组成。Windows操作系统命令行在运行可执行程序exe的时候,会先默认在当前目录下查找该exe,如果没有找到,再去环境变量Path中的路径挨个查找,如果还是没有,就报错。因此我们可以把javac.exe所在的目录配置到Path中,这样就可以在任意目录运行javac.exe了。
javac.exe所在的目录为:C:\Program Files\Java\jdk1.8.0_261\bin
一般情况下,我们会额外新建一个环境变量:JAVA_HOME,把它的值设置为:C:\Program Files\Java\jdk1.8.0_261。然后再添加一个Path路径:%JAVA_HOME%\bin。
新建JAVA_HOME:(点击“新建”按钮,按照图示填写)

添加Path路径:(点击新建,输入%JAVA_HOME%\bin,一般情况下,我们会上移到第一位,这样会第一个搜索该目录)

配置完环境变量后,我们再来试试在java文件所在目录编译:

我们发现成功了!同理,java.exe也可以在任意目录下执行了。接下来我们看看运行:

1, 切换到java.exe所在目录:“C:\Program Files\Java\jdk1.8.0_261\bin”
2, 执行“java HelloWorld”,报错
3, 执行“java -classpath C:\Java大失叔\示例代码\ch02 HelloWorld”,成功
4, 切换到HelloWorld.class所在目录:“C:\Java大失叔\示例代码\ch02”
5, 执行“java HelloWorld”,成功
这里简单说明一下:运行java程序的java.exe,参数-classpath指定class文件的路径,如果不指定,则默认在当前路径下加载类,因此第2步会报错。
到此为止,我们简单的介绍了通过命令行工具javac.exe来编译Java程序,通过java.exe来运行Java程序。当然,这里只是非常简单的做了介绍,让大家有一个直观的认识和了解,对java的工作原理加深一下理解。我们在日常工作中也很少用到这种方式,如果想要详细了解这一块内容,等有了足够多的经验,可以再回过头参详更加专业的官方说明或书籍。
《Java从入门到失业》第二章:Java环境(三):Java命令行工具的更多相关文章
- 《Java从入门到失业》第四章:类和对象(4.5):包
4.5包 前面我们已经听过包(package)这个概念了,比如String类在java.lang包下,Arrays类在java.util包下.那么为什么要引入包的概念呢?我们思考一个问题:java类库 ...
- ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...
- C语言编程入门之--第二章编译环境搭建
第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...
- Node入门教程(3)第二章: Node 安装
Node 安装 官网下载地址: https://nodejs.org/en/download/ 安装方式 windows 下安装 建议直接选择:Windows Installer (.msi)下载进行 ...
- Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参
Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...
- 来认识一下venus-init——一个让你仅需一个命令开始Java开发的命令行工具
源代码地址: Github仓库地址 个人网站:个人网站地址 前言 不知道你是否有过这样的经历.不管你是什么岗位,前端也好,后端也罢,想去了解一下Java开发到底是什么样的,它是不是真的跟传说中的一样. ...
- .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...
- NET Core 环境搭建和命令行CLI入门
NET Core 环境搭建和命令行CLI入门 2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文 ...
- 探索Windows命令行系列(2):命令行工具入门
1.理论基础 1.1.命令行的前世今生 1.2.命令执行规则 1.3.使用命令历史 2.使用入门 2.1.启动和关闭命令行 2.2.执行简单的命令 2.3.命令行执行程序使用技巧 3.总结 1.理论基 ...
随机推荐
- 题解 SP3734 【PERIODNI - Periodni】
考虑用\(DP\)和组合数学来解决. 因为原图像不规则的形状不好处理,所以先用笛卡尔树(性质为小根堆)将其划分成一个一个的矩形. 发现在笛卡尔树上的每个节点都对应一个矩形,矩形高为\(h_x-h_{f ...
- 004.Nginx日志配置及状态监控
一 Nginx请求简介 1.1 请求头部 对于HTTP而言,客户端负责发起request请求,服务端负责response响应. request:包括请求行.请求头部.请求数据: response:包括 ...
- 进度条函数 -------ajax初试
做一个显示任务完成情况的进度条: <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...
- 了不起的Node.js 5/16
Chapter 1 安装 1.Node.js的设计理念之一,只维护较少量的依赖,这使得安装node.js变得非常简单. 2.执行文件console.log没问题,但是node执行http静态服务器的时 ...
- HTML <html> manifest 属性
实例 带有缓存 manifest 的 HTML 文档(用于离线浏览): <!DOCTYPE HTML><html manifest="demo.appcache" ...
- PHP connection_status() 函数
实例 返回连接状态: <?phpswitch (connection_status()){高佣联盟 www.cgewang.comcase CONNECTION_NORMAL:$txt = 'C ...
- PHP strrchr() 函数
实例 搜索 "world" 在字符串中的位置,并返回从该位置到字符串结尾的所有字符: <?php高佣联盟 www.cgewang.comecho strrchr(" ...
- luogu P5470 [NOI2019]序列 dp 贪心 费用流 模拟费用流
LINK:序列 考虑前20分 容易想到爆搜. 考虑dp 容易设\(f_{i,j,k,l}\)表示前i个位置 选了j对 且此时A选择了k个 B选择了l个的最大值.期望得分28. code //#incl ...
- luogu P2607 [ZJOI2008]骑士 tarjan dp
LINK:骑士 本来是不打算写的 发现这道题在tarjan的时候有一个坑点 所以写出来记录一下. 可以发现图可能是不连通的 且一个连通块中是一个奇环树. 做法:类似tarjan找割点 然后把环给拉出来 ...
- bzoj 4238 电压
LINK:电压 一张图 每个点可以为黑点或百点 每一条边的两端都必须为一黑一白.询问又多少条边满足除了这条边不满足条件其余所有边都满足条件. 分析一下这个所谓的条件 每一条边的两端必须为一黑一白 所以 ...