为什么这段代码不起作用
public class BB
{
private class A
{
private int x;
}
public static void main(String[] args)
{
A a = new A();
a.x = 100;
System.out.println(a.x);
}
}
这段代码有效吗?
public class BB
{
private class A
{
private int x;
}
static int y = 3;
public static void main(String[] args)
{
BB b = new BB();
b.compile();
System.out.println("y = "+ y);
}
public void compile()
{
A a = new A();
a.x = 100;
System.out.println(a.x);
System.out.println("y = "+ y);
}
}
在第一个代码中,当我试图通过内部类'a'的对象引用内部类'A'的实例变量'x'时,我收到一条错误,说我在静态中使用内部类上下文。 在其他方法中执行相同操作时没有错误。
答案 0 :(得分:10)
您的错误与字段访问无关。此行的编译失败:
A a = new A();
原因:如果没有封闭实例,则无法实例化内部类,这正是该行代码尝试执行的操作。你可以改写
A a = (new BB()).new A();
将提供内联的封闭实例。然后你也可以访问私人领域。
或者,只需创建A
类static
,这意味着它没有封闭的实例。
答案 1 :(得分:0)
私有类A就像一个实例成员,我们不能在不创建其对象的情况下在静态方法中使用实例成员。所以首先我们需要外部类的对象,而不是使用实例内部类。以下代码工作正常。
BB级 { 私人班级A. { private int x; }public static void main(String[] args)
{
BB bb = new BB();
BB.A a = bb.new A();
a.x = 100;
System.out.println(a.x);
}
}