【Java】JDK、环境变量和命令行


本文将简单了解环境变量配置项的含义,JDK、JRE和JVM的区别,采用Java命令编译运行程序,以及了解Java的包(package)对class文件所在路径的影响。

 

环境变量配置

JDK安装完成之后需要配置好环境变量才能使用命令行工具。环境变量配置处:

计算机→属性→高级系统设置→高级→环境变量

注:安装JDK时,不要把JDK和JRE安装到同一个目录下,需要有所区分,如:

JDK安装在:D:ProgramFilesJavajdk1.8.0_171

JRE安装在:D:ProgramFilesJavajre1.8.0_171

1、在系统变量或用户变量中新建变量JAVA_HOME,变量值设置为JDK安装目录

【Java】JDK、环境变量和命令行

JAVA_HOME为自定义的一个变量,主要用于之后path和classpath使用,后续在修改时只需修改一次即可,根据变量引用原则,后续使用JAVA_HOME时需要加上%,即%JAVA_HOME%。

注:定义系统变量则计算机所有用户均可以使用,定义用户变量则只允许当前用户使用。

2、配置path变量。path变量是已存在的变量,直接编辑新加入%JAVA_HOME%bin和%JAVA_HOME%jrebin即可

【Java】JDK、环境变量和命令行

path指向JDK的bin目录,可以看到,JDK的bin目录下大多都是一些可执行文件(.exe),配置了path之后,当你在cmd命令行工具中需要使用该目录下执行文件时,如javac命令,系统则会依次搜索path中设置的路径找到javac.exe文件执行,如果不配置path想要使用bin目录下的命令,则需要在cmd中输入完整的路径。

注:Win10的这种窗口不需要加入分号,如果是Win7那种一横排的内容就需要用分号间隔,如果出现javac命令不能用的情况,就尝试把添加的内容放到所有变量的前面,放到C:开头内容变量后面,如上图所示。

3、配置CLASSPATH变量。在系统变量中新建 CLASSPATH 变量,变量值填写.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;(注意最前面有一点)

【Java】JDK、环境变量和命令行

CLASSPATH指定你在程序中所引用的类(.class)文件所在的位置,所以它指向JDK中的lib目录,可以看到变量值前会加一个“.”,目的是为了告诉JDK在搜索class文件时先查找当前目录的class文件,“.”相当于“./”,即当前目录。

JDK、JRE、JVM的区别与联系

JDK

JDK全称Java Development Kit,即Java开发工具包。JDK是整个Java开发的核心,它包含了Java的运行环境(JVM+Java核心类库)和Java工具。

JavaSE,即Java Standard Edition(Java标准版),是我们通常用的一个版本;

JavaEE,即Java Enterprise Edition(Java企业版),核心是EJB3.0, 其提供了更兼便捷的企业级的应用框架;

JavaME,即Java Platform Micro Edition(又称为J2ME),主要用于移动设备、嵌入式设备上的Java应用程序。

JRE

JRE全称Java Runtime Environment,即Java运行时环境。它包含JVM标准实现及Java核心类库,也就是说,如果只是需要运行Java程序,只需要安装JRE即可,相比JDK,JRE内容更少一些。

JVM

JVM全称Java Virtual Machine,即Java虚拟机。JVM是Java实现平台无关性的关键,JVM能够将 .class 文件中的字节码指令进行识别并翻译成具体平台上的机器指令进行执行,由此实现跨平台。

JDK > JRE > JVM

命令行处理程序

我们直接在命令提示符(cmd)中采用JDK命令行进行Java编译运行等工作,由于之前在环境变量中配置了path路径,path路径指向%JAVA_HOME%bin,该目录下是JDK的一些工具,常用的工具如下:

javac.exe:Java编译器,把Java源文件编译成Java类文件;

jar.exe:Java应用程序打包工具

java.exe:运行Java程序

javadoc.exe:JavaDoc文档生成工具

Hello World

我们采用原生的记事本工具实现程序编码和运行,新建记事本文件Main,加入如下内容后将后缀改为.java。

1
2
3
4
5
public class Main {
  public static void main(String[] args) {
    System.out.print("Hello World");
  }
}

将Main.java文件放到D盘根目录下,采用javac命令编译、java命令执行

编译:javac Main.java

执行:java Main

 

【Java】JDK、环境变量和命令行

package和引用

如果我们在Java文件中加入package如何编译执行呢?

在我们编写的Java文件头部加入package,则要求把Java文件放入package所在目录下,我们在D盘下新建test文件夹,test文件夹下新建a文件夹,把Main.java文件放到a文件夹下,Main.java代码如下:

1
2
3
4
5
6
7
package test.a;
 
public class Main {
  public static void main(String[] args) {
    System.out.println("Hello World");
  }
}

编译运行时存在相关路径上的要求,javac可以进入Main.java文件目录中执行,但java命令则要求在package目录所在跟路径下执行,如下:

1、可以进入Main.java文件中执行javac

2、也可以在test所在根目录下执行:

编译:javac ./test/a/Main.java

执行:java test.a.Main (执行java必须要在test所在根目录)

【Java】JDK、环境变量和命令行

如果Main.java文件引用了自己写的其他Java文件,则可以把其他文件也放到test目录下,javac编译时,用*表示编译全部。

如果代码中含有中文,javac编译时,可以使用如下命令:

1
javac -encoding utf-8 xxx.java

异常情况

异常问题:执行javac时出现异常

(错误: 找不到或无法加载主类 com.sun.tools.javac.Main)

处理思路:

1、JDK安装不正确或环境变量配置不正确

JDK和JRE不能安装在同一目录下;

查看path配置的bin目录下是否包含javac.exe文件,如果没有则可能是JDK和JRE安装在同一目录时,被删除了。

环境变量配置要注意分号,以及路径是否正确。尝试path添加的JDK变量放到所有变量的前面,放到C:开头内容变量后面。

2、程序编写不正确

— END —

 

【Java】JDK、环境变量和命令行

原文始发于微信公众号(程序员阿木):【Java】JDK、环境变量和命令行