三、为什么要配置环境变量?怎么用cmd编译运行java代码?

  

一、

  当我们在控制台中使用命令时,系统会在我们的当前目录下寻找相应的exe文件。同理,其实我们输入的命令能执行出来其实都是运行了相关的exe而已。而环境变量告诉系统, 当要求系统运行一个程序或者找寻一个文件而没有告诉它程序所在的完整路径时, 系统除了在当前目录下寻找此程序或文件外, 还应到哪些目录下去找。 至于名字为什么叫PATH和CLASSPATH,这是一种原始的dos命令,沿用至今,也就是系统规定的,你取其他名字再放变量值是不行的。

二、入门案例

1.在D盘新建一个txt文件,再改名成Hello.java

2.用记事本打开Hello.java,编写如下代码

public class Hello{

	public static void main(String[] args){
		System.out.println("Hello World");
	}

}

这段代码的意思就是在控制台打出一个HelloWorld

3.在跳转到jdk的bin目录下后,使用javac编译我在D盘写的Hello.Java

4.看,没有报任何错误,说明编译成功,并且在我的D盘下多了一个Hello.class文件,这就是编译的结果。

五、字节码文件的运行

  同java文件的编译,我们只需要在cmd控制台中输入“java (class文件的文件名)"即可运行该字节码文件,

  注意,java文件的编译需要加.java后缀,而字节码文件(class文件)的运行不需要加.class后缀。  

  但是如果没有配置环境变量,就会出现这样的问题

  

  为什么呢?因为class文件的运行,不能带路径,你要运行Hello.class,运行的时候就只能写Hello,不能写D:Hello,那不写路径,怎么找到并运行它啊?

   

①配置path环境变量+切换到class文件目录下(最常用的方式)

如果我们不配置path环境变量,在cmd命令行中又不跳转路径直接输入java,javac等命令,控制台在当前目录下找不到相应exe文件,就会提示你不是可运行的程序或批处理文件,即无法使用jdk中相关的javac编译器和java运行器。

 

  在此电脑--属性--高级系统设置--环境变量中,新建用户变量或者系统变量(用户变量只对电脑的当前用户起作用,系统变量对所有的用户起作用)PATH(最好大写),然后将变量值写为你安装的jdk目录下的bin的路径(我的是C:Program FilesJavajdk1.8.0_101in),确定即可。

 

此时你再去命令台试试相关命令,就会发现可以使用,也可以编译java文件,其实此时我们不管在cmd的哪个路径下,都可以找到java命令了。

 

此时我们可以切换到class目录下,再用java命令运行D盘的class文件,就能出结果,打出HelloWorld。

②配置path环境变量+配置classpath环境变量

  配置完path环境变量之后,我们可以在任何地点使用java命令了,能不能有一种方法让我们也能在任何地点都能找到class文件呢?

这也是配置环境变量就可以,配置系统变量CLASSPATH,值就为你class文件所在的目录。(由于我的class文件在D盘,就为D:即可)

配置完成后,我们在哪里都能找到这个class文件了

让我们运行试试(运行class文件不需要加.class后缀名)!

 

可是这样也太麻烦了,有一个class文件就得给classpath增加一个值,所以并不建议使用此方法。

③切换到jdk的bin目录下+切换到class文件目录下

  有人说,怎么可能同时切换得到两个文件的目录下,其实我们只要把class文件拷贝到jdk的bin目录下,到时候切换到jdk的bin目录下,不也就切换到了class文件目录下吗。

  可是这样也太麻烦了,每次都需要拷贝,所以也不建议使用此方法。

④切换到jdk的bin目录下+配置classpath环境变量

同理,我们还是得每次配置classpath,所以也不建议这样做。

提问:那是不是就配一个path用第一种方法就好了呢?

  我们java常用的核心类库需要我们随时能找到,所以我们一般还是会配置一个classpath并在classpath中配置jdk的lib目录下的dt.jar,和tools.jar。虽然我们知道cmd命令台默认会先去当前目录下找类,我们还是一般在classpath里加一个”.;”,这个也是表示当前目录下的意思。

配置完成:

  Classpath值为:

  .;C:ProgramFiles(x86)Javajdk1.8.0_91libdt.jar;C:ProgramFiles(x86)Javajdk1.8.0_91lib ools.jar

  path的值为:

  C:Program Files (x86)Javajdk1.8.0_91in

  在命令台中输入set path和set classpath也可以查看到:

  

 

  其实到这里我们的环境配置就已经完成了,但是如果我们换了一个jdk,就要把bin和lib前面的一大串又重新写一遍。

所以,一般我们还会建一个JAVA_HOME环境变量,存放jdk主目录(C:Program Files (x86)Javajdk1.8.0_91)

在classpath和path中,我们使用%JAVA_HOME%就可以将jdk主目录引用过来了。

如图,这就是最终的配置结果:

  JAVA_HOME:  C:Program Files (x86)Javajdk1.8.0_91

   PATH:  %JAVA_HOME%in;%JAVA_HOME%jrein;

  CLASSPATH:  .;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;

在系统查看变量的时候,被引用了的环境变量会被换成该环境变量的值,所以查看的时候还是会显示总路径

  这样,我们改了jdk的目录的时候,只需要改一个JAVA_HOME的路径就可以了,是不是很方便呢?

当然,JAVA_HOME作为一个被引用的值,名字是可以随便取的,只是为了见名知意和便于其它java配置的寻找,才叫JAVA_HOME。你要是没有其它java工具,其实叫什么都可以,但如果有tomcat或者其它java工具需要用到jdk,只有叫JAVA_HOME才可以被找到。

原文地址:https://www.cnblogs.com/myz666/p/8039897.html