java环境变量java_home和classpath的设置和javac、java命令的运用

一、开始

在写这篇博客之前,我对这些环境变量也不是很了解,虽然以前开始学习java的时候,教程里就要我们配置这些,但是后来用了ide之后,发现这些环境变量都可有可无。

但是如果你想在终端界面,能够很好的运行java程序的话,就需要理解一下这些环境变量和java命令。

二、环境变量的理解

(1)classpath

通常来说,classpath环境变量代表的是类路径,指向的是jdk目录下的lib目录,以及你自己定义的一些java文件所在目录,最重要的一点必须包含当前目录,即将".“添加进去,各个目录之间用”;"隔开。

为什么要包括当前目录呢?原因在于javac编译器会自动从当前的目录下寻找文件,但是java虚拟机却并不会,它仅在类路径中含有“."的时候才查看当前目录,所以如果你不添加当前目录,就会发生下述情况:
在这里插入图片描述
其实呢,classpath是可以不设置的,原因在于:

  • java默认的类路径下就包括了当前目录
  • 并且从jdk1.5以来,java也会自动从jdk目录下找寻lib包,当然,如果你还想引入一些自定义的jar包的话,就需要设置了。
    • classpath环境变量一旦设置,java默认的classpath就会被覆盖,需要你自行添加当前目录,至于jdk中lib包,java仍然会自己寻找,可以不添加。
    • java自动寻找jdk中的lib,应该不是通过默认的classpath实现的,因为我试过,新建classpath,不添加lib,仍然可以运行。可能是通过命令所在目录来寻找的。

所以说,新建classpath只会覆盖默认的当前目录,而不会影响jdk中的lib包

(2)java_home

对于JAVA_HOME,也是可以不设置的,但是建议设置,因为你在使用一些其他软件时会用到这个环境变量,例如maven。

(3)path

对于path环境变量,是肯定要添加自己jdk目录下bin目录的,只有这样才能运行javac和java命令,否则你只能在bin目录下执行这些命令。

总结

classpath可以不用设置,java会自动配置,除非你还想导入一些其余的jar包,一旦自己设置必须包括当前目录。java_home是推荐设置的,path必须设置,否则很不方便!。

三、javac和java命令的理解

(1)java程序是否存在包名

在使用javac和java编译和运行程序时,如果java程序存在包名,就必须从当前包目录下进行命令,并且在java程序前加入包名 。此时Test类含有包名com.chby在这里插入图片描述不存在的话,就直接从当前目录下命令。

(2)加上绝对路径后的问题

另外,如果你不想这么做,想一打开cmd就直接命令,你就要在java文件之前加上绝对路径,绝对路径就一直到java文件所在目录为止,有没有包名无所谓的 ,此时Test类取消包名com.chby
在这里插入图片描述加上包名,结果还是一样的。

你会发现,当加上绝对路径以后,javac是可运行的,但java命令不能。
解决办法我知道两种:

  • 利用javac的-d参数,可以指定生成class文件的目录,你可以“-d .”,表示class文件生成到当前目录,然后就可以java 文件名。
  • 利用java命令的-classpath(-cp)参数,此参数作用和classpath环境变量一样,你可以把生成class文件的目录添加进classpath,然后也可以直接java 文件名。
    • 并且在这种情况下,就算类路径没有包括当前目录“.",也可以运行,原因在于你生成class文件的目录和当前目录"."的作用是相同的,都是为了让你的java虚拟机找到文件。

以上,均为自己理解,若有不同意见,欢迎探讨!

发布了8 篇原创文章 · 获赞 2 · 访问量 640

猜你喜欢

转载自blog.csdn.net/qq_41286138/article/details/104625894