java中为什么静态方法里面必须打印静态变量,
静态方法为什么无法打印普通变量
那说明你还是没弄清楚静态和非静态的创建时机,变量有类变量和实例变量,也就是静态变量和非静态变量,类加载的时候就加载类变量也可以说是类自己的变量,而实例变量只有在实例化的时候才被创建,所以在调用静态方法的时候还没有创建实例变量,你怎么能调用实例变量呢
静态方法属于类只能访问静态变量 成员变量属于实例
每个实例变量都有实例成员:
class A
{
public int i;
static void foo()
{
//如果可以访问i,你说到底访问a1的i还是a2的i
}
}
A a1 = new A();
a1.i = 1;
A a2 = new A();
a2.i = 2;
静态方法属于这个类的,在这个类还没有实力化的时候,普通变量才在内存中有直了
所以问题的关键不是能不能访问,而是你必须指定实例,有了实例就可以访问
还是上面的代码
class A
{
public int i;
static public void foo(A instence)
{
println(instence.i); //这样就可以了。
}
}
调用
A a =new A();
A.foo(a);
1.在静态方法中可以访问非静态字段,不过要是要实例化该类,只有实例化后,才会在堆中初始化实例变量
2.静态变量是在类加载时初始化的,而静态方法也是这时加载到方法区,所以编译器允许静态方法访问
静态方法只能访问静态成员