什么是环境变量?为什么java要配置环境变量?

  • Post author:
  • Post category:java




一.什么是环境变量?





1.1用户变量与系统变量



我们首先先找到修改系统变量的地方:

win+R 键输入sysdm.cpl找到高级–>环境变量

在这里插入图片描述

从上图我们可以看到环境变量包括用户变量和系统变量:

  1. 用户变量是指我们当前登入这台电脑的用户,比如管理员用户,普通用户。在里面配置的环境变量,只对这个用户有效,一旦用户进行了更换,这环境变量将改为新登录的环境变量.
  2. 系统变量指这台电脑的配置的环境变量,对所有用户都生效,不管你换哪个用户,都是生效的.



1.2Path路径:



我们先明确两个概念:

1. path路径:用来指定可执行文件的搜索路径,也就是后缀名 为.exe文件.


exe是程序,而bat是批处理。

bat记录的是一批命令的序列。

bat你直接用记事本即可打开查看。

这两个概念应该不难区分。


2.exe文件: 你桌面上快捷方式的根本,点开快捷方式相当于点开.exe文件;

通过一个QQ例子来讲解:

首先安装好QQ,我们不用快捷方式打开它,而是通过cmd进入dos界面,直接输入QQ,出现下面的图片.

在这里插入图片描述

原因是,你想让一个系统运行一个程序,你首先得告诉它这个程序在哪,不然系统:“WTF”;所以我们需要将QQ的可执行文件位置告诉系统,QQ可执行文件位置如下:

在这里插入图片描述

所以我们在dos界面中找到QQ的可执行文件的路径,输入QQ,QQ就打开了:但是,你关掉Dos后重新进入,输入QQ发现,又是上面的问题,这就意味着你要从Dos 打开QQ的话,必须每次进入QQ.exe文件所在的路径,每次都给系统QQ.exe文件的绝对路径,这样很麻烦

于是英雄登场,一个一劳永逸的方法就是将QQ.exe的文件路径放在Path环境变量里面,以后要打开QQ就不用每次进入该路径了,下图配上QQ.exe路径时的path变量。

在这里插入图片描述

这样我们直接在dos中不给出绝对路径就可以直接打开QQ了:

在这里插入图片描述


1.3总结

path变量的作用时可以让我们在没有这个应用的路径下面打开我们需要打开的应用,前提时这个应用得在环境变量里面配置了路径.



二.为什么java要配置环境变量?



2.1为什么要配置jdk的环境变量



1.因为我们没有配置jdk的环境变量,所以在没有jdk/bin目录下是运行不了java.exe和java.exe

那好办,我们可以去jdk/bin目录下运行java程序啊,但我们在bin目录下通过启动java.exe,然后再通过javac.exe要把一个java文件编译成class文件,这个class文件就生成在jdk/bin目录里了,这样不好,所以我们需要把jdk配置到path目录里面,这样在任何目录下都能运行java.exe和javac.exe 来编译.java文件了,这样就不会让jdk/bin目录里有许多我们的java文件和class文件.



2.2如何配置



和上面一样,把jdk/bin目录加到path环境中去.

在这里插入图片描述



2.3配置JAVA_HOME变量



如果我们需要配置多个jdk的环境变量,我们也需要把每个目录都添加到path中吗?这样path 是不是就看起来乱了呢? 这时候,我们就需要一个JAVA_HOME变量了.

在上面的编辑环境变量里面,我们有发现有些使用%SystemRoot%system32 的变量值,但是我们在cmd中查看path变量的时候

(使用set命令)

却没有而和他很像的C:WINDOWSsystem32,那是因为我们系统存在一个SystemRoot为变量名的变量.变量名是C:WINDOWS而这个是隐藏的,我们无法看到,我们可以把这个变量名理解成我们java中的int a = 1;int b=a;后边的b是等于a,而我们看到的效果是a=1,所以b=1;而不是b=a变量名.

配置步骤如下:

1.我们在系统变量这里点击新建

2.点击新建后弹出一个新建系统变量的窗体,然后把变量名填写为JAVA_HOME,把变量名填写成你jdk的安装目录(注意,不用bin目录),然后点击确定.

3.然后再编辑path环境变量,把刚才的配置的jdk的变量改成 %JAVA_HOME%bin

4.保存配置,打开一个cmd窗口,输入path,可以看到,我们配置的环境变量的%JAVA_HOME%已经替换成刚才JAVA_HOME变量的变量值了,而且java程序也能够运行.


为什么配置JAVA_HOME,一定要用JAVA_HOME命名吗?


1.我们电脑如果装了多个版本的jdk,我们只需要在JAVA_HOME 中把jdk的目录添加进去,而不用在path里面加bin目录的路径

2.因为有些开发工具,如(eclipse,IDEA,tomcat)都会去扫描你的JAVA_HOME变量,看看你的电脑装了几个版本的jdk.

3.可以不用JAVA_HOME这个名字当参数名,那么有些软件启动需要JAVA_HOME,例如tomcat,当你不用这个命名,你就需要去修改tomcat 目录下的catalina.bat文件,才能启动tocat,何必呢?


三.配置CLASSPATH变量


我们配置path环境变量,只是告诉我们的电脑,我们装了java,这个应用放在哪里,而CLASSPATH就相当于java虚拟机的path,它是用来告诉我们需要运行的.class文件放在哪里。

配置CLASSPATH和JAVA_HOME配置类时,点击新建变量,变量名为CLASSPATH:

我们一定要配置CLASSPATH路径吗?一定要用CALSSPATH命名吗?

1.jdk1.5以后就不用配置CLASSPATH了,但是我们为了保证向下兼容,所以建议还是配置上为好。

2.在上面JAVA_HOME的图中,tomcat 也是会自动读取系统变量里面的CLASSPATH。

题外话:


四.jdk jre jvm的三者的区别和联系


以上的java环境配置要了解了jdk jre jvm这三者的区别才能理解透彻

1.jdk (Java Developer’s Kit) java开发工具

开发人员所用的

jdk(jdk1.8)的目录如下:

在这里插入图片描述

2.jre(Java Runtime Environment)java运行环境,

运行java程序所用的,如果只是想运行java程序只安装jre

就可以了jre的目录如下:

在这里插入图片描述

jvm (Java Virtual Machine)java虚拟机

是用来解释我们的class文件与操作系统进行交互

jvm的目录如下:

在这里插入图片描述

三者的联系:

jdk中目录中包含jre jre目录中包含jvm(就是jre的bin目录),三者的关系如下图所示:

一个完整的java程序的运行 .java文件 —javac(java 编译器) —–.class文件—windows版

jvm —-通过系统调用映射到 ——>windows执行.

在这里插入图片描述

聊一下图上所示的java工具

javac: java编译器,把.java文件编译成.class字节码文件

java: java解释器.它的工作就是把字节码转化为机器码并在特定的平台进行运行。简单一点,java的解释器只是一个基于虚拟机JVM平台的程序 ,即jdk或jre目录下bin目录中的java.exe文件。 Java解释器相当于运行Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,而是用软件实现的。

JDK体系结构图:


jconsole:这是一款比较实用的工具,比如说检测死锁(也可以在idea的Terminal使用jstack命令) 查看虚拟机信息.查看JIT(Java即时编译器)信息.堆栈跟踪(推荐使用arthas)


在这里插入图片描述


小插曲


Java8之后在安装jdk时便不再提供jre的安装,所以要求我们手动安装,以jdk11为例

1.打开cmd(使用管理员运行) 进入 jdk的所在目录

2.输入命令:bin\jlink.exe –module-path jmods –add-modules java.desktop –output jre

3.实际上这是在运行bin目录中的jlink.exe程序,我们进入bin目录再运行:jlink.exe –module-path jmods –add-modules java.desktop –output jre 指令,效果也是一样的。

4.再次查看就有jre目录了.

5.如果显示错误,那就是打开cmd没有使用管理员运行