对Java平台的理解与java语言是解释执行的吗?

对java平台的理解

java本身就是一个面向对象的语言,一般来说它有两大特性:第一个就是它的“Write once,run anywhere”,也就是一处编写处处运行,另一个就是它的垃圾回收机制,俗称GC(Garbage Collection),它可以自动的回收分配内存,让程序员不需要操心这些事。

我们日常会接触到JRE与JDK,JRE(Java Runtime Environment)也就是java运行环境,里面有JVM和java类库,以及一些模块等;JDK(Java Development Kit)它包含了JRE,并且提供了更多的工具,比如编译器、各种诊断工具等。

java语言发展至今,语言在不断改进的同时也诞生了很多附属产品:如java的类库、jar包以及为java编程服务的产品或者说工具等,这些与java语言本身的语言特性结合的集合体就是java平台,如下图(图来自于网络):

对Java平台的理解与java语言是解释执行的吗?

java是解释执行的这句话正确吗?

一份Java代码要执行的话,首先需要将.java文件转化成.class文件,这个.class文件并不是机器码文件而是字节码文件,机器是不能直接运行的,所以转化成字节码文件之后,这个字节码文件就会被交由java自带的虚拟器(JVM)的解释器解释成机器码执行,java通过字节码和JVM这种跨平台的抽象屏蔽了操作系统和硬件的细节,这也是java“Write once ,run anywhere”这一特性的基础。但是常见的JVM比如:Oracle JDK提供的Hotspot JVM,都提供了一个JIT(Just-In-Time)工具也就是通常说的动态编译器,JIT能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行的;不过需要强调的是,java并不是编译机制而是解释机制。

关于”Write once ,run anywhere“

并不是说java语言可以跨平台,java语言本身与其它语言没有特别大的差异,java跨平台特性与java虚拟机密不可分,Windows与Linux都有相应的JDK,安装了JDK就有了java运行的环境,所以就有java一处编写处处运行的效果。