深入J2 SDK
如果安装JDK1.3那么安装程序一定会同时安装两套JRE。
一套位于 jdk\jre目录
一套位于program files\JavaSoft目录
如果是JDK 1.4可以选择是否安装program files\java目录下的JRE,但是JDK安装目录下的这套JRE必须安装。
JRE与PC比较
JRE: java类函数库>原生函数库.dll>JAVA虚拟机(jvm.dll)>帮助函数库.dll
PC: Win32 API .dll>CPU
编写好的Java源文件必须要有JRE才能帮助我们运行,Java虚拟机只是JRE里的一个成员而已,或者说JVM只是JRE里头一个动态连接函数库,JDK里面的JRE一般用于运行Java本身的程序,比如javac等等。programfiles下面的JRE用于运行用户编写的Java程序。
JRE下的bin\client 或者 bin\server 的jvm.dll就是JVM了。
----------------------------
在刚装好JDK,没有对计算机进行任何设置时,进入命令行窗口:
|
当设置path路径中包含jdk\bin目录后
|
-server 的-version就可以显示出来了
----------------------------
JDK里用Java所写的开发工具如javac.exe jar.exe都存放在JDK安装目录\lib\tools.jar 这个档案中javac.exe 只是一个包装器(wrapper),而制作目的是为了让开发者免于输入太长的指令。
实际等于:
java -classpath x:\jdk1.xx\lib\tools.jar com.sun.tools.javac.Main
当用J2ME开发Palm应用程序的时候,工具会帮我们打包JAR档,然后用一个RPC档的外壳罩住,让Java程序看起来像是一个原生(native)的应用程序。
JDK里面的工具几乎全是用Java所写的,所以JDK本身就是Java应用程序,因此要用JDK附的工具来开发Java程序,
也必须要自行附一套JRE才行。这就是JDK安装目录\jre下需要一套JRE的原因。
位于program files\下的那套JRE就是拿来执行我们自己写的Java应用程序。不过,两套中任何一套JRE 都可以拿来执行我们所撰写的Java 应用程序,可是JDK内附的开发工具在预设使用包装器(.exe) 来启动的情形下,都会自己去选用
------------------------
到底是执行哪一个java.exe
java xxx
当一台机器上有多个JVM可选择的时候,jvm的选择步骤:
1)当前目录有没有jre目录(不准确);
2)父目录下的jre子目录;
3)注册表HEKY_LOCAL_MACHINE\SoftWare\Java\Java Runtime Environment\
所以当运行的是jdk\bin\java.exe的时候,用的JRE是bin的父目录jdk下面的jre\ 。
运行java.exe找到了jre后有一个验证程序,verify.dll验证jre和java.exe的版本是否一致,如果不一致则会发生错误。
一般把常用的工具档放到JDK目录\jre\lib\ext下。把有关安全机制的配置文件放到JDK目录\jre\lib\security下。
调用了其他Java 函数库的程序,在编译阶段没有问题,可是却无法执行,显示ClassNotFoundException的原因可能是:
在system32和jdk\bin目录下都有java.exe 而 javac.exe 只有在jdk\bin目录下有javac.exe 会自动调用JDK所在目录下的那套JRE ,因此在编译时JVM会找到函数库,所以编译不会发生问题,但在执行时,键入java xxx的时候会优先执行 system32 下的java.exe,因此会自动调用program files目录下的那套JRE(稍后解释)。所以要执行就必须把外部jar文件放到相应jre\lib\ext目录下。
JDK\jre\bin\下有两个目录 server,client,两个目录下都会有jvm.dll,client目录下的jvm.dll较小,server目录下的较大。
-----------------------
系统默认path
C:\Documents\Administrator>set path
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
在system32目录底下找不到JRE 目录,在c:\windows目录也找不到JRE 目录的情况下,根据下一个逻辑,就是去查询注册表C:\Program Files\Java\jre1.xx 该目录下的bin 子目录却只有看到client 子目录,却没有看到server 子目录。这就是为何在一开始执行java -server -version会报错的原因。
------------------------------------
相关专题
- Java环境安装配置 (5866篇文章)
- Java编程开发手册 (8549篇文章)
- Java基础知识:初学者必须理解的六大问题 (76次浏览)
- 九个非常值得一看的MySpace程序 (72次浏览)
- struts验证框架开发详解 (48次浏览)
- 关于提高自己水平的十大技术 (47次浏览)
- Flex测试工具RIATest Beta版发布 (45次浏览)
- 100行Java代码构建一个线程池。 (40次浏览)
- JAVA基础知识:JAVA变量类型之间的相互转换 (33次浏览)
- 什么是面向接口编程 (29次浏览)
- 动态java代码的使用方法 (28次浏览)
- 程序员必读:对JAVA语言的十个常见误解 (26次浏览)



