转自:http://blog.csdn.net/xxb2008/article/details/7924676
JAVA是解释型语言还是编译型语言
JAVA是解释型语言还是编译型语言
概念:
- 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
- 解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!
区别:
- 编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。如C、C++、Delphi、Pascal,Fortran。
- 解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。如Java、Basic.
通俗的讲,编译语言是在编译后可以直接运行,而解释语言的执行需要一个解释环境。
java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。
JIT:
- 首先采用编译形式生成某种中介代码(Java bytecode/MSIL),然后在运行时将其(通常以函数或Block为单位)最终转换成机器码,然后执行,转化的机器码可以被cache,以提高重复执行的效率
动态语言和静态语言
1.动态语言Dynamically Typed Language
例如:ECMAScript(JavaScript)、Ruby、Python、VBScript、php
也叫动态类型定义语言
与静态类型定义相反,一种在执行期间才去发现数据类型的语言,
动态语言是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。
动态语言的类型检查是在运行时做的。
它的优点是方便阅读,不需要写非常多的类型相关的代码;
缺点是不方便调试,命名不规范时会造成读不懂,不利于理解等。
目前java平台下的动态语言有Groovy、nice、BeanShell、Jython、JRuby、Rhino(JavaScript)、 Jacl(TCL)、Bistro(SmallTalk)、Kawa(Lisp/Schema),真是越来越多了。java下这么多的动态语言建议选择 Groovy,感觉血统较为正宗,兼容Java的语法,java程序员学习起来较为容易,上手较快。
2.静态语言Statically Typed Language
例如:C、C++、Java
也叫静态类型定义语言。即一种在编译时,数据类型是固定的语言。大多数静态类型定义语言强制这一点,它要求你在使用所有变量之前要声明它们的数据类型。
在使用数据之前,我们必须首先定义数据类型,这些数据类型包括int ,float,double等等。就相当于在使用它们之前,首先要为它们分配好内存空间。
静态类型语言的主要优点在于其结构非常规范,便于调试,方便类型安全;
缺点是为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。
3.强类型定义语言
一种总是强制类型定义的语言。Java和Python是强制类型定义的。如果你有一个整数,如果不显示地进行转换,你不能将其视为一个字符串
4.弱类型定义语言
一种类型可以被忽略的语言,与强类型定义相反。VBScript是弱类型定义
的。在VBScript中,可以将字符串 ’12′ 和整数 3 进行连接得到字符串 ’123′,
然后可以把它看成整数 123,而不需要显示转换。
5.脚本语言
脚本语言代表一套与系统程序设计语言不同的协定。
它们牺牲执行速度和与系统程序设计语言相关的类型长度而提供更高的编程创作力和软件重用。
脚本语言更适合在联系复杂的应用程序中进行胶着。
为了简化连接组件的工作,脚本语言被设计为无类型的,脚本语言一般是面向字符的,因为字符为许多不同的事物提供了一致的描述。
事实上,脚本语言都是动态语言,而动态语言都是解释型语言,不管它们是不是面向对象。