Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在某些语言中使用变量之前需要声明变量,而在其他语言中则不需要?_Java_Python - Fatal编程技术网

Java 为什么在某些语言中使用变量之前需要声明变量,而在其他语言中则不需要?

Java 为什么在某些语言中使用变量之前需要声明变量,而在其他语言中则不需要?,java,python,Java,Python,在Python和Java中,如何为变量声明分配内存?在没有编译步骤的情况下,解释语言如何知道变量需要多少内存?在变量可用之前,必须为变量分配一个内存位置,然后进行初始化——无论是在内存中还是甚至在内存中 Declare意味着您使用特定的代码片段使该变量生效,例如 int i; Person p; 它们已声明,但未初始化。它们现在被分配到内存中的一个位置——在某些语言中,这个位置和大小可能是不断变化的。但不管怎样,现在内存中有一些物理位置,运行时环境可以查询,以检索变量(指向变量的间接指针或实际

在Python和Java中,如何为变量声明分配内存?在没有编译步骤的情况下,解释语言如何知道变量需要多少内存?

在变量可用之前,必须为变量分配一个内存位置,然后进行初始化——无论是在内存中还是甚至在内存中

Declare意味着您使用特定的代码片段使该变量生效,例如

int i;
Person p;
它们已声明,但未初始化。它们现在被分配到内存中的一个位置——在某些语言中,这个位置和大小可能是不断变化的。但不管怎样,现在内存中有一些物理位置,运行时环境可以查询,以检索变量(指向变量的间接指针或实际位置本身)

现在它有一个空的“盒子”可以放进去,它必须被填满,也就是说它必须被“初始化”:

现在盒子里有一些具体的东西。它可以使用了。在初始化之前尝试使用它将导致(在Java中)出现
NullPointerException


有些语言要求您声明变量,以便显式地为其分配内存(位置和/或大小)。有些语言会为您分配内存。正如对您的问题和此答案的评论中所述,有很多变化。

查找强类型和弱类型。@rpg711变量声明在弱类型语言中也是强制性的。即使您可能认为它不像JavaScript中那样是强制性的,声明一个变量也可以设置它的作用域,它与解释的、编译的以及类型规则是分离的。没有任何限制阻止某人创建不需要变量声明的具有强类型的编译语言。纯粹是语言创建者的设计决定。@rpg711在JavaScript中,您使用的变量没有声明它在全局范围内,而不是“您第一次使用它的地方”(这是常见的错误源)。@deathlee这不是一个愚蠢的问题。虽然有点宽,但你不是很清楚。讨论有点偏离了轨道:p这里似乎没有人有明确的答案。我认为有人误解了这一点,因为你说Python必须声明其变量,而你真正的意思是Python必须初始化其变量(或者你将如何使用它们?),你的两个定义都是错误的。好吧,到目前为止有两个反对票,没有人批评问题是什么。这是一个相当基本的概念。我想知道什么语言不能做到这一点。它不是反过来吗(例如C)?声明会给你内存,初始化会把东西放在那里。我没有投反对票:p,但我怀疑你的第一句话是否属实。这可能只是因为人们不赞成你称之为声明。更好,但这仍然是“声明”的一个非常不标准的定义。此外,许多语言不将变量分配给内存中的位置。例如,在Python中,全局变量的dict条目完全有可能在程序执行过程中更改位置。
i = 3;
p = new Person();