频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Java深度历险小记

来源:Csdn博客 作者:佚名 出处:巧巧读书 2008-05-16 进入讨论组
下一页 1 2 3 4 5 

深入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,没有对计算机进行任何设置时,进入命令行窗口:

C:\Documents\Administrator>java -version
java version "1.5.0_11"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode, sharing)

C:\Documents\Administrator>java -server -version
Error: no `server' JVM at `C:\Program Files\Java\jre1.5.0_11\bin\server\jvm.dll'
-----------------------------------

当设置path路径中包含jdk\bin目录后

----------------------------
C:\>set path="C:\Program Files\Java\jdk1.5.0_11\bin";%path%;

C:\>java -version
java version "1.5.0_11"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode, sharing)

C:\>java -server -version
java version "1.5.0_11"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
Java HotSpot(TM) Server VM (build 1.5.0_11-b03, mixed mode)

-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)的应用程序。

.NET 开发出来的执行文件也是一个包装器的概念。

JDK里面的工具几乎全是用Java所写的,所以JDK本身就是Java应用程序,因此要用JDK附的工具来开发Java程序,
也必须要自行附一套JRE才行。这就是JDK安装目录\jre下需要一套JRE的原因。

位于program files\下的那套JRE就是拿来执行我们自己写的Java应用程序。不过,两套中任何一套JRE 都可以拿来执行我们所撰写的Java 应用程序,可是JDK内附的开发工具在预设使用包装器(.exe) 来启动的情形下,都会自己去选用\jre 底下那套JRE。
------------------------

到底是执行哪一个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环境安装配置Java编程开发手册专题,或进入讨论组讨论。
下一页 1 2 3 4 5 
收藏此文】【 】【打印】【关闭
较早的文章:String对象的理解进行时

较新的文章:JAVA 对象拷贝
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章