Java, JVM, JRE, Java API, Java类库, 编译器, 解释器,

 

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 MachineJava 虚拟机),它是一个虚构出来的计算机 , 是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 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 systemstdout( 显示器) 的指定部分打印出指定的字符串。
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 systemAPI , 比如在w32 里面就会调c++API , 来让CPU 帮他做做算术运算, 来调用c++ 里面的API 来控制显示器显示显示字符串。 而这些API 不是JDK 里面有的,我们平时又看不见的,所以我们就叫它native api 了(亦曰私房XX )。

e.
解释平台无关。 有人会说, 在linux 的里面调用native apiw32 里面调用的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-linuxJDK-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



主意它之间的想包含关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值