wordpress本站主题,格力网站建设首页,网站的构思,做普通网站需要服务器吗JDK#xff08;Java Development Kit#xff09;是针对Java开发员的产品#xff0c;是整个Java的核心#xff0c;包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment#xff08;JRE#xff09;是运行JAVA程序所必须的环境的集合#xff0c;包含J…JDKJava Development Kit是针对Java开发员的产品是整个Java的核心包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime EnvironmentJRE是运行JAVA程序所必须的环境的集合包含JVM标准实现及Java核心类库。JVM是Java Virtual MachineJava虚拟机的缩写是整个java实现跨平台的最核心的部分能够运行以Java语言写作的软件程序。 在计算机开发语言的历史中从来没有哪种语言象Java那样受到如此众多厂商的支持有如此多的开发工具。 JDKJava Development Kit JDK是Java开发工具包是Sun Microsystems针对Java开发员的产品。 JDK中包含JRE在JDK的安装目录下有一个名为jre的目录里面有两个文件夹bin和lib在这里可以认为bin里的就是jvmlib中则是jvm工作所需要的类库而jvm和 lib和起来就称为jre。 JDK是整个JAVA的核心包括了Java运行环境JREJava Runtime Envirnment、一堆Java工具javac/java/jdb等和Java基础的类库即Java API 包括rt.jar。 ①SE(J2SE)standard edition标准版是我们通常用的一个版本从JDK 5.0开始改名为Java SE。 ②EE(J2EE)enterprise edition企业版使用这种JDK开发J2EE应用程序从JDK 5.0开始改名为Java EE。 ③ME(J2ME)micro edition主要用于移动设备、嵌入式设备上的java应用程序从JDK 5.0开始改名为Java ME。 金字塔结构 JDKJREJVM其它 运行Java程序一般都要求用户的电脑安装JRE环境Java Runtime Environment没有jrejava程序无法运行而没有java程序jre就没有用武之地。 Java Runtime EnvironmentJRE 是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它Java的开发者才得以将自己开发的程序发布到用户手中让用户使用。 RE中包含了Java virtual machineJVMruntime class libraries和Java application launcher这些是运行Java程序的必要组件。 与大家熟知的JDK不同JRE是Java运行环境并不是一个开发环境所以没有包含任何开发工具如编译器和调试器只是针对于使用Java程序的用户。 JVMjava virtual machine 就是我们常说的java虚拟机它是整个java实现跨平台的最核心的部分所有的java程序会首先被编译为.class的类文件这种类文件可以在虚拟机上执行。 也就是说class并不直接与机器的操作系统相对应而是经过虚拟机间接与操作系统交互由虚拟机将程序解释给本地系统执行。 只有JVM还不能成class的执行因为在解释class的时候JVM需要调用解释所需要的类库lib而jre包含lib类库。 JVM屏蔽了与具体操作系统平台相关的信息使得Java程序只需生成在Java虚拟机上运行的目标代码字节码就可以在多种平台上不加修改地运行。 1. 定义 JRE(Java Runtime Enviroment)是Java的运行环境。 面向Java程序的使用者而不是开发者。如果你仅下载并安装了JRE那么你的系统只能运行Java程序。JRE是运行Java程序所必须环境的集合 包含JVM标准实现及 Java核心类库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。 JDK(Java Development Kit)又称J2SDK(Java2 Software Development Kit)是Java开发工具包它提供了Java的开发环境(提供了编译器javac等工具用于将java文件编译为class文件)和运行环境(提 供了JVM和Runtime辅助包用于解析class文件使其得到运行)。如果你下载并安装了JDK那么你不仅可以开发Java程序也同时拥有了运 行Java程序的平台。JDK是整个Java的核心包括了Java运行环境(JRE)一堆Java工具tools.jar和Java标准类库 (rt.jar)。 2. 区别 JRE主要包含java类库的class文件(都在lib目录下打包成了jar)和虚拟机(jvm.dll)JDK主要包含java类库的 class文件(都在lib目录下打包成了jar)并自带一个JRE。那么为什么JDK要自带一个JRE呢而且jdk/jre/bin下的client 和server两个文件夹下都包含jvm.dll(说明JDK自带的JRE有两个虚拟机)。 记得在环境变量path中设置jdk/bin路径麽老师会告诉大家不设置的话javac和java是用不了的。确实jdk/bin目录下包含了所 有的命令。可是有没有人想过我们用的java命令并不是jdk/bin目录下的而是jre/bin目录下的呢不信可以做一个实验大家可以把jdk /bin目录下的java.exe剪切到别的地方再运行java程序发现了什么一切OK(JRE中没有javac命令原因很简单它不是开发环 境)那么有人会问了我明明没有设置jre/bin目录到环境变量中啊试想一下如果java为了提供给大多数人使用他们是不需要jdk做开发的只需 要jre能让java程序跑起来就可以了那么每个客户还需要手动去设置环境变量多麻烦啊所以安装jre的时候安装程序自动帮你把jre的 java.exe添加到了系统变量中验证的方法很简单去Windows/system32下面去看看吧发现了什么有一个java.exe。 3. 难点 如果安装了JDK你的电脑就有两套JRE(JRE本身和JDK中的JRE)前面这套比后面那套少了Server端的Java虚拟机。 (1)为什么Sun要让JDK安装两套相同的JRE这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe 等)而且都放置在/lib/tools.jar里。如果我们将tools.jar改名为tools1.jar然后运行javac.exe显示如下结 果Exception in thread main java.lang.NoClassDefFoundError: com/sun/tools/javac/Main。这个意思是说你输入javac.exe与输入java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main 是一样的会得到相同的结果。从这里我们可以证明javac.exe只是一个包装器Wrapper而制作的目的是为了让开发者免于输入太长的指命。 而且可以发现/lib目录下的程序都很小不大于29K从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写所以也是Java应用 程序因此要使用JDK所附的工具来开发Java程序也必须要自行附一套JRE才行所以位于JDK目录下的那套JRE就是用来运行一般Java程序 的。 (2)如果一台电脑安装两套以上的JRE谁来决定呢这个重大任务就落在java.exe身上。java.exe的工作就是找到合适的JRE来运 行Java程序。java.exe依照以下的顺序来查找JRE1)自己的目录下有没有JRE2)父目录有没有JRE3)查询注册表 [HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment]。所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。 (3)JDK--JRE--Bin目录下有两个文件夹server与client这是真正的jvm.dll所在。 jvm.dll无法单独工作当jvm.dll启动后会使用explicit的方法(就是使用Win32 API之中的LoadLibrary()与GetProcAddress()来载入辅助用的动态链接库)而这些辅助用的动态链接库(.dll)都必须位 于jvm.dll所在目录的父目录之中。因此想使用哪个JVM只需要设置PATH指向JRE所在目录下的jvm.dll。 4. 最主流的JDK是Sun公司发布的JDK除了Sun之外还有很多公司和组织都开发了自己的JDK例如IBM公司开发的JDKBEA公司的Jrocket还有GNU组织开发的JDK等等。 多个JDK版本共存 背景 JDK 都已经发布到1.8版本了作为一个“怀旧”的programer我对新版本一直没什么关注。一直都是项目需要哪个版本就用哪个版本JDK而且我一直 认为如果项目太过于依赖JDK版本的话那开发和设计上太shit了这几天由于一些原因需要切换到老版本的项目去做些东西。老版本称为V1使用的是 JDK1.6开发的新版本称为V2使用的是JDK1.7。现在需要两个版本的JDK共存本以为很简单的事情结果出了一堆问题。囧 问题 1.安装了JDK1.6copy了eclipseget了项目代码但是公司的eclipse插件无法运行 2.指定了Eclipse启动时使用的JDK为1.6报错code 13无法启动Eclipse 3.解决了Eclipse启动问题和插件问题分别为项目两个工作空间指定了JDK版本但是1.7版本的无法运行会显示“找不到或无法加载主类错误” 本来这个事件是很简单的但是由于一些小的细节失误才导致自己绕了老大一个圈子。看来细节决定成败在哪儿都适用 总结 1. JDK在大版本上是允许同时存在的但是小版本上是不允许的 2. Eclipse本身是一个Java程序这我们都知道但是Eclipse启动的时候为什么找不到一个javaw进程呢那是因为Eclipse默认调用的是jvm.dll如果我们指定启动参数是javaw.exe那么会启动一个javaw.exe进程。 3.Eclipse 也会依赖一定版本的JDK这要看你用哪个版本的Eclipse一般来说它是向后兼容的也就是JDK1.5能运行JDK1.6、JDK1.7也可 以。但是不保证Eclipse的插件在不同版本的JDK上也能良好运行比如我们公司的插件对JDK版本依赖就很强。 4.Eclipse可以指定编译、运行Java程序的JDK版本这个JDK版本和它本身运行时的JDK是不一样的或者说两者毫无关系可以是同一个JDK。 5.Eclipse分32位和64位必须配合32位和64位JDK否则会报错 我们有时候会在windows下安装多个jdk,但是安装多个jdk会引起一些问题。 本机是安装了两个版本的jdk一个是jdk1.8和jdk1.6。一开始是安装的jdk1.8但是由于jdk1.8在项目中会有一些错误所以决定还是使用jdk1.6吧。但是安装好1.6后也配置好了环境变量。问题出现了执行Java – version 得到 我认为是我配置jdk1.6时候把1.6版本的目录放在了1.8后面我就去查找我的Path(这个时候我的JAVA_HOMEC:\Java1.6\jdk1.6.0_24) C:\ProgramData\Oracle\Java\javapath;%JAVA_HOME%\bin;E:\app\Administrator\product\11.2.0\dbhome_1\BIN…… 也没有问题啊。 然后我去网上寻解决问题的方法。其中有一个我认为比较好的是这样说 在安装JDK1.8时本机先安装jdk1.8再安装的jdk1.6自动将java.exe、javaw.exe、javaws.exe三个可执行文件 复制到了C:\Windows\System32目录由于这个目录在WINDOWS环境变量中的优先级高于JAVA_HOME设置的环境变量优先级 解决方案将C:\Windows\System32目录下的java.exe,javaw.exe,javaws.exe删除即可。开启新的命令行窗口再执行java -version时就得到了期望中的结果。 我去查看自己的C:\Windows\System32去查找但是我的竟然没有但是他给了我一个思路。我的Path是 C:\ProgramData\oracle\Java\javapath;%JAVA_HOME%\bin;E:\app\Administrator\product\11.2.0\dbhome_1\BIN…… 我就去最前面的路径去找啊C:\ProgramData\Oracle\Java\javapath下竟然有这三个文件我的电脑上安装了oracle 最后我把%JAVA_HOME%\bin放到了最前面,再次执行java – version。问题解决了 建议为了提高效率把你想使用的JDK的bin路径直接放到Path的最前面。 转载于:https://www.cnblogs.com/bolang100/p/6929514.html