这个关键字和静态

时间:2013-05-28 14:28:37

标签: java static this super

我知道我们无法在this方法中使用static关键字,但我很困惑,为什么我们无法在this或{{1}内使用static blocks }。甚至与static methods的情况相同。有人能说清楚这个吗?

由于

7 个答案:

答案 0 :(得分:3)

thissuper分别引用当前实例和父实例。

在任何static上下文中,无论是static block还是static method,都没有要引用的实例,因此不允许使用关键字。

super()是对父实例的无参数构造函数的调用,仅允许作为构造函数中的第一个语句,这使得它不会出现在任何静态上下文中。

答案 1 :(得分:3)

根据doc

  

在实例方法或构造函数中,这是对它的引用   当前对象 - 其方法或构造函数所在的对象   调用。您可以从内部引用当前对象的任何成员   使用它的实例方法或构造函数。

但是静态方法与Class不相关。在静态方法中,你没有任何实例。

答案 2 :(得分:0)

根据定义,静态方法和块链接到类,而不是该类的任何实例。

由于this是指当前的对象实例,因此不能在任何静态初始化块或方法中使用它是完全正常的。

答案 3 :(得分:0)

因为这指向了类的实例,所以在静态方法/块中没有实例。

答案 4 :(得分:0)

根据Oracle

  

在实例方法或构造函数中,this是对它的引用   当前对象 - 其方法或构造函数所在的对象   调用。

因此,在静态类中,您没有创建实例变量 - 对象。这就是您无法使用this关键字

的原因

答案 5 :(得分:0)

静态块可用于初始化静态变量,例如。

静态merthods在实例范围内也不起作用。

两者只与该类相关,并且与该类的实例无关。

答案 6 :(得分:0)

要回答这个问题,我们应该考虑静态意味着什么 - 这意味着这个位被放在内存中的“静态”位置,它只存在一次。

因此每个类都有静态位和非静态位。静态位存在一次,非静态位可以存在多次(即许多不同的实例)。然后可以将“this”一词视为“版本的非静态位”的简写。

在静态上下文中,我们没有要引用的非静态位的版本(或者更确切地说,我们不知道应该引用哪个版本!)所以我们没有 this 。可以对super进行相同的论证。