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命令行工具的更多相关文章

  1. 《Java从入门到失业》第四章:类和对象(4.5):包

    4.5包 前面我们已经听过包(package)这个概念了,比如String类在java.lang包下,Arrays类在java.util包下.那么为什么要引入包的概念呢?我们思考一个问题:java类库 ...

  2. ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...

  3. C语言编程入门之--第二章编译环境搭建

    第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...

  4. Node入门教程(3)第二章: Node 安装

    Node 安装 官网下载地址: https://nodejs.org/en/download/ 安装方式 windows 下安装 建议直接选择:Windows Installer (.msi)下载进行 ...

  5. Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

    Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...

  6. 来认识一下venus-init——一个让你仅需一个命令开始Java开发的命令行工具

    源代码地址: Github仓库地址 个人网站:个人网站地址 前言 不知道你是否有过这样的经历.不管你是什么岗位,前端也好,后端也罢,想去了解一下Java开发到底是什么样的,它是不是真的跟传说中的一样. ...

  7. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

    2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...

  8. NET Core 环境搭建和命令行CLI入门

    NET Core 环境搭建和命令行CLI入门 2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文 ...

  9. 探索Windows命令行系列(2):命令行工具入门

    1.理论基础 1.1.命令行的前世今生 1.2.命令执行规则 1.3.使用命令历史 2.使用入门 2.1.启动和关闭命令行 2.2.执行简单的命令 2.3.命令行执行程序使用技巧 3.总结 1.理论基 ...

随机推荐

  1. Puppeteer爬虫实战(三)

    本篇文章针对大家熟知的技术站点作为目标进行技术实践. 确定需求   访问目标网站并按照筛选条件(关键词.日期.作者)进行检索并获取返回数据中的目标数据.进行技术拆分如下: 打开目标网站 找到输入框元素 ...

  2. 理解Spring(二):AOP 的概念与实现原理

    目录 什么是 AOP AOP 的基本术语 Spring AOP 的简单应用 Spring AOP 与动态代理 Spring AOP 的实现原理(源码分析) 扩展:为什么 JDK 动态代理要求目标类必须 ...

  3. ICPC North Central NA Contest 2018

    目录 ICPC North Central NA Contest 2018 1. 题目分析 2. 题解 A.Pokegene B.Maximum Subarrays C.Rational Ratio ...

  4. 学Python入门应该先学什么?看完本文你就知道了

    学Python应先从Python开发基础部分入手:1.如学习Python语言介绍2.环境安装3.Python基本语法4.基本数据类型5.二进制运算6.来流程控制.7.字符编码.文件处理8.数据类型9. ...

  5. 一个文本框的andriod教程

    https://blog.csdn.net/androidmsky/article/details/49870823

  6. python的__get__方法看这一篇就足够了

    get类型函数 直接上代码: class TestMain: def __init__(self): print('TestMain:__init__') self.a = 1 if __name__ ...

  7. git chechout

    在克隆完一个的版本库时,git会在本地创建一个master分支用于跟踪远端的master分支 如git clone abc.git 默认情况下git会在本地创建一个master分支 但是,在本地mas ...

  8. 5-Pandas之常用的描述性统计函数、汇总函数

    一.常用的描述性统计函数  函数 作用 函数 作用 count 非缺失样本的数量 sum 求和 mean 均值 mad 平均绝对偏差(Mean absolute deviation) median 中 ...

  9. PHP 变量讲解

    PHP 变量 变量是用于存储信息的"容器": 实例 <?php $x=5; $y=6; $z=$x+$y; echo $z; ?> 运行实例 » 与代数类似 x=5y= ...

  10. Requests接口测试库-官网快速上手

    Requests 一个发送HTTP请求的库基于urllib3,相比自带的库,提供了更高效简洁的可用方法,测试从业者用来做接口测试的一个好工具 文章内容均来自官网:https://requests.re ...