详细解释:
动态语言和静态语言的区别;
动态类型语言和静态类型语言的区别;
动态语言和动态类型语言的区别(易混淆);
弱类型语言和强类型语言的区别;
动态类型语言和弱类型语言的区别(易混淆);
编译型语言和解释型语言和混合型语言的区别;
动态和静态、动态类型和静态类型、弱类型和强类型、编译型和解释型以及混合型
动态语言和静态语言
阐述
动态语言
动态语言(Dynamic Programming Language),是指程序在运行时可以改变其结构的语言。新的函数、对象、甚至代码可以被引进,已有的函数可以被删除。类型的检查是在运行时做的。
静态语言
静态语言,是与动态语言的特性相比较而产生的相对应的概念。指在运行时结构不可变的语言。
实例
动态语言
javascript、php、Ruby、Python等。
静态语言
C++、Java、C#等。
代码对比
动态语言
# 定义类
class Person(object):
def __init__(self,myName):
self.name = myName
# 实例化类的对象
zhang = Person"老张")
# 运行时给对象添加新的属性
zhang.age = 24
# 测试
print(zhang.name)
print(zhang.age)
静态语言
// 定义类
class Person{
private String name;
Person(String name){
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
// 测试
Person zhang = new Person("老张");
System.out.println(zhang.getName());
动态类型语言和静态类型语言
动态类型语言
动态类型语言(Dynamically Typed Language),指在运行期间才做数据类型检查的语言。编码时不需要明确变量的数据类型。
静态类型语言
静态类型语言(Dynamically Typed Language),指在编译期间或运行前做数据类型检查的语言。编码时要明确变量的数据类型。
实例
动态类型语言
Python、Ruby、JavaScript、Swift、PHP等。
静态类型语言
C、C++、Java等。
代码对比
动态类型语言
def changeType():
variable = 10
variable = "ten"
variable = [1,2,3,4,5,6,7,8,9,10]
静态类型语言
public void cantChangeType(){
int variable = 10;
// variable = "ten"; 会报错
return variable;
}
弱类型语言和强类型语言
阐述
弱类型语言
弱类型语言(WeaklyTyped Language),与强类型相对应,当操作两个不同类型的变量时,其变量可以随着环境的不同自动变换类型(隐式转换)。
强类型语言
强类型语言(Strongly Typed Language),是一种总是强制类型定义的语言,要求不同类型的变量的使用要严格符合定义,只有相同类型的变量才能操作(系统偶有默认转换),若不经过强制类型转换,不发生隐式转换。
实例
弱类型语言
JavaScript、VB等。
强类型语言
Python、Java等。
代码对比
弱类型语言
var num = 10;
var str = "string";
var strnum = str + num;
// strnum : "string10" ,发生隐式类型转换。
强类型语言
num = 10
str = "string"
strnum = str + num
# strnum: 报错
编译型语言和解释型语言
阐述
编译型语言
编译型语言需要通过编译器将源代码编译成机器码,然后将各个模块的机器码和依赖库链接起来生成可执行文件。
优点:一次编译,执行效率高,可脱离语言环境独立运行。
缺点:平台移植性差、对维护的友好性差。
解释型语言
解释型语言不需要编译,在运行时逐行翻译。
优点:具有良好的平台兼容性。
缺点:执行效率差。
混合型语言
混合型语言既整合了编译型语言和解释型语言的优缺点(取其精华、去其糟粕)。如Java,在源代码和操作系统之间借助JVM,先利用javac.exe将源代码编译为字节码,再利用java.exe将字节码文件(.class)解释为特定平台的机器码执行。
实例
编译型语言
C、C++、Swift等。
解释型语言
Python、JavaScript、PHP等。
混合型语言
C#、Java