public class a
{
    public class b
    {
    private int i=10;
    }
    b f(){return new b();}
    public static void main(String[] args)
    {
a A=new a();
j=A.f().i;
System.out.println(A.f().i);
    }
    private static int j=100;
}
如果不把j 声明为STATIC 则报错静态上下文不能引用非静态变量,但是A.f().i难道就是静态变量?f()也不是静态方法,
为什么不报错?求解

解决方案 »

  1.   


    静态属性在静态方法中可以使用,非静态属性不能在静态方法中使用。把对象的非属性赋给静态属性也是可以的,因为对象是存在内存中的,不会有错。如果改为
    A.j = A.f().i;
    那么j也可以不是static
      

  2.   

    静态方法中除了能静态成员外,还能用方法内定义的局部变量。
    A就是局部变量,所以A.f()可以用。但是直接写f()就不行了。
      

  3.   

    main函数是static的....
    你在static方法里访问的难道不应该是static变量吗....
    这和你的i是什么变量有什么关系嘛...
      

  4.   

    A.f().i 这样当然不报错,这个等同于
    b myb = A.f();
    b.i;
    实际上访问的是实例b中的i变量,已经不是静态访问了
    而j=A.f().i; 这个,如果j没有声明static,那么你觉得这个j改动的是哪个对象中的j值呢?