JavaSE基础知识(十六)--Java环境变量配置(Windows黑窗口如何执行Java程序,CLASSPATH,PATH如何配置),以及为什么需要配置环境变量

Java SE 是什么,包括哪些内容(十六)?

本文内容参考自Java8标准
如果有兴趣的话,最好是跟着本文的说明进行实际的操作!
本篇博文将清清楚楚明明白白地说明如何脱离Eclipse、idea等专业的编码IDE,改用Windows经典的黑窗口来执行Java程序,回忆10年前的程序员大神们的经典时光!
首先你们需要知道如何打开Windows的经典黑窗口:
Windows10系统:
开始–windows系统-命令提示符
Windows10如何打开经典黑窗口!
因为我的已经是Windows10系统了,如果你们的是其他的Windows系统,请自行百度。
打开后的效果:
图示:
Windows10经典的黑窗口!
找到了Windows的经典黑窗口后,我们来试一下输入java的两个命令:
编译: javac、执行:java(Java是先编译后执行的语言)
javac:
javacWindows系统不认识这个命令!
java:
这里就不截图了,因为结果都是一样的,同样也提示:java不是内部或外部命令,也不是可运行的程序或批处理文件。
你们可以注意一下这个提示,有那么几个选项:
⑴、内部命令
⑵、外部命令
⑶、可运行程序
⑷、批处理文件
它们显然不可能是内部命令(因为不属于Windows),也不是可运行程序或者是批处理文件,所以只有一种可能,就是成为外部命令。
那么,如何成为外部命令呢?
这里就需要配置PATH了!
在配置之前,先下载JDK吧。
你可以通过百度搜索关键字"JDK下载",然后再安装,在下载安装的过程中,有很重要的一点需要说明:
如果你想同时使用javac和java两个命令,记得千万要下载JDK,如果你下载的是JRE,它只有java命令,而没有javac命令,因为它仅仅是运行环境,JDK才是开发和运行环境的结合!

提示:最好是在Oracle的官网进行下载!

下载地址:
[ https://www.oracle.com/technetwork/java/javase/downloads/index.html ]
不建议下载最新的JDK版本!
注意是下载JDK!
为了更好的区分,分别展示一下JDK和JRE的文件结构:
JRE的文件结构:
JRE的bin文件夹里面没有javac命令
JDK的文件结构:
JDK的bin文件夹里面同时有javac和java两个命令!
安装好JDK以后,来配置PATH:
首先找到PATH的位置:
我的电脑-属性(右键)–高级系统设置–环境变量–PATH
PATH的位置
将JDK的bin目录的绝对路径添加进去
在这里插入图片描述
我的机器上JDK的bin目录的绝对路径是:
D:\JDK\bin
JDK下bin目录的绝对路径!
添加后的效果是:
PATH配置后的效果!
保存完毕后,最好是重启电脑。
我们再打开黑窗口测试一下这两个命令:
javac:
java配置成功了,成为了外部命令!
java:
java配置成功了,成为了外部命令!
这里还有一个问题需要说明,这个黑窗口默认的命令执行地址是C:\Users\陈飞宇,当然,这是我的电脑,你们的可能不同,现在来改变一下这个地址,看下会不会有什么问题(如何修改这个地址,自行百度吧)?
在这里插入图片描述
将黑窗口的默认地址修改再执行javac和java:
修改了地址还是可以执行javac命令的!
修改了地址还是可以执行java命令的!
所以,在PATH下配置的命令,在任何路径都可以执行的!
实际上,你现在就可以开始编程了!
编程的工具是什么呢?

记事本

是的,就是普通的记事本。
首先,先演示最简单的编程。
①、新建一个记事本

这里只强调一点:将这个记事本文件存储在合适的位置。也就是说,它的绝对路径里面不要有特殊的字符以及空格,文件层次多少都无所谓。
我的位置是:
D:\abc\com\tool\www
文件的绝对路径!
②、编写代码
经典的Java入门级程序:HelloWorld;
这里需要注意:public修饰的类的名称需要和文件名称完全一致!在这里,文件名称是first.java,所以public修饰的类的名称必须是first
经典的Java入门级程序:HelloWorld!
③、修改文件后缀名
将之前的".txt"修改为".java"!
④、编译代码(javac)
编译时,要将黑窗口的路径修改为文件的存储路径!
编译时,要将黑窗口的路径修改为文件的存储路径!
然后,通过javac命令进行编译:
在这里插入图片描述
编译后,在.java文件的同一个目录下会出现一个.class文件:
编译后会出现一个可执行的.class文件!
这里再强调一下,编译的格式 :java 文件名称+后缀
⑤、执行代码(java)
通过java命令执行代码!
从上面的图中,可以看到,输出了结果HelloWorld。
这里需要强调的是,执行Java代码的格式是:java + 类名称。不再需要后缀!
可能有的人会有疑问,为什么没有配置CLASSPATH,因为毕竟在代码中涉及到了Java的System类,在这里,我只能这么解释:现在的Java基础类不再需要配置CLASSPATH(注意,这里说的是Java的基础类,也就是tools.jar和dt.jar,不代表其他的类)。
原先在编写Java代码之前,还需要在CLASSPATH里面配置tool.jar和dt.jar两个Java基础的jar包(也就是将它们的绝对路径配置到CLASSPATH里面),不过现在不用了。
-------------------------------------------------------------------------------------------------------------------------
下面还是同样的步骤,再演示需要配置CLASSPATH的情况(这里演示的是自建类库,然后将类库配置到CLASSPATH的情况,而不是配置Java的基础类库,这样你能更清晰明白为什么需要配置CLASSPATH):
这里给出原先配置Java基础类库的CLASSPATH(以我电脑上的JDK中安装目录为例子):
变量名:CLASSPATH
变量值:.;D:\JDK\lib\tools.jar;D:\JDK\lib\dt.jar
图示:
原先需要配置的javaCLASSPATH!
①、新建一个记事本
。与上面的一模一样。
只是文件名称不一样:Print.txt
②、编写代码
从这里开始,与上面的不同了:增加了package关键字。
还有一句代码解释一下:import java.io.*,可以分别参考import关键字的作用以及"Java的基础类不需要配置CLASSPATH就能直接引用"(java.io是Java中的基础类包)。
它的作用就是导入了类:PrintStream。
增加了package关键字!
package关键字后面的内容是是有规律的:
package关键字后面的内容是文件的存储路径的一部分,这部分实际上就是包名
package关键字后面的内容是文件的存储路径!
上面代码都是最基础的System类的基础方法。应该不会看不懂。
看到这里,你肯定会问:为什么文件夹abc不放进package里面(实际上剩余的部分是D:\abc),请继续往下看。
③、修改文件后缀名
将.txt修改为.java.
④、编译代码(javac)
如果你直接编译的话,编译器会报错!
找不到类,因为你没有配置CLASSPATH,也就是上一步留存的文件夹(D:\abc),所以你需要将D:\abc配置到CLASSPATH里面。
没有配置CLASSPATH,编译的时候就报错:找不到类!
配置CLASSPATH:
位置:我的电脑–属性(右键)–高级系统设置–环境变量–CLASSPATH
CLASSPATH的位置!
重点来看下添加的内容:
总共添加了两个内容:一个是".",一个是"D:\abc"
添加后的效果:
配置CLASSPATH后的效果!
为什么要添加".",这个留到后面再说,这里有个印象就行!
来看下"D:\abc"
对于这个,截个图你就能明白:
将CLASSPATH配置的路径和package关键字后面的内容加起来就是文件的绝对路径!
你会发现一个问题:将CLASSPATH配置的路径和package关键字后面的内容加起来就是文件的绝对路径!
现在我们再来编译Print.java:
报错了!
根据错误提示,把";"补上以后再次编译:

输入法错误!
根据错误提示,把";"改成英文输入法的再次编译:
终于成功了!
终于成功了!
之所以故意出现两个错误,是感受一下当年黑窗口报错的时候,找错是多么的需要勇气!
⑤、执行代码(java)
这份代码不能执行,因为没有写程序的执行入口main方法。

还是回到上面的代码中。
之前package 后面的内容是com.tool.www,剩余的D:\abc配置进了CLASSPATH里面,现在将package 后面的内容修改成下面的内容:
package abc.com.tool.www
很显然,仅剩D:\未配置了。
修改package的内容为:abc.com.tool.www
现在对文件进行编译:
记得删除原先的.class文件
编译成功了!
也可以编译成功!
现在,我们再来做个改变:
将package后面的内容改成:
package tool.www
对应的,在CLASSPATH中配置"D:\abc\com",看下是什么结果:
编译成功!
仍然编译成功了!
所以从上面的试验中可以看出:CLASSPATH应该和package搭配使用!它们组合起来就是执行文件.class的绝对存储路径
以上讨论的是.class文件,实际上对于打包好的jar文件,也是一样的,唯一的区别是jar文件需要带上后缀.jar而已。参考你需要使用框架的时候,导入的那些框架的必备jar包(它们实际上就是多个执行.class文件打包而成),当然你是用IDE(Eclipse、idea等)导入的,实际上在底层,它们全部都配置到了CLASSPATH里面!
下面,解释一下这个CLASSPATH中为什么需要配置".",如果你不配置的话,Java是不会去查找当前目录的,因为它代表的就是当前目录。
除了当前目录外,还有一个"lib"目录,但是它是默认的,所以,如果你的.class文件不在lib目录里面的话,就需要在CLASSPATH里面配置了!
我上面的所有例子都是比较简单的,.class文件都在当前目录下面。在CLASSPATH配置了"."就行。
.class在当前目录下面!
lib是Java项目中一个固定的文件夹名称,所有涉及到的执行文件或者是jar包都默认放它里面。
实际上,每个Java工程都有它固定的文件夹结构,比例lib文件夹是放jar包的,src文件夹是专门放源码的。
有兴趣,你可以直接打开IDE为你建的Java工程目录结构,因为都是极其标准的!
图示:
项目名称:
IDE建立项目的名称!
每个项目的固定文件夹结构:
每个项目的固定文件夹结构
再进入bin文件夹:
bin文件夹里面全都是.class执行文件!
再进入src文件夹:
src里面全是.java源码文件!
接下来,也就是最后一个问题,上面的这个Print类,没有程序执行入口main方法,那就不能执行。那它到底是干什么用的呢?可以这么说,它就属于类库中的类,专门提供功能供别的程序代码或者说客户端程序员使用的!
那么,怎么用呢?

通过import关键字导入

我在我的电脑的D:\abc\com下面创建一个文件夹:test
再继续在test下面创建一个文件夹www
然后在www文件夹下面创建一个Test.java文件
最后形成的路径是:
D:\abc\com\test\www\Test.java
最后形成的路径是:D:\abc\com\test\www\Test.java!
Test.java代码如下:

Test.java文件的代码!
这个时候的当前目录是:
D:\abc\com\test\www
但是Print.class执行文件的目录是:
D:\abc\com\tool\www
所以在当前目录中找不到,在lib目录中也找不到。所以只能去CLASSPATH环境下找(此处已配置,不再赘述了)。
现在编译文件Test.java:
这里有个问题需要强调:注意一下上面的import语句:import static com.tool.www.Print
所以我这里使用的是package com.tool.www的那个版本的Print,这个要注意的!否则会报错:找不到加载的主类。
编译成功了!
成功生成了.class文件!
执行Test.class
执行的时候报错了!
在这里,因为Test.class有了package,所以,你不能直接通过:
java Test来执行。
应该这么写:java+全限定类名–个人觉得,这个设计不怎么好其实。用起来有点复杂。
写全限定类名就执行成功了!
所有有关环境变量的知识点都在这里了!
最后,可能有的人还听说过JAVA_HOME,在这里,我可以很肯定地告诉你,这个不是很重要,只是一个便捷的方式,它更像一个变量性质的配置,有兴趣可以自行百度了解。这里就不多说了。
总结:
PATH:
在安装java的JDK之后,它的目录下的bin目录中会提供一些开发Java程序时必备的工具程序,Java必须知道的两个命令javac和java都在里面。
当你在命令符模式下输入javac与java命令时,会提示javac/java不是内部或外部命令,也不是可运行的程序或批处理文件的错误信息。
出现上述错误的原因是操作系统在当前目录下找不到javac.exe和java.exe程序,因此需要告诉操作系统应该到哪些目录下寻找,设置PATH环境变量的目的就是为操作系统指定寻找工具程序的目录。
设置PATH变量后,需要重新打开命令符模式才能使设置生效,此时执行javac和java命令获得成功。
当用户在命令符模式输入javac和java命令时,操作系统会尝试在指定的PATH变量中寻找指定的工具程序,由于PATH变量中设置了JDK的bin目录的路径,因此操作系统就可以根据这个信息来找到javac.exe和java.exe工具程序。
CLASSPATH
Java本身就是一个平台,用于运行已编译完成的Java程序(即.class文件)。
如果设置PATH变量是为了让操作系统找到指定的工具程序,那么设置CLASSPATH变量的目的就是让Java执行环境找到指定的Java程序对应的class文件以及程序中引用的其他class文件(import的类库文件,可能没有,一个或者多个)。
JDK在默认情况下会到当前工作目录下(变量值用"."表示)以及JDK的lib目录下寻找所需的class文件,因此如果Java程序放在这两个目录中,即使不设置CLASSPATH变量执行环境也可以找得到。但是如果Java程序放在其他目录下,运行时则需要设置CLASSPATH变量,从而找到需要的.class文件。
所以设置CLASSPATH的目的在于通知Java执行环境在哪些目录下可以找到所需要的.class文件。
一般在安装JDK后,需要设置PATH和CLASSPATH环境变量。如果不设置会对Java编程造成一定的影响(当然,如果你一直使用IDE,而不会涉及到Window的黑窗口,那就仅仅设置PATH就可以了)。
最后还是提一下JAVA_HOME:
如果你建立了三个环境变量
变量名:JAVA_HOME(不论是系统变量还是用户变量都行,只是使用的权限不同,没有什么影响)
变量值:D:\JDK\lib 注:JDK安装路径
变量名:PATH
变量值:%JAVA_HOME%\bin
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\dt.jar
也就是如果你的JDK安装路径都变了,你只需要修改JAVA_HOME,而不用分别去修改PATH和CLASSPATH了。
PS:时间有限,有关Java SE的内容会持续更新!今天就先写这么多,如果有疑问或者有兴趣,可以加QQ:2649160693,并注明CSDN,我会就博文中有疑义的问题做出解答。同时希望博文中不正确的地方各位加以指正!


版权声明:本文为ruidianbaihuo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。