理解环境变量

以Windows 7为操作系统载体来讲解Java。而在开发Java程序之前,通常需要先在Windows操作系统中配置好有关Java的系统环境变量(Environment Variable)。

在介绍环境变量的含义之前,我们先举一个形象的例子,给读者一个感性的认识。比如我们喊一句:“张三,你妈妈喊你回家吃饭!”可是“张三”为何人?他在哪里呢?对于我们人来说,认不认识“张三”都能给出一定的响应,如认识他,可能就会给他带个话;而不认识他,也可能帮忙吆喝一声“张三,快点回家吧!”

然而,对于操作系统来说,假设“张三”代表的是一条命令,它不认识“张三”是谁,也不知道“它”来自何处,它会“毫无情趣”的说,我“不认识“张三”: “not recognized as aninternal or external command,然后拒绝继续服务。

为了让操作系统“认识”张三,我们必须给操作系统有关张三的精确信息,如“XXX省YYY县ZZZ乡QQQ村张三”,但其他的问题又来了,如果“张三”所代表的命令是用户经常用到的,每次使用“张三”,用户都在终端敲入“XXX省YYY县ZZZ乡QQQ村张三”,这是非常繁琐的,能不能有简略的办法呢?聪明的系统设计人员想出了一个简易的策略——环境变量。把“XXX省YYY县ZZZ乡QQQ村”设置为常见的“环境”,当用户在终端仅仅敲入“张三”时,系统自动检测环境变量集合里有没有“张三这个人,如果在”“XXX省YYY县ZZZ乡QQQ村”找到了,就自动替换为一个精确的地址“XXX省YYY县ZZZ乡QQQ村张三”,然后继续为用户服务。如果整个环境变量集合里都没有“张三”,那么再拒绝服务,如下图所示。

操作系统里没有上/下行政级别的概念,但却有父/子文件夹的概念,二者有“曲艺同工”之处。对“XXX省YYY县ZZZ乡QQQ村”这条定位“路径”,操作可以用“/”来区分不同级别文件夹,即:”“XXX省/YYY县/ZZZ乡/QQQ村””,而“张三”就像这个文件夹下的命令文件。

下面给出环境变量的正式定义。

环境变量是指在操作系统指定的运行环境中的一组参数,它包含一个或多个应用程序使用的信息。环境变量一般是多值的,即一个环境变量可以有多个值,各个值之间以英文状态下的分号“;”(即半角的分号)分隔开来。

对于Windows等操作系统来说,一般都有一个系统级的环境变量Path(路径)。当用户要求操作系统运行一个应用程序,却没有指定应用程序的完整路径时,操作系统首先会在当前路径下寻找该应用程序,如果找不到,便会到环境变量路径“Path”指定的路径下寻找。若找到该应用程序则执行它,否则会给出错误提示。用户可以通过设置环境变量来指定自己想要运行的程序的所在位置。

例如,编译Java程序需要用到javac命令,运行Java程序需要java命令。而这两个命令并不是Windows系统自带的命令,所以用户需要通过设置环境变量(JDK的安装位置)来指定这两个命令的位置。设置完成后就可以在任意目录下使用这两个命令了,而无需每次都要输入这两个命令的所在的精确全路径(如C:\ProgramFiles\Java\jdk1.8.0_05)。javac和java等命令都放在JDK安装目录的bin目录下。基于类似于环境变量“Path”相同的理由,我们需要掌握JDK中最重要的3个环境变量,下面一一给予介绍。

配置JDK中的3个环境变量

对于环境变量中相关变量的深刻理解极为重要,特别是ClassPath,在日后的Java学习开发过程中会发现,很多问题的出现都与ClassPath环境变量有关。在学习如何配置这些环境变量之前,很有必要深刻理解下面3个环境变量代表的含义。

⑴ JAVA_HOME:顾名思义,”JAVA的家“——该变量是指安装Java的JDK路径,它告知操作系统在哪里可以找到JDK。

⑵ Path:前文已经有所介绍。该变量是告诉操作系统可执行文件的搜索路径,即可以在哪些路径下找到要执行的可执行文件,请注意它仅对可执行文件有效。当运行一个可执行文件时,用户仅仅给出该文件名,操作系统首先会在当前目录下搜索该文件,若找到则运行它,若找不到该文件,则根据Path变量所设置的路径,逐条到Path目录中搜索该可执行文件。

⑶ ClassPath:该变量是用来告诉Java解释器(即java命令)在哪些目录下可找到所需要执行的class文件(即javac编译生成的字节码文件)。

  1. JAVA_HOME的配置

下面我们详细说明Java的环境变量配置流程。

⑴ 在桌面中右击【我的电脑】,在弹出的快捷菜单中选择【属性】选项,

⑵ 在弹出的界面左上方,选择【高级系统设置】选项,如下图所示。

⑶ 单击【高级系统设置】选项后弹出【系统属性】对话框,然后单击【高级】->【环境变量】,如下图所示。

⑷ 在【环境变量】对话框中,单击【系统变量】下的【新建】按钮,显示如下图所示。

⑸ 在【编辑系统变量】对话框中输入,变量名为:“JAVA_HOME”,变量值为:C:\ProgramFiles\Java\jdk1.8.0_05。特别需要读者注意的是,这个路径的具体值是根据读者安装JDK的路径而定,读者把Java安装在哪里,就把对应的安装路径放置于环境变量之内,不可拘泥于本书演示的这个路径值。然后,单击【确定】按钮,如下图所示。

注意
假设JDK安装在“C:\ProgramFiles\Java\jdk1.8.0_05”,在设置完毕对应的环境变量JAVA_HOME后,以后再要用到这个变量时,需用两个%将其包括起来。如要设置另外一个环境变量值为“C:\ProgramFiles\Java\jdk1.8.0_05\bin”,那么我们可以简单的用“%JAVA_HOME%\bin”代替即可。

2. Path的配置

. ⑴ 选中系统环境变量中的Path,单击【编辑】按钮,如下图所示。

⑵ 在弹出的【编辑系统变量】对话框的【变量值】文本框中,在文本框的末尾添加:“;%JAVA_HOME%\bin”,特别注意不要忘了前面的分号“;”,然后单击【确定】按钮,返回【系统属性】对话框,如下图所示。这里的%JAVA_HOME%就是指代前面设置的“C:\Program Files\Java\jdk1.8.0_05”,这里主要是为了方便起见,避免每次引用这个路径都输入很长的字符串。如果不怕麻烦,“;%JAVA_HOME%\bin”完全可以用全路径“;C:\Program Files\Java\jdk1.8.0_05\bin”代替之。这个路径务必设置正确,因为诸如Java语言的编译命令javac和解释命令java等都是在这个路径下,设置失败,这些命令将无法找到。注意:Path路径都是系统路径,配置的过程中要小心,以防无意删掉,最好先备份到文档中。

注意
当Path有多个变量值时,一定要用半角(即英文输入法)下的“;”将多个变量值区分开。初学者很容易犯错的地方:(1)忘记在上一个Path路径值前面添加分号“;”(2)没有切换至英文输入法,误输入中文的分号“;”。英文分号是1个字节大小,而中文的分号是2个字节大小。

⑶ 在【系统属性】对话框中单击【确定】按钮,完成环境变量的设置,如下图所示。

请注意,检测环境变量是否配置成功,在命令行模式下,在任意目录下用javac命令来检验,如果能输出javac的用法提示,则说明配置成功,如下图所示。

进入命令行模式的方法是,单击Windows 7的【开始】菜单,在搜索框中输入CMD命令,然后回车即可。

3. ClassPath的指定
. ClassPath的设定对初学者来说,有一定的难度,容易配错。如果说JAVA_HOME指定的是java命令的运行路径的话,那么ClassPath指定的就是java加载类的路径,只有类在ClassPath中,java命令才能找到它,并解释它。
在Java中可以使用“set classpath”命令指定Java类的执行路径。下面通过一个例子来了解一下classpath的作用,假设这里的“Hello.class”类位于“C:\”目录下。

在“D:\”目录下的命令行窗口执行下面的指令。

之后在“D:\”目录下执行“java Hello”命令,如下图所示。

从上图所示的输出结果可以发现,虽然在“D:\”目录中并没有“Hello.class”文件,但是也可以用“java Hello”执行“Hello.class”文件。之所以会有这种结果,就是因为在“D:\”目录中使用了“set classpath”命令,它把类的查找路径指向了“C:\”目录,在运行java时,会从ClassPath 中查找这个Hello类文件,而ClassPath 中包括了“C:\”,所以运行成功。

注意
在设置classpath时,最好将classpath指向当前目录,即所有的class文件都从当前文件夹中开始查找:“set classpath=.”。在命令行输入命令时,不包括上面的引号“ ”。在Windows及Linux等操作系统下,一个点“.”代表当前目录,两个点“…”代表上一级目录。

但是这样的操作行命令操作模式,实际上又会造成一种局限:每一次启动命令行窗口所设置的ClassPath都只是针对于当前命令行窗口有效。一旦重新开启命令行窗口,或系统重启,命令行临时设置的ClassPath中变量值都丢失了。如果想“一劳永逸”,最好的办法还是将ClassPath设置为环境变量。

⑴ 参照JAVA_HOME的配置,在【环境变量】对话框中,单击【系统变量】下的【新建】按钮,如下图所示。新建一个环境变量,变量名为:CLASSPATH,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar。注意不要忽略了前面的 “.” ,这里的小点“.”代表的是当前路径,既然是路径,自然也需要用分号“;”隔开。JDK的库所在包即tools.jar,所以也要设置进ClassPath中。

注意
Windows系统环境下,一般只要设置好JAVA_HOME就可以正常运行Java程序。默认的ClassPath是当前路径(即一个点 “.”)。有些第三方的开发包,需要使用到环境变量ClassPath,只有这样才能够使用JDK的各种工具。Windows下不区分大小写,ClassPath和CLASSPATH是等同的,可根据习惯自己选择大小写

⑵ 在按照步骤⑴设置后,如果在Java类(即.class)文件所存储的当前路径下,那么用“java+类名”方式解释执行用户类文件,这是没有问题的。但是如果用户更换了路径,现在的“当前路径”里没有在.class文件,那么“java”就无法找到这个类文件。

这时,即使在命令行下给出.class文件所在的全路径,java依然会出错,这会让初学者很困惑。下面具体说明,假设Java文件Hello.java存在在“D:\src\chap01\”路径下,由于JAVA_HOME和Path环境变量正确,用户可以正确编译、运行,使用javac和java命令无误,如下图所示。

但是如果用户切换了路径,比如使用“cd”命令切换至“D:\src\”,再次用java运行Hello类文件,就会得到错误信息:“Error: Could not find orload main class TestJava2_1”,如下图所示。这是因为Java在ClassPath里找不到Hello.class,因为现在的这个当前路径(也就是那个“.”代表的含义)已经变更为“D:\src\”,而“D:\src\”路径下确实没有Hello.class这个文件。

⑶ 最后,参照环境变量Path的配置,将环境变量CLASSPATH添加到Path的最后,如下图所示。CLASSPATH是环境变量,在另外一个地方作为变量使用时,要用两个%将该变量前后包括起来。

如果用户原来的命令行终端窗口一直开启着,则需要关闭再重启命令行窗口,这是因为需要重新更新命令行窗口的环境变量。之后,就可以在任意路径下执行用户自己的类文件,如下图所示。

编写Hello.java程序


将上面的程序保存为“Hello.java”文件。行号是为了让程序便于被读者(或程序员)理解而人为添加的,真正Java源代码是不需要这些行号的。在命令行中输入“javac Hello.java”,没有错误后输入“java Hello”。运行结果如下图所示,显示“Hello World!”。

Java程序运行的流程可用如右图来说明:所有的Java源代码(以.java为扩展名),通过Java编译器javac (javac命令中字母c来自于compiler的首字母)编译成字节码,也就是以.class为扩展名的文件。然后利用命令java将对应的字节码通过Java虚拟机(JVM)解释为特定操作系统(如Windows、Linux等)能理解的机器码,最终Java程序得以执行。


这里需要注意的是,此处的java命令在Windows操作系统下,不区分大小写,诸如java 和JavA都是等同的。而在Linux等类UNIX系统下,由于区分大小写,javac和java命令等的所有命令字符都必须小写。
下面我们来解读一下这个Java小程序,对Java程序有个初步的认知。

第1行。public 是一个关键字,用于声明类的权限,表明这是一个公有类(class),其他任何类都可以直接访问它。class 也是Java的一个关键字,用于类的声明,其后紧跟的就是类名,这里的类名称是Hello。

第2行和第9行。这一对大括号{}标明了类的区域,在这个区域内的所有内容都是类的一部分。

第3行和第6行。这两行为注释行,可以提高程序的可读性。注释部分不会被执行。这种注释属于单行注释,要求以双斜线//开头,后面的部分均为注释。

第4行。这是一个main方法,它是整个Java程序的入口,所有的程序都是从public static voidmain(String args[])开始运行的,该行的代码格式是固定的。String args[]不能漏掉,如果漏掉,在一些编辑器中,如Eclipse,该类不能被识别执行。另外String args[]也可以写成String [] args,String为参数类型,表示为字符串型,args是arguments(参数)的缩写。public 和static都是Java的关键词,它们一起表明main是公有的静态方法。void也是Java的关键词,表明该方法没有返回值。

第5行和第8行是main方法的开始和结束标志,它们声明了该方法的区域,在{}之内的语句都属于main方法。

第7行System.out.println是Java内部的一条输出语句。引号内部的内容"Hello World !"会在控制台中打印出来。

探秘Java虚拟机(JVM)

我们看到Java编译器——javac仅仅将源代码编译成.class文件,然后通过命令java将.class文件送往Java虚拟机(JVM),变成最终可执行的程序。下面我们就Java虚拟机的机制进行简单的讨论。

Java中的虚拟机的概念,可以看作是在机器和编译程序之间加入了一层抽象的虚拟机器。这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机却是相同的。

Java程序得以执行的环境称之为Java运行时环境(Java Runtime Environment, 简称JRE),它由Java的虚拟机JVM和Java 的API构成。一个Java程序若想运行在Java虚拟机之中,源代码的语句需由Java编译器编译成字节码。字节码本质上是一种标准化的可移植的二进制格式。该格式以Java类文件(.class)的形式存在。一个Java程序可有多个不同的.class文件构成。在早期发布大型的Java程序,通常把多个.class文件打包成一个发布文件.jar,其扩展名来自于“java archive”(java 归档文件)的简写。

Java虚拟机在执行.class或jar文件时,使用到“即时编译器”(JIT compiler,just-in-timecompiler)。“即时编译器”是一个把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器(processor)指令的程序。本质上,“即时编译器”是Java程序的第二个编译器,它能把通用的字节码编译成特定系统的机器指令代码。但是这里的二次编译,对用户来说基本上是“透明的”—即它存在但用户无需感知。
值得一提的是,另外一种网络编程常见语言—Python,也可以通过jpython(Python的纯java实现版本)编译后,同样也生成Java编译生成一样的字节码,从而也大大提供了该类程序的可移植性。

认识Java程序的框架

Java——环境变量的配置相关推荐

  1. java环境变量的配置_一文带你学会Java环境变量配置(小白向)

    很多人初学Java的时候,因为Java环境变量的配置卡的心烦意乱. 又有很多人百度上翻来翻去,得到的答案五花八门,让你头晕眼花. 你肯定也在想,不就是个环境变量的配置吗?为什么搜了那么多答案,依然不能 ...

  2. macbook配置java环境变量_配置java环境变量

    1.找到此电脑我的电脑右键属性. 2.点击高级系统设置. 3.点击环境变量. 4.点击新建. 5.创建变量名JAVA_HOME必须是大写,变量值找到你的jdk的根目录复制下来,然后粘贴进去,点击确定. ...

  3. Java环境变量的配置与介绍

    目录 一.初识Java 1.Java版本 2.Java语言的特性[开源.免费.跨平台.面向对象] 二.JDK的介绍与安装 1.JDK.JRE.JVM 2.JDK编译.运行Java文件 3.JDK的下载 ...

  4. Android Studio配置和安装(JAVA环境变量的配置)

    1. 下载Android studio:https://developer.android.google.cn/studio/,版本已经更新到3.4.1了 2. 安装 3. 更改字体和背景色 File ...

  5. Windows8系统中JAVA环境变量的配置

    在Windows8系统中进行JAVA环境变量的配置 Windows8是微软最新和最具有革命性变化的操作系统.该系统旨在让人们的日常电脑操作更加简单和快捷,为人们提供高效易行的工作环境.目前,微软官方已 ...

  6. java环境变量一键配置工具

    java环境变量一键配置工具是一款环境变量配置软件,对于需要学编程的新手来说,第一步就是配置环境变量,通过java环境变量一键配置工具可以一键进行配置,方便好用. 相关软件软件大小版本说明下载地址 j ...

  7. Windows 下java环境变量的配置(Windows7 ,8,8.1,10)

    Windows 下java环境变量的配置 在"系统"面板的左上角选择"高级系统设置",在弹出的系统属性中选择"高级"项,然后点击右下角的&q ...

  8. R语言 | xlsx包的安装(附链接:java环境变量的配置与详解)

    在下载xlsx包之前,要先下载java并且完成环境变量的设置 详细的教程见:(7条消息) java环境变量 的配置与详解(全网最详细教程)_S-D-C-L-Yourn的博客-CSDN博客_java环境 ...

  9. java环境变量的配置_Java的下载及环境变量的配置

    讲讲java的安装,java的官方下载地址为https://www.oracle.com/technetwork/java/javase/downloads/index.html目前oracle官网提 ...

  10. ubuntu java环境变量_ubuntu配置java环境变量

    ubuntu 安裝java環境變量,我使用的是jdk-11.0.9 1.解壓安裝包到/usr/local/share/ tar -zxvf 安裝包名 /usr/local/share/ 此時在/usr ...

最新文章

  1. PHP TP5框架 安装运行 Warning: require(E:\phpstudy_pro\WWW\TP5\tp5\public/../thinkphp/base.php): failed to
  2. 【已解决】Android 如何让应用在后台运行
  3. GDCM:gdcm::Curve的测试程序
  4. hibernate下载
  5. Apollo自动驾驶入门课程第⑨讲 — 控制(上)
  6. Element-ui导航组件NavMenu导航高亮设置
  7. Linux、Mac、windows 系统下 配置Python虚拟环境 virtualenvwrapper教程,workon切换环境, 非常简单方便
  8. flutter 输入框限制输入 数字、小数
  9. centos mysql 主从配置_centos7.4安装mysql8,并设置主从配置
  10. java并发编程之HappenBefore
  11. Linux C++ STL用法介绍(1)
  12. 百度 AI 再发福利!不仅有实战营,还有手把手教学的“深度学习公开课”
  13. JavaScript的预解析(1)
  14. DSP之外部设备连接接口之HPI
  15. 单片机c语言编程乘法运算符,单片机C语言编程常用的运算符介绍
  16. 磁传感器AKM8975驱动和中间层
  17. 任正非谈鸿蒙系统工程,任正非谈鸿蒙系统:能完美适应物联网 性能超安卓
  18. 网络数据里的身份证实名认证接口,你了解多少?
  19. 数据量太大,节省内存的几种方式
  20. Python实验,用pygame做飞机大战游戏设计

热门文章

  1. Linux网络环境配置 虚拟机网络环境配置
  2. Hadoop之HDFS常见面试题
  3. java之枚举类型enum
  4. 初识希尔伯特变换(Hilbert Transform)
  5. WebSocket 结合 Nginx 实现域名及 WSS 协议访问
  6. STM32’s I2C 硬件BUG引发的血案(qzm)
  7. percona mysql备份与恢复(一)
  8. 2022 七校联合NewStarCTF 公开赛赛道 WEEK3|MISC
  9. 雅可比矩阵和行列式(Jacobian)
  10. Bugku旧平台misc writeup