gpt4 book ai didi

java - 有人可以说明像 Java 或 Groovy 这样的语言被视为静态或动态类型或动态语言的概念吗?

转载 作者:行者123 更新时间:2023-11-30 04:31:39 24 4
gpt4 key购买 nike

我只是想弄清楚什么时候一种编程语言被称为静态或动态类型,或者同时被视为静态类型和动态语言或动态类型和动态语言。

我感到困惑的是,如果在 Java 的情况下,当变量的类型已知或在编译时定义时,是否已知一种语言是静态类型的,即

//Java illustration of statically typed  
int x, y; //explicit type declaration
x = 5, y = 10; //Now we use the variables

//Groovy illustration of statically typed
def x, y //explicit type declaration
x = 1, y = 10 //now we use the variables

根据阅读各种在线资源,它说被认为是静态类型的语言列表不包括 Groovy,而是 Java 和 C++。

此外,如果 Groovy 是一种动态语言(DL 的定义 - DL 是一种在编译时很少或不进行检查的语言,而是在运行时进行检查)。这是否意味着 Groovy 也是一种动态类型语言,因为变量被认为是动态类型的“是在运行时而不是编译时知道变量的类型”。

//Illustration of a language being dynamically typed according to DT and DL definition
x = 5 //directly using the variable (exceptable in Python and PHP but not in Java/Groovy)

如果 Groovy 就是这种情况,那么上面的 Groovy 静态类型代码说明与在运行时完成的检查的 Groovy 定义相矛盾。

这是否意味着java groovy都不是动态类型语言,因为直接使用变量在Java和groovy中都会抛出编译器错误。

如有错误,请指正。请提供带有代码说明的示例。

最佳答案

静态和动态类型主要描述变量(以及函数参数和返回值)的类型。在许多静态类型语言中,您必须声明变量的类型,以便编译器知道哪些操作是有效的以及应该使用哪个重载版本的函数/运算符。一些现代静态类型语言(包括大多数函数语言)具有类型推断,因此大多数时候您不必声明变量的类型。但是,变量仍必须具有固定类型。如果您将不同类型的值分配给同一变量,编译器将拒绝编译或只允许您执行所有人都通用的操作。真正的强类型语言不可能出现与类型相关的运行时故障。

在动态类型语言中,变量只是一个名称。您可以将任何类型的值分配给任何变量,并且可以通过分配不同类型的值来更改类型。函数调用或变量操作的有效性只能在语句执行时检查。 (你可以认为这是将Java中的每个变量声明为Object,并在使用时将它们转换为所需的类型。当然,编译器不会尝试确定转换是否成功,而是会插入转换检查,这可能会导致运行失败时间。)

动态语言通常意味着放宽编译器检查的大部分内容(语法可能是唯一提前检查的内容)。这通常意味着变量的存在甚至函数调用的有效性只有在必要时才会被验证。他们通常使用动态类型,因为静态类型不利于放松。

关于java - 有人可以说明像 Java 或 Groovy 这样的语言被视为静态或动态类型或动态语言的概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14510184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com