【问题标题】:Is Java a dynamic programming language? [closed]Java是动态编程语言吗? [关闭]
【发布时间】:2019-12-22 11:11:23
【问题描述】:

动态编程语言的定义说“这些语言是那些在运行时执行多种一般行为的语言,与在编译时执行相同操作的静态编程语言相反。它可以通过添加新代码,通过扩展对象和定义”。

据我所知,许多编程语言都以包(如 Java)或头文件(如 C++)的形式进行了封装。所以,作为一个程序员,我写的代码肯定会在编译时扩展,最终会转换为汇编代码,最后转换为机器代码。那么每一种高级语言都会变得动态吗?

【问题讨论】:

  • 当您说“定义”时 - 哪个定义?你从哪里得到的?对我来说,这似乎是一个措辞相当糟糕的定义。
  • 您是说当您将其定义为静态编程语言的属性时,代码的编译时扩展会使其动态化?
  • @JonSkeet 抱歉,这个小小的含糊声明。我在我的一本教科书中阅读了这个定义,我在维基百科上找到了类似的声明,因此得出了相同的结论。但是,动态和静态编程语言的概念让我感到困惑。如果您能提供任何好的参考资料来指导您进行更多研究,这将非常有帮助。

标签: java programming-languages computer-science


【解决方案1】:

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

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

类型系统的所有组合都存在,有时使用相同的编程语言:静态/动态、隐式(推断)/显式、弱/强。

【讨论】:

  • 动态编程语言!=动态类型系统。他们中的大多数都是,但不是全部。
  • @user207421 如果不是基于变量的数据类型更改,那么我们如何准确区分静态和动态编程语言。您能否分享任何链接,以便更深入地了解这个概念。
  • 概念:动态语言 VS 动态类型语言 不是一回事!即 Python 是静态类型的,但动态语言
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 2018-02-22
  • 2012-09-17
  • 2011-09-04
  • 2012-10-02
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
相关资源
最近更新 更多