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. Linux常用命令(学习笔记)

    命令编写以遇到的生产问题的前后为顺序进行记录 虚拟机的镜像是centos6.5版本,在这个版本下,我个人整理记录了一些在linux上常用的命令以及一些项目部署需要的jdk.tomcat.mysql等的 ...

  2. 数据治理工具调研之DataHub

    1.项目简介 Apache Atlas是Hadoop社区为解决Hadoop生态系统的元数据治理问题而产生的开源项目,它为Hadoop集群提供了包括数据分类.集中策略引擎.数据血缘.安全和生命周期管理在 ...

  3. 趣学Python编程PDF高清完整版免费下载|百度网盘

    百度网盘:趣学Python编程PDF高清完整版免费下载 提取码:ts47 内容简介 python是一款解释型.面向对象.动态数据类型的高级程序设计语言.python语法简捷而清晰,具有丰富和强大的类库 ...

  4. linux的/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow

    1./etc/passwd  存储用户信息 [root@oldboy ~]# head /etc/passwd root:x:::root:/root:/bin/bash bin:x:::bin:/b ...

  5. bootstrap插件-滚动监听

    代码 引入bootstrap.js 和bootstrap.css两个文件 <!DOCTYPE html> <html> <head> <meta charse ...

  6. 图解 JVM 核心知识点(面试版)

    一.基本概念 1.1 OpenJDK 自 1996 年 JDK 1.0 发布以来,Sun 公司在大版本上发行了 JDK 1.1.JDK 1.2.JDK 1.3.JDK 1.4.JDK 5,JDK 6 ...

  7. abp框架Excel导出——基于vue

    abp框架Excel导出--基于vue 目录 abp框架Excel导出--基于vue 1.技术栈 1.1 前端采用vue,官方提供 1.2 后台是abp--aspnetboilerplate 2. E ...

  8. PHP lcg_value() 函数

    实例 返回范围为 (0, 1) 的一个伪随机数: <?phpecho lcg_value();?>高佣联盟 www.cgewang.com 定义和用法 lcg_value() 函数返回范围 ...

  9. CF 题目选做

    写省选的题目对noip没什么大用 关键是 细节题或者是思考题比较重要 练思维自然是CF比较好了 把我见到的比较好的CF题放上来刷一刷. LINK:Complete the projects 就是说一个 ...

  10. node日志管理 / pm2-logrotate-ext日志管理

    本篇文章说的是,如何使用pm2管理node项目的日志输出(切割和备份),文章步骤是基于已经安装了pm2的前提下,没有的,请自行百度. 第一步:需要登录公司服务器,查看一下目前服务器保存的所有日志(用于 ...