解释型 编译型 语法糖

语法糖
泛型,变长参数,自动装箱拆箱, foreach
虚拟机运行时不支持这些语法,它们在编辑阶段被还原回简单的基础语法结构。

--------------

Java这个语言很特殊。 默认是Mixed Mode  混合模式
一、你可以说它是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有。
二、你可以说它是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就算是解释的了。
三、但是,现在的JVM为了效率,都有一些JIT优化。它又会把.class的二进制代码编译为本地的代码直接运行,所以,又是编译的。。。

JIT Just In Time Compiler 即时编译器
HotSpot 中内置了两个JIT, Client Compiler 和Server Compiler






-------------------

其实主要还是看你对“编译”和“解释”怎么下定义了。

按我的理解,解释的意思就是在程序执行时才开始翻译代码为二进制,并且翻译一句执行一句。
如果解释的定义是这样,那Java绝对是编译型语言。

因为,第一:Java首先被编译成了字节码,第二:字节码在执行时也不是翻译一句执行一句,而是全部翻译完成并加载入内存之后才开始执行(这个过程中JVM会进行代码优化)。

所以,Java是编译型语言。

--------------------
.java->编译->.class
.class需要jvm解释(+JIT技术编译),执行。

你可能感兴趣的:(编译)