JDK与JRE及其在Eclipse中的使用
转载自:http://blog.csdn.net/gx1058742912/article/details/51033942
JDK与jRE的区别
JDK(java development kit):java 开发工具,包括一系列java命令,如javac(java compiler) 等;同时jdk包含jre,因为jdk其实是面向java开发人员的,开 发完之后还要进行调试运行等,这就需要jre了;
JRE(java runtime environment):java 运行时环境,java文件被javac编译过后形成字节码文 件,这个文件计算机是不能理解和处理的,需要有jvm(java virtual machine)处理后形成机器语言在传递给计算机处理 (这也是为什么说java具有平台无关性)。Jvm就存在于jre 中。可见,jre其实是面向java程序的使用者;
所以,当你需要开发一个java程序时,你需要的是jdk,但如果需要运行一个java程序,就需要jre了。让人迷惑的是,当你下载并安装jdk之后,会发现在jdk文件夹内部和外部同时存在jre文件夹(证明了jdk包含jre),下面我们来说说其中的原因:
内部jre:当你开发java程序时,需要用到一些javac之类的命令,就会调用jdk(java开发 工具)内部的jre;
外部jre:当你只需要运行一个java程序而不是开发时,就会调用外部的jre;
那么为什么要分两个呢?公用一个不就行了吗,还节省了资源。其实分为两个jre,更多的是为了提高性能和效率,打开两个jre的文件夹,对比一下会发现:
外部jre中,在其client文件夹里面,有个jvm.dll;内部jre中,多了个server文件夹,其中也有个jvm.dll文件,主要是两个vm的区别,使得内外部jre有不同的分工,并且能在各自的分工上做到最好(提高各自的效率和性能)。
附上oracle官网的一张截图:
(http://docs.oracle.com/javase/7/docs/)
从这张图中可以得到:JVM⊂JRE⊂JDK
说到这里,顺便提一下windows下环境变量中的path和classpath,毕竟好记性不如烂笔头!
安装好jdk之后,下一步就要配置环境变量了,怎么配置就不多说了,网上很多,简单的说一下为什么要分这两个来配置:
path变量:与其中的值相对应的路径下面是一些java命令程序,如javac;
Classpath变量:与其中值相对应的路径下面是程序需要用到的一些java提供的类(jar包);
有时也用到JAVA_HOME环境变量,它指向jdk的安装目录,Eclipse/tomcat等就是通过其找到并使用安装好的jdk。配置好之后,即可在任何目录下用java命令执行java程序。那么为什么系统可以在任何目录下使用JDK提供的命令呢?
其实环境变量就是能够让系统更快速方便的找到所需的东西,有兴趣的可以看一下windows系统变量中的path变量中已有的值,例如C:\Windows\system32;,按这个路径打开,会发现里面有很多可执行文件,比如cmd.exe,这就是为什么我们能够在“运行”窗口输入cmd之后就出现命令行的原因。说到这里,你也可以试试利用环境变量启动其他程序!
eclipse中的JDK与JRE:
其实写这篇文章的出发点就是因为在Eclipse中用maven时,被各种jre、jdk搞得混乱,于是决定弄清楚。先简单的介绍一下:
Eclipse:是一款集成开发的IDE,可以开发,编译,调试,运行代码等;
JDK:java开发工具,用来将.java文件编译成字节码文件;
JRE:java运行时环境,执行编译后得字节码文件;
Maven:一款项目管理工具;
Eclipse中其实内嵌了Java编译器,其编译器的作用等同于jdk中的javac,所以eclipse其实只需要jre就可以编译java文件(在eclipse中当你保存一个java类时,它就会自动编译这个java类,相当于在命令行中用了javac这个命令)。但如果你在eclipse中用了maven这样的工具,可能就无法编译了。因为maven默认使用javac来编译项目的,也就是需要jdk,而如果你的eclipse中某maven项目只指定了jre,就会出现无法编译的情况。就像是启动Tomcat只需要jre,原因是Tomcat中已经包括了源代码编译器,不需要jdk中的javac来编译。
Eclipse中有几处会用到jdk和jre的,下面列出几个,也是我混乱之处所在:
A. Window->preferences->Java->Installed JREs
这里Installed
JREs中的可以理解为“全局常量”,这里设置好,之后新建的项目都默认用这里选定的jre或者jdk,但如果项目中用了maven的话,前面说了maven默认的是jdk中的javac来编译,所以如果这里还是用jre的话就会maven
install出错,需要选择jdk才行。更改直接Add->Standard
VM,点击directory,选择相应的jdk或者jre路径确定即可。
B.给不同的项目选择不同的jre
右击项目名称->build path->configure build path,选择libraries选项卡,选中jre:
点击edit:
可根据不同的需求选择不同的选项卡,并按照提示完成操作即可。注意,当你选择第二个选项卡“替代JRE”时,eclipse会跳转至installed jre中让你选择,因此,需要你提前在installed jre中配置好。
C. Window ->preferences->java->compiler
这里也会有一个jdk的选择,就是编译时jdk的版本,需要注意的一点是:
编译时的jdk版本不能高于项目build
path中的jdk即运行时jdk,因为高版本中的有些功能在低版本中并不提供。例如,项目中用了泛型,编译时为jdk1.5但运行时为jdk1.4,虽然编译时不报错,但运行时就会出错,因为jdk1.4并不支持泛型;反过来,编译时为jdk1.4而运行时为jdk1.5,虽然编译时报错,但却可以正确运行。
JDK与JRE及其在Eclipse中的使用的更多相关文章
- MyEclipse环境的项目改为在Eclipse中运行爬坑记【我】
新检出一个web项目,同事都是运行在MyEclipse中的,我用Eclipse启动, 1.首先是许多jar包报错: 处理方法为 remove掉,然后 选 WEB-INF 下的所有 jar 重新添加 ...
- eclipse中的两种Jre 及 Jre与Jdk的区别
分类: ——————————区分eclipse中的两种Jre———————- (Eclipse也是一个普通的Java程序,因此必须有一个JRE做为运行环境.如果你的机器上没有安装任何JRE(或者JDK ...
- 关于Eclipse中使用Maven进行Install安装时候报错Perhaps you are running on a JRE rather than a JDK?解决办法
所遇到的问题: 详情报错: 英文描述: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3. ...
- 在Eclipse中查看JDK类库的源代码
http://blog.csdn.net/a81895898/article/details/8486802 在Eclipse中查看JDK类库的源代码!!! 设置: 1.点 “window”-> ...
- Eclipse中查看JDK类库的源代码
在Eclipse中查看JDK类库的源代码!!! 设置: 1.点 “window”-> "Preferences" -> "Java" -> & ...
- Eclipse中安装Jdk和配置Python
要借助Eclipse辅助工作,之前安装配置都是同事帮忙弄的,今天有空来整理一下安装配置步骤 一.安装JDK1.下载JDK,安装JDK,安装完毕,配置JDK环境变量 1)我的电脑右键-属性-高级-点击 ...
- (转)如何在Eclipse中查看JDK类库的源代码
在Eclipse中查看JDK类库的源代码!!! 设置: 1.点 “window”-> "Preferences" -> "Java" -> & ...
- Eclipse中查看JDK类库源代码
在Eclipse中编写代码时,有时候可能需要了解JDK类库的一些特性,这个时候可以通过查看类的源代码来了解JDK类的详细信息.本文主要内容就是如何直接在Eclipse开发环境中查看JDK类库源代码. ...
- JDK版本更换,Eclipse中所有的项目报错
我将JDK10切换成JDK8版本以后,原先在eclipse中写的项目全部都报错了.解决方案如下: 1.设置eclipse中的JDK版本和JRE环境:window-preference-java-Com ...
随机推荐
- PHP 获得域控内用户的计算机登录名
一个需求: 在域控范围获得访问用户的计算机名.方法: 1.测试软件环境: XAMPP Control Panel V3.2.1 , Apache version 2.4.7 2.Apache 2.2 ...
- bootstrap页面布局
首先,我们必须明确,在这四种角色登录网站,看到页面是不同,这里不仅涉及到后端的权限控制,还涉及到前端页面的布局,区分好这些角色看的东西哪些是相同的,哪些又是不同的呢,这个必须在这里想明白,所以要做好页 ...
- linux 安装zip/unzip/g++/gdb/vi/vim等软件
近期公司新配置了一台64位云server.去部署的时候发现,没有安装zip/unzip压缩解压软件. 于是仅仅好自己安装这两个软件.linux最好用的还是yum. 两个指令就安装好了. 首先把软件安装 ...
- ThreadLocal (三):为何TransmittableThreadLocal
一.示例 线程池内的线程并没有父子关系,所以不适合InheritableThreadLocal的使用场景 public class ThreadPoolInheritableThreadLocalDe ...
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
- ABAP发邮件函数
步骤: 一.检查输入参数, (1)未指定文件類別代碼,(2)未指定郵件主題, (3)未指定郵件內容, (4)未指定發送人郵件地址, (5)未指定接收人郵件地址, 二.调用发送功能, (1)创建发送请求 ...
- Hadoop学习基础之三:MapReduce
现在是讨论这个问题的不错的时机,因为最近媒体上到处充斥着新的革命所谓“云计算”的信息.这种模式需要利用大量的(低端)处理器并行工作来解决计算问题.实际上,这建议利用大量的低端处理器来构建数据中心,而不 ...
- $Android连续按返回键两次实现退出程序
思路:重写Activity的onKeyDown方法,判断按键是不是返回键,如果是,则再判断按下的时间和上次按下的时间之间的差值(毫秒数)是不是大于2000,如果不大于,则用finish()方法结束程序 ...
- java 图片转换工具
package com.sicdt.sicsign.web.utils; import java.awt.Graphics2D; import java.awt.image.BufferedImage ...
- ETL应用:一种处理接口的Pro*C实现方法
2007年,当时项目所有ETL采用C编写,实现了ETL基本功能.当接口很多时,为保证文件获取效率,做好接口可配置:文件维护中经常会出现接口晚到情况,需要有一种方法能将接口晚到信息写入数据库,便于短信告 ...