动态类型语言和静态类型语言的介绍
类型检查所进行的检验处理以及实行类型的约束,可发生在编译时期(静态检查)或运行时期(动态检查)。静态类型检查是在编译器所进行语义分析中进行的。如果一个语言强制实行类型规则就称此处理为强类型(或静态类型),反之称为弱类型(或动态类型)。另外,严格意义上,强类型与静态类型不是一回事,同理,弱类型与动态类型。
强类型是指某门语言检查两种类型是否兼容,如果不兼容就抛出一个错误或强制类型转换,尽管这个说法并不是很严格。静态类型强迫在类型结构的基础上执行多态。判断是否是一只鸭子的依据,是其基因蓝图(静态),还是因其叫声和走路的姿态像一只鸭子(动态)。静态语言的好处在于编译器和工具等对你的代码更加了解,可以用于捕捉错误,突出显示代码以及便于重构代码。付出的代价是你不得不做更多的工作,并且会受到一些限制。
动态类型语言(Dynamically Typed Language)
所谓动态类型语言,就是类型的检查是在运行时才做。
类型对于变量,属性,方法以及方法的返回类型都是可有可无的,在给变量赋值时才决定它的类型, 之后,还可以赋值不同类型的值,即使是基本类型,比如 C# 装箱(boxing)和拆箱(unboxing),可以把值类型转换成引用类型,引用类型转换成值类型。当需要时,很多类型之间都会发生自动转换,可以把不同的基本类型添加到同一数组(collections)中。
动态类型在解释语言中极为普遍,如 JavaScript、Perl、Python、Ruby 等等。
静态类型语言(Statically Typed Language)
静态类型语言的类型检查是在运行前的编译阶段,比如 C#、Java 等都是静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继承、接口,而动态类型语言却不需要,所以,一般动态语言都会采用 dynamic typing。静态类型语言常出现于编译语言中,比如,Java,实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。