《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.理论基 ...
随机推荐
- Puppeteer爬虫实战(三)
本篇文章针对大家熟知的技术站点作为目标进行技术实践. 确定需求 访问目标网站并按照筛选条件(关键词.日期.作者)进行检索并获取返回数据中的目标数据.进行技术拆分如下: 打开目标网站 找到输入框元素 ...
- 理解Spring(二):AOP 的概念与实现原理
目录 什么是 AOP AOP 的基本术语 Spring AOP 的简单应用 Spring AOP 与动态代理 Spring AOP 的实现原理(源码分析) 扩展:为什么 JDK 动态代理要求目标类必须 ...
- ICPC North Central NA Contest 2018
目录 ICPC North Central NA Contest 2018 1. 题目分析 2. 题解 A.Pokegene B.Maximum Subarrays C.Rational Ratio ...
- 学Python入门应该先学什么?看完本文你就知道了
学Python应先从Python开发基础部分入手:1.如学习Python语言介绍2.环境安装3.Python基本语法4.基本数据类型5.二进制运算6.来流程控制.7.字符编码.文件处理8.数据类型9. ...
- 一个文本框的andriod教程
https://blog.csdn.net/androidmsky/article/details/49870823
- python的__get__方法看这一篇就足够了
get类型函数 直接上代码: class TestMain: def __init__(self): print('TestMain:__init__') self.a = 1 if __name__ ...
- git chechout
在克隆完一个的版本库时,git会在本地创建一个master分支用于跟踪远端的master分支 如git clone abc.git 默认情况下git会在本地创建一个master分支 但是,在本地mas ...
- 5-Pandas之常用的描述性统计函数、汇总函数
一.常用的描述性统计函数 函数 作用 函数 作用 count 非缺失样本的数量 sum 求和 mean 均值 mad 平均绝对偏差(Mean absolute deviation) median 中 ...
- PHP 变量讲解
PHP 变量 变量是用于存储信息的"容器": 实例 <?php $x=5; $y=6; $z=$x+$y; echo $z; ?> 运行实例 » 与代数类似 x=5y= ...
- Requests接口测试库-官网快速上手
Requests 一个发送HTTP请求的库基于urllib3,相比自带的库,提供了更高效简洁的可用方法,测试从业者用来做接口测试的一个好工具 文章内容均来自官网:https://requests.re ...