Java, JVM, JRE, Java API, Java类库, 编译器, 解释器,,jvmjre
Java, JVM, JRE, Java API, Java类库, 编译器, 解释器,,jvmjre
Java, JVM, JRE, Java API, Java 类库 , 编译器 , 解释器 , JDK 帮助文档 --- 的一些理解 .
Java java 说它是一种语言还不如说它是一个平台
JRE JRE 是Java 运行环境 (Java Runtime Enviroment) 的缩写。它基本上就和Java 虚拟机是同一个概念。
一般说来,在谈论一个具体的产品的时候,可以说“JRE” ,而说到理论中的一个模型的时候,我们常用的是“Java 虚拟机” 。
要使用Java 程序,JRE 是必不可少的环境。
Java API 没有 api 就没有 java api 在这指的是 java 的类库!就是 jdk 里面的那些类
Java
类库
类库一般
JAVA
中多数都是类库,通过调用包中的类。
来应用里面的内容,具体,偶也说不明白由软件开发商开发的
api
比如
mfc
或者
java
类库什么的
那是供开发人员使用的底层接口
JVM Java Virtual Machine ( Java 虚拟机),它是一个虚构出来的计算机 , 是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java 虚拟机有自己完善的硬件架构 , 如处理器、堆栈、寄存器等 , 还具有相应的指令系统
JDK 帮助文档 jdk 帮助文档是让你查 API 的工具
我们可以通过helloworld
来理解这几个缩写词的具体含义:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("helloworld");
}
}
编译之后, 我们得到了HelloWorld.class
(图中的"Your program's class files"
)
在HelloWorld
里面, 我们调用了 JAVA API
中的 java.lang.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"
字样了。
有了这个流程后, 我们就好理解上面几个术语了:
a. JDK: java develop kit (JAVA API
包)
b. SDK: software develop kit,
以前JDK
叫做java software develop kit
, 后来出了1.2
版本后,
就改名叫jdk
了, 省时省力, 节约成本。
c. JRE. java runtime environment
我们的helloworld
必须在JRE(JAVA
运行环境,JAVA
运行环境又叫JAVA
平台)里面, 才能跑起来。 所以, 显然地, JREJRE
顾名思义只是java class
运行时需要的环境,JDK
不仅包含了JRE
,还提供了开发调试java
程序需要的工具 。
d. JVM java virtual machine.
简单地讲, 就是把class
文件变成字节码,
然后送到excution engin
中执行。 而为什么叫虚拟机, 而不叫真实机呢? 因为JVM
本身是又不能运算, 又不能让显示器显示"helloworld"
的,
它只能再调用host system
的API
, 比如在w32
里面就会调c++
的API
,
来让CPU
帮他做做算术运算, 来调用c++
里面的API
来控制显示器显示显示字符串。 而这些API
不是JDK
里面有的,我们平时又看不见的,所以我们就叫它native api
了(亦曰私房XX
)。
e.
解释平台无关。 有人会说, 在linux
的里面调用native
api
与w32
里面调用的api
肯定不一样吧? 那为什么说JAVA
是平台无关的呢?
其 实是这样的, 君不见java.sun.com
里面又有jdk-for-w32
又有jdk-for-linux
下载吗? 刚才不是说了吗? native api,
native api,
就是我们平时看不见的api
吗! 调用native
这些烦琐的活儿都让jdk
去做了。 所以我们调用的时候只用知道jdk(java api)
里面的java.io.*
能提供磁盘访问功能, java.awt.*
能画个框框画个圆圆就行了吗。
至于JDK
又是怎么调用的, 在LINXU
上更圆呢? 还是在W32
上更圆,(x)
这个就是JDK
个人的事情了。(理论上讲是一样圆的,
当然这又和显示器是否纯平相关了:D)
同时, 这里就引申出了另一个话题。 既如何编写平台无关的JAVA
程序。 其中关键的一条, 就是调用且只调用jdk
中的API
, 而不要私自调用native
api
。 原因很简单啊, JDK-for-linux
和JDK-for-w32
表面都是一样的,
所以我在w32
里面调用JDK
写的java
程序,在linux
里面也会一样的写法啊, 所以就可以移植来移植去都没问题。(b)
但是如果我在w32
里面调用了 一个图形显示的native api,
当我移植到linux
去的时候, 谁又能保证里面也有相同名称,
相同参数,相同返回值, 相同功能的native api
供我调用呢!(?)
在
Java
中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接
口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在
Java
中,这种供虚拟机理解的代
码叫做字节码(
ByteCode
),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。
Java
源程序经
过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上
运行。
可以说,
Java
虚拟机是
Java
语言的基础。它是
Java
技术的重要组成部分。
Java
虚拟机是一个抽象的计算机,和实
际的计算机一样,它具有一个指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器。
Java
解释器负责将字节代码翻译成特定机器的机
器代码。
Java
是一种简单的语言。它用到的概念不多,而且多为程序员所熟悉。如果你是一名程序员,掌握
Java
对你来说是易如反掌的事。即使你没有学过
任何编程语言,学习
Java
也要比学习
C++
要容易的多
jre
为
Java RunTime Envirment
的简称,
Java Runtime Environment
(包括
Java Plug-in
)是
Sun
的产品,包括两部分:
Java Runtime Environment
和
Java Plug-in
Java Runtime Environment(JRE)
是可以在其上运行、测试和传输应用程序的
Java
平台。它包括
Java
虚拟机、
Java
平台核心类和支持文件。它不包含开发工具
--
编译器、调试器和其它工具。
JRE
需要辅助软件
-- Java Plug-in --
以便在浏览器中运行
applet
。
Java Plug-in
软件允许
Java applet
和
JavaBeans
组件在使用
Sun
的
Java Runtime Environment (JRE)
的浏览器中运行,而不是在使用缺省的
Java
运行环境的浏览器中运行。
Java Plug-in
可用于
Netscape Navigator
和
Microsoft Internet Explorer
主意它之间的想包含关系
相关文章
- 暂无相关文章
用户点评