标签:Java 语言 数据类型 编译 类型 动态
分类 |
代表语言 |
区别 |
优缺点 |
编译型语言 |
C、C++、Pascal、Object-C以及最近很火的苹果新语言swift |
把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。 |
执行速度快、效率高; |
依靠编译器、跨平台性差些 |
|
|
|
解释型语言 |
JavaScript、Python、Erlang、PHP、Perl、Ruby |
把做好的源程序翻译一句,然后执行一句,直至结束! |
依靠解释器、跨平台性好; |
执行速度慢、效率低; |
|
|
|
混合型语言 |
C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码; |
|
|
Java先生成字节码再在Java虚拟机中解释执行。 |
java既是编译型语言,也是解释型语言。但更多人赞同“java是编译型语言” |
|
|
|
|
|
|
|
|
|
|
分类 |
代表语言 |
区别 |
注意 |
动态语言 |
Object-C、C#、JavaScript、PHP、Python、Erlang |
在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。 |
很多人认为解释型语言都是动态语言,这个观点是错的!Java是解释型语言但是不是动态语言,Java不能在运行的时候改变自己结构。反之成立吗?动态语言都是解释型语言。也是错的!Object-C是编译型语言,但是他是动态语言。得益于特有的run time机制(准确说run time不是语法特性是运行时环境,这里不展开)OC代码是可以在运行的时候插入、替换方法的。 |
C#也是动态语言,通过C#的反射机制可以动态的插入一段代码执行。 |
|
|
|
静态语言 |
Java、C、C++ |
与动态语言相对应的,运行时结构不可变的语言就是静态语言。 |
|
很多网上资料把动态类型语言和动态语言混为一谈,简直是误人子弟。动态类型语言和动态语言是完全不同的两个概念。动态类型语言是指在运行期间才去做数据类型检查的语言,说的是数据类型,动态语言说的是运行是改变结构,说的是代码结构。
分类 |
代表语言 |
区别 |
注意 |
动态类型语言 |
Python、Ruby、Erlang、JavaScript、swift、PHP、Perl |
动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。 |
相当一部分程序员,也包括曾经的我,认为解释型语言都是动态类型语言,编译型语言都是静态类型语言。这个也是错的。swift是编译型语言但是它也是动态类型语言。C#和Java是解释型语言也是静态类型语言。 |
静态类型语言 |
C、C++、C#、Java、Object-C |
静态语言的数据类型是在编译其间确定的或者说运行之前确定的,编写代码的时候要明确确定变量的数据类型。 |
|
分类 |
代表语言 |
区别 |
注意 |
强类型语言 |
Java、C#、Python、Object-C、Ruby |
一旦一个变量被指定了某个数据类型,如果不仅过强类型转换,那么它就永远是这个数据类型。不能把一个整形变量当做一个字符串来处理。 |
一个语言是不是强类型语言和是不是动态类型语言也没有必然联系。Python是动态类型语言,是强类型语言。JavaScript是动态类型语言,是弱类型语言。Java是静态类型语言,是强类型语言。 |
弱类型语言 |
JavaScript、PHP、C、C++(C和C++有争议,但是确实可以给一个字符变量赋整形值,可能初衷是强类型,形态上接近弱类型) |
数据类型可以被忽略,一个变量可以赋不同数据类型的值。给一个整形变量a赋一个字符串值,那么a就变成字符类型。 |
|
标签:Java,
语言,
数据类型,
编译,
类型,
动态
From: https://www.cnblogs.com/rongzhiy/p/16867947.html