会报错的呀
在成员内部类中使用static修饰符可以创建静态成员,但是不能创建静态变量。这是因为静态变量是与类关联的,而成员内部类是与外部类的实例相关联的。因此,如果在成员内部类中定义静态变量,则会导致无法确定该变量的作用域。
下面是一个示例代码,展示了如何在成员内部类中使用static修饰符:
public class OuterClass {
private static int outerStaticVar = 1;
private int outerInstanceVar = 2;
public class InnerClass {
// 静态成员
private static final int innerStaticVar = 3;
// 非静态成员
private int innerInstanceVar = 4;
public void printVars() {
System.out.println("outerStaticVar: " + outerStaticVar);
System.out.println("outerInstanceVar: " + outerInstanceVar);
System.out.println("innerStaticVar: " + innerStaticVar);
System.out.println("innerInstanceVar: " + innerInstanceVar);
}
}
public static void main(String[] args) {
OuterClass outerObj = new OuterClass();
InnerClass innerObj = outerObj.new InnerClass();
innerObj.printVars();
}
}
这个代码可以编译和运行,并且输出如下结果:
outerStaticVar: 1
outerInstanceVar: 2
innerStaticVar: 3
innerInstanceVar: 4
在这个示例中,我们定义了一个成员内部类InnerClass,它包含一个静态成员innerStaticVar和一个非静态成员innerInstanceVar。在InnerClass中,我们可以访问外部类的静态成员outerStaticVar和非静态成员outerInstanceVar。
由于innerStaticVar是静态的,所以它可以在InnerClass中使用,而不会导致无法确定作用域的问题。但是,如果我们尝试在InnerClass中定义一个静态变量,如下所示:
public class OuterClass {
private int outerInstanceVar = 2;
public class InnerClass {
// 这里会导致编译错误
private static int innerStaticVar = 3;
// 非静态成员
private int innerInstanceVar = 4;
public void printVars() {
System.out.println("outerInstanceVar: " + outerInstanceVar);
System.out.println("innerInstanceVar: " + innerInstanceVar);
}
}
}
则会导致编译错误,提示“非法的修饰符组合:static 和 <变量名>”。