首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >像Java或Groovy这样的语言被认为是静态类型还是动态类型,或者是一种动态语言?

像Java或Groovy这样的语言被认为是静态类型还是动态类型,或者是一种动态语言?
EN

Stack Overflow用户
提问于 2013-01-25 04:31:46
回答 2查看 140关注 0票数 1

我只是想弄清楚什么时候是静态或动态类型的编程语言,或者同时是静态类型和动态类型的语言,还是动态类型和动态类型的语言。

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

代码语言:javascript
复制
//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也是一种动态类型的语言,因为对于被认为是动态类型的变量来说,“是在运行时而不是编译时知道变量的类型”。

代码语言:javascript
复制
//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中抛出编译器错误。

如果我错了,请纠正我。请提供您的示例与代码说明。

EN

回答 2

Stack Overflow用户

发布于 2013-01-25 05:17:30

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-01-25 04:35:55

注意,在Java中,您必须告诉它变量的完整类型。在您的示例中使用“in”。您可以说“float”或“Map”或“MyClassWithALongName”。

在Groovy中,您只是说'def‘来表示有一个变量,但是您没有告诉它内容类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14510184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档