我知道我们无法在this
方法中使用static
关键字,但我很困惑,为什么我们无法在this
或{{1}内使用static blocks
}。甚至与static methods
的情况相同。有人能说清楚这个吗?
由于
答案 0 :(得分:3)
this
和super
分别引用当前实例和父实例。
在任何static
上下文中,无论是static block
还是static method
,都没有要引用的实例,因此不允许使用关键字。
super()
是对父实例的无参数构造函数的调用,仅允许作为构造函数中的第一个语句,这使得它不会出现在任何静态上下文中。
答案 1 :(得分:3)
根据doc
在实例方法或构造函数中,这是对它的引用 当前对象 - 其方法或构造函数所在的对象 调用。您可以从内部引用当前对象的任何成员 使用它的实例方法或构造函数。
但是静态方法与Class不相关。在静态方法中,你没有任何实例。
答案 2 :(得分:0)
根据定义,静态方法和块链接到类,而不是该类的任何实例。
由于this
是指当前的对象实例,因此不能在任何静态初始化块或方法中使用它是完全正常的。
答案 3 :(得分:0)
因为这指向了类的实例,所以在静态方法/块中没有实例。
答案 4 :(得分:0)
答案 5 :(得分:0)
静态块可用于初始化静态变量,例如。
静态merthods在实例范围内也不起作用。
两者只与该类相关,并且与该类的实例无关。
答案 6 :(得分:0)
要回答这个问题,我们应该考虑静态意味着什么 - 这意味着这个位被放在内存中的“静态”位置,它只存在一次。
因此每个类都有静态位和非静态位。静态位存在一次,非静态位可以存在多次(即许多不同的实例)。然后可以将“this”一词视为“此版本的非静态位”的简写。
在静态上下文中,我们没有要引用的非静态位的版本(或者更确切地说,我们不知道应该引用哪个版本!)所以我们没有 this 。可以对super进行相同的论证。