Java是动态编程语言吗?

Java是动态编程语言吗?,java,programming-languages,computer-science,Java,Programming Languages,Computer Science,动态编程语言的定义说,这些语言在运行时执行多种通用行为,而静态编程语言在编译时执行相同的行为。它可以通过添加新代码、扩展对象和定义来实现 据我所知,许多编程语言都封装了像java或头文件C++之类的包。因此,作为一名程序员,我将编写的代码肯定会在编译时扩展,并最终转换为汇编代码,最后转换为机器代码。那么,每种高级语言都是动态的吗?一般来说,人们可以通过类型系统来区分静态编程语言和动态编程语言。在动态类型系统中,您可以有以下内容 var x = 2 x = "c" 也就是说,给定变量的类型在其生

动态编程语言的定义说,这些语言在运行时执行多种通用行为,而静态编程语言在编译时执行相同的行为。它可以通过添加新代码、扩展对象和定义来实现


据我所知,许多编程语言都封装了像java或头文件C++之类的包。因此,作为一名程序员,我将编写的代码肯定会在编译时扩展,并最终转换为汇编代码,最后转换为机器代码。那么,每种高级语言都是动态的吗?

一般来说,人们可以通过类型系统来区分静态编程语言和动态编程语言。在动态类型系统中,您可以有以下内容

var x = 2
x = "c"
也就是说,给定变量的类型在其生命周期内可能会发生变化。静态类型系统不允许这样做。C动态数据类型就是这个特性的一个例子

注意不要将动态系统与推断或弱类型系统混淆。推断类型系统不需要正式声明变量,但会根据赋值推断类型。它不允许使用不同的类型重新声明变量

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;
}

所有类型系统的组合都存在,有时在同一个编程语言中:静态/动态、隐式错误/显式、弱/强。

当你说定义时-哪个定义?你从哪里得到的?对我来说,这似乎是一个措辞相当糟糕的定义。你是说,当你将其定义为静态编程语言的属性时,代码的编译时扩展将使其成为动态的吗?@JonSkeet为这个模糊的声明感到抱歉。我在我的一本教科书中读到了这个定义,我在维基百科上发现了一个类似的声明,因此得出了相同的结论。然而,这种动态和静态编程语言的概念让我感到困惑。如果您能提供一些很好的参考资料来指导您进一步学习,这将非常有帮助。动态编程语言!=动态类型系统。大多数都是,但不是全部。@user207421如果不是基于变量的数据类型更改,那么我们如何准确区分静态和动态编程语言。你能分享一些链接来深入了解这个概念吗。