Java 是一种动态编程语言吗?
Is Java a dynamic programming language?
动态编程语言的定义是"These languages are those which perform multiple general behaviours at run-time in contrary to static programming languages which do the same at compile time. It can be by addition of new code, by extending objects and definitions"。
据我所知,许多编程语言都以 Java 等包或 C++ 等头文件的形式进行封装。因此,作为程序员,我将编写的代码肯定会在编译时扩展,并最终转换为汇编代码,最后转换为机器代码。那么是不是每种高级语言都变得动态了?
一般来说,可以通过类型系统来区分静态和动态编程语言。在动态类型系统中你可以有以下
var x = 2
x = "c"
意思是,给定变量的类型可能会在其生命周期内发生变化。静态类型系统不允许这样做。 C# dynamic
数据类型是此功能的一个示例。
注意不要将动态与推断或弱类型系统混淆。推断类型系统不需要变量的正式声明,但会根据分配的值推断类型。它不允许用不同的类型重新声明变量。
var x = 2 // the type of x is int
x = "C" // compile error: incompatible types!
弱类型系统允许与声明的变量类型不兼容的操作。 C 允许将指针转换为任何类型:
foo(void *ptr) {
char *str;
strcpy(str, (char *)ptr);
int i = &(int *)ptr + 1;
}
类型系统的所有组合都存在,有时使用相同的编程语言:static/dynamic、隐式(推断)/显式、weak/strong。
动态编程语言的定义是"These languages are those which perform multiple general behaviours at run-time in contrary to static programming languages which do the same at compile time. It can be by addition of new code, by extending objects and definitions"。
据我所知,许多编程语言都以 Java 等包或 C++ 等头文件的形式进行封装。因此,作为程序员,我将编写的代码肯定会在编译时扩展,并最终转换为汇编代码,最后转换为机器代码。那么是不是每种高级语言都变得动态了?
一般来说,可以通过类型系统来区分静态和动态编程语言。在动态类型系统中你可以有以下
var x = 2
x = "c"
意思是,给定变量的类型可能会在其生命周期内发生变化。静态类型系统不允许这样做。 C# dynamic
数据类型是此功能的一个示例。
注意不要将动态与推断或弱类型系统混淆。推断类型系统不需要变量的正式声明,但会根据分配的值推断类型。它不允许用不同的类型重新声明变量。
var x = 2 // the type of x is int
x = "C" // compile error: incompatible types!
弱类型系统允许与声明的变量类型不兼容的操作。 C 允许将指针转换为任何类型:
foo(void *ptr) {
char *str;
strcpy(str, (char *)ptr);
int i = &(int *)ptr + 1;
}
类型系统的所有组合都存在,有时使用相同的编程语言:static/dynamic、隐式(推断)/显式、weak/strong。