Java的一些基本概念
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JRE和JDK的区别浅析
JRE和JDK的含义是什么呢?让我们从他们各自的概念开始吧。
JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK.最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA 公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。
JDK一般有三种版本:SE(J2SE),standard edition,标准版,是我们通常用的一个版本EE(J2EE),enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序,ME(J2ME),micro edtion,主要用于移动设备、嵌入式设备上的java应用程序Java开发工具(JDK)是许多Java专家最初使用的开发环境。尽管许多编程人员已经使用第三方的开发工具,但JDK仍被当作Java开发的重要工具。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心Java API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。Java API包括一些重要的语言结构以及基本图形,网络和文件I/O.一般来说,Java API的非I/O部分对于运行Java的所有平台是相同的,而I/O部分则仅在通用Java环境中实现。
作为JDK实用程序,工具库中有七种主要程序。
Javac:Java编译器,将Java源代码转换成字节码。
Java:Java解释器,直接从类文件执行Java应用程序字节代码。
appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
Javadoc:根据Java源码及说明语句生成HTML文档。
Jdb:Java调试器,可以逐行执行程序,设置断点和检查变量。
Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
JRE
JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。是Sun的产品,包括两部分:JavaRuntimeEnvironment和
JavaPlug-inJavaRuntimeEnvironment(JRE)是可以在其上运行、测试和传输应用程序的Java平台。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具——编译器、调试器和其它工具。JRE需要辅助软件——JavaPlug-in——以便在浏览器中运行applet.J2RE是Java2 Runtime Environment,即Java 运行环境,有时简称JRE.如果你只需要运行Java程序或Applet,下载并安装它即可。如果你要自行开发
Java软件,请下载JDK.在JDK中附带有JRE.注意由于Microsoft对Java的支持不完全,请不要使用IE 自带的虚拟机来运行 Applet,务必安装一个JRE或JDK.
那么以上就是对于JRE和JDK的概念以及区别的介绍,希望你对他们有了一定的了解。
【编辑推荐】
1.在JDK7 b50中将实现正则表达式命名捕获组
2.JDK的安装图解与环境变量设置详解
3.JDK与JRE的关系和path的作用浅谈
4.JDK、SDK、JRE、JVM概念详解
5.安装JDK后JRE与JVM联系浅谈
JDK、SDK、JRE、JVM概念详解
JDK、SDK、JRE、JVM概念的理解是什么呢?我们经常在进行初级学习的时候JDK、SDK、JRE、JVM概念老是混淆,那么本文讲给你点启示。
AD:51CTO云计算架构师峰会抢票进行中!
JDK、SDK、JRE、JVM概念的认识我们可以通过HelloWorld来理解这几个缩写词的具体含义:
1.public class HelloWorld {
2.public static void main(String[] args) {
3. System.out.println("helloworld");
4. }
5.}
编译之后,我们得到了HelloWorld.class(图中的"Your program's class files")
在HelloWorld里面,我们调用了 JAVA API中的 ng.System这个类的静态成员对象 out, out 的静态方法: public static void println(String string);
然后我们让虚拟机器来执行这个HelloWorld。
1. 虚拟机会在classpath中找到HelloWorld.class。
2. 虚拟机中的解释器(interpret)会把HelloWorld.class解释成字节码。
3. 把解释后的字节码交由execution engin执行。
4. execution engin会调用native method(即平台相关的字节码)来在host system的stdout(显示器)的指定部分打印出指定的字符串。
5. 这样,我们就看到"helloworld"字样了。
有了这个流程后,我们就好理解上面几个术语了:
◆JDK: Java develop kit (Java 开发包)
◆SDK: software develop kit, 以前JDK 叫做Java software develop kit,后来出了1.2版本后,就改名叫JDK了,省时省力,节约成本。
◆JRE. Java runtime environment 我们的helloworld必须在JRE(Java运行环境,Java运行环境又叫Java 平台)里面,才能跑起来。所以,显然地, JRE其实就是JDK + JVM
◆JVM Java virtual machine. 简单地讲,就是把class文件变成字节码,然后送到excution engin中执行。而为什么叫虚拟机,而不叫真实机呢?因为JVM本身是又不能运算,又不能让显示器显示"helloworld"的,它只能再调用host system的API,比如在w32里面就会调c++的API,来让CPU帮他做做算术运算,来调用c++里面的API来控制显示器显示显示字符串。而这些API不是JDK里面有的,我们平时又看不见的,所以我们就叫它native api了
◆解释平台无关。有人会说,在linux的里面调用native api与w32里面调用的api肯定不一样吧?那为什么说Java是平台无关的呢?
其实是这样的,君不见里面又有jdk-for-w32又有jdk-for-linux下载吗?刚才不是说了吗? native api, native api, 就是我们平时看不见的api吗!调用native这些烦琐的活儿都让jdk去做了。所以我们调用的时候只用知道jdk(Java api) 里面的java.io.*能提供磁盘访问功能, java.awt.* 能画个框框画个圆圆就行了吗。至于JDK又是怎么调用的,在LINXU上更圆呢?还是在W32上更圆,这个就是JDK个人的事情了。(理论上讲是一样圆的,当然这又和显示器是否纯平相关了)
同时,这里就引申出了另一个话题。既如何编写平台无关的Java程序。其中关键的一条,就是调用且只调用jdk中的API,而不要私自调用native api。原因很简单啊, JDK-for-linux和JDK-for-w32表面都是一样的,所以我在w32里面调用JDK写的Java程序,在linux里面也会一样的写法啊,所以就可以移植来移植去都没问题。但是如果我在w32里面调用了一个图形显示的native api, 当我移植到linux