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()也不是静态方法,
为什么不报错?求解
{
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()也不是静态方法,
为什么不报错?求解
静态属性在静态方法中可以使用,非静态属性不能在静态方法中使用。把对象的非属性赋给静态属性也是可以的,因为对象是存在内存中的,不会有错。如果改为
A.j = A.f().i;
那么j也可以不是static
A就是局部变量,所以A.f()可以用。但是直接写f()就不行了。
你在static方法里访问的难道不应该是static变量吗....
这和你的i是什么变量有什么关系嘛...
b myb = A.f();
b.i;
实际上访问的是实例b中的i变量,已经不是静态访问了
而j=A.f().i; 这个,如果j没有声明static,那么你觉得这个j改动的是哪个对象中的j值呢?