你的理解是对的,在静态方法中通过实例自身来实现一些封装,这个是没有任何问题的
你错在没有实例自身,你虽然实例化了class Inner,但你并没有实例化class Outer
所以Outer的私有变量i事实上是不存在的,这个时候你调用输出函数打印i自然是不行的
其实不用这么复杂,简化一点看你马上就明白了
-----------------------------------------------------------------------------------------------------------
public class Outer { //这个就是ok的
public int i = 10;
public static void makeInner(){
Outer out = new Outer();
System.out.print(out.i);
}
}
public class Outer { //这个就是错误的,因为没实例化本身,所以i不存在
public int i = 10;
public static void makeInner(){
System.out.print(i);
}
}
你这个问题就在于你的makeInner方法是静态的,他不能调用非静态的内部类,所以你要么把make方法的静态去掉,要么在内部类加上static 但是,如果内部类是静态的,那么,i就会报错,原因也是一样的,就要在全局变量i前面加上static
把public static void makeInner()的 static去掉,
static就是静态的,而 in 不是,所以它提示 '无法再静态上下文中引用非静态变量'
静态不能引用非静态,但是非静态能引用静态