我为 scjp 考试做准备,并注意到对我来说令人惊讶的行为。
public class Test {
int k;
{
int k; // it is valid variant
}
public static void main(String[] args) {
int kk;
{
int kk; // NOT VALID.java: variable kk is already defined in method main(java.lang.String[])
}
}
public void method (int var){
int var;//NOT VALID.java: variable var is already defined in method method(int)
}
}
在我的脑海中,我始终遵循以下规则:我认为所有三种变体都是可能的,并且内部定义会与外部重叠。
例子表明这是错误的规则。
请澄清这种情况并解释熟悉情况的常见规则。
附言
public class Test {
int k;
{
int k;
{
int k; //java: variable k is already defined in instance initializer of class Test
}
}
}