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. OKex平台如何使用谷歌身份验证?

    打开OK交易所官网,找到谷歌身份验证器的开启界面 登陆后点击右上角头像-账户和安全 然后[安全设置]里出现“谷歌验证”的位置,点击开启按钮,到了二维码和密钥显示的界面 我们不使用谷歌身份验证器,因为需 ...

  2. web自动化 -- 切换 iframe

    先看源码 switch_to_frame() frame() 具体用法

  3. CSS3选择器用法小结

    1.*通配符选择器 eg:*{margin:0;padding:0;} 2.#id选择符 ID选择器是CSS中效率最高的选择器,使用的时候要保证ID的唯一性 eg:#div{width:960px;m ...

  4. hadoop2.7.3+spark2.0.1+scala2.11.8集群部署

    一.环境 4.用户 hadoop 5.目录规划 /home/hadoop/app    #程序目录 /home/hadoop/data  #数据目录     #打开文件的最大数 vi /etc/sec ...

  5. 数据库事务的四个特性ACID

    原子性[Atomicity] 原子性指的指的就是这个操作,要么全部成功,要么全部失败回滚.不存在其他的情况. 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一 ...

  6. STL set

    写在前面:STL大法好! 容器set,可以实现排序,插入元素不能重复(所以可能插入失败) 接下来我们看一下set的基本用法 begin()     返回set容器的第一个元素的地址 end() 返回s ...

  7. c语言大小写转化函数(包括字母和字符串)

    本憨憨忘了好几次了,这次一定记住他们! 首先大小写相差32.转换的话自己写函数也是可以写出来的. 1.字母 如果是字母转的话,用toupper(),tolower() 头文件是<ctype.h& ...

  8. 在excel中如何给一列数据批量加上双引号

    在实际开发中,会遇到这样的需求,大量的数据,需要从配置文件里读取,客户给到的枚举值是字符串,而配置文件里的数据,是json格式,需要加上双引号,这样就需要使用Excel来批量格式化一下数据. 客户给到 ...

  9. 机器学习笔记簿 降维篇 LDA 01

    机器学习中包含了两种相对应的学习类型:无监督学习和监督学习.无监督学习指的是让机器只从数据出发,挖掘数据本身的特性,对数据进行处理,PCA就属于无监督学习,因为它只根据数据自身来构造投影矩阵.而监督学 ...

  10. PHP xml_set_character_data_handler() 函数

    定义和用法 xml_set_character_data_handler() 函数为 XML 解析器建立字符数据处理器. 该函数规定当解析器在 XML 文件中找到字符数据时所调用的函数.高佣联盟 ww ...