lesson1-Win的环境变量以及java环境配置详解

来源:互联网 发布:java helloworld 编辑:程序博客网 时间:2024/04/25 15:29


win的环境变量是由系统,某些应用程序以及用户建立。这些更改将写入注册表,而且通常立即生效。不过,在更改用户环境变量之后,应该重新启动所有打开的软件程序以使其读取新的注册表值。

win的环境变量主要分为两类,一类是系统环境变量,对所有用户起作用 ;一类是用户环境变量,只对当前用户起作用。

java配置相关的环境变量,JAVA_HOME、CLASSPATH、PATH。

JAVA_HOME环境变量指向的是JDK的安装路径,如x:\\JDK_1.4.2,在这路径下你应该能够找到bin、lib等目录。JAVA_HOME=D:\Program Files\Java\jdk1.8.0_60

PATH环境变量原来Windows里面就有,你只需修改一下,使他指向JDK的bin目录,这样你在控制台下面编译、执行程序时就不需要再键入一大串路径了。设置方法是保留原来的PATH的内容,并在其中加上%JAVA_HOME%\bin (%%引用上一步设定好的环境变量JAVA_HOME)。PATH=%JAVA_HOME%\bin

CLASSPATH环境变量 CLASSPATH=%.;JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar 。CLASSPATH后面指定了xx.jar这个具体文件,是由java语言的import机制和jar机制决定的,类加载机制相关,正在研究java虚拟机,后面会详细补充。

其中,PATH和CLASSPATH这两个路径下有JVM启动时必须要加载的类的字节码文件和必须要使用的.exe应用程序。执行Java程序的JVM并不是Java语言写出来的,而且JVM是不开源的,并且JVM也是不具有跨平台特性的。

定义classpath时最前面的".;",这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件,那么classpath就是告诉你从那找到class文件,现在如果我们用jar命令打包一个文,并且存在硬盘上,比如在D盘,那么你如果要用这个jar文件你的类怎么办呢?如果你就这样让系统肯定找不到。
现在我们假定D盘存在test.jar的这样一个文件,里面就一个简单的Person类,Person里面有一个getInfo的方法,现在我们要使用这个类并调用里面的方法。现在定义主函数,Person per = new Person;System.out.println(per.getInfo()) ;此时就可以在设置个classpath=.;d:\test.jar,自然它就知道一个是从当前目录中查找,另一个就是从在个test.jar里面查找。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,建议大家这样做。

单独安装的jre和jdk/jre的区别要根据32位机还是64位机来区分。

在64位机器上,jvm只能以server模式启动,目前64位机器只支持jvm的server模式。对应的,在单独安装的jre/bin底下,只有一个server文件夹,并且底下只有一个jvm.dll。在jdk/jre/bin的目录下,也只有一个server文件夹,底下只有一个jvm.dll。也就是说,64机下,java的运行环境以及开发环境的jvm是一致的。

对于32机器,单独安装的jre底下只有client文件夹,底下只有一个jvm.dll。该虚拟机相对较轻量,满足java程序运行环境。

Jdk 是java的开发工具包,里面包含了各种类库和工具。当然也包括了另外一个Jre.     那么为什么要包括另外一个Jre呢?而且jdk/jre/bin同时有client和server两个文件夹下都包含一个jvm.dll。说明是有两个虚拟机的。这一点不知道大家是否注意到了呢?相信大家都知道jdk的bin下有各种java程序需要用到的命令,与jre的bin目录最明显的区别就是jdk下才有javac,这一点很好理解,因为 jre只是一个运行环境而已。与开发无关,正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质的 jvm,而仅仅作为运行环境的jre下只需要client性质的jvm.dll就够了。

再说三个lib目录: 
    JDK下的lib包括java开发环境的jar包,是给JDK用的,例如JDK下有一些工具,可能要用该目录中的文件。例如,编译器等。 
    JRE下的lib只是运行java程序的jar包,是为JVM运行时候用的。包括所有的标准类库,和扩展类。 
    JDK下的JRE下的lib是开发环境中,运行时需要的jar包。最典型的就是导入的外部驱动jar包。因为编译时,系统找的是jdk下的jre。而不是最外层的jre。

另外补充一点关于JVM的。当Java应用程序启动后(main方法没有退出之前),操作系统的进程中是有javaw.exe这个进程的。这个进程也就是JVM对应的进程。也就是说整个JVM都是由这个进程完成的。


以上是最初步的理解。待我仔细看看java虚拟机规范。


0 0