public class Test{
public static int a = 2;
public int b = 3;
public static void main(String[] args)
{
Test t = new Test();
t = null; // t指向null 这里将变量t不指向任何对象
System.out.println(t.a);// 值为2 因为a是类的静态变量,而不是实例成员变量
System.out.println(t.b);// 这个就不行?
/*解释:根据静态成员不能访问非静态成员的规则,所以静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。
即使静态内部类的实例方法不能外部类的实例成员,只能访问外部类的静态成员,因为t=null,将对对象引用设置为空(null)。因为,b=3属于实例对象的成员变量,所以不能指向为3。System.out.println(t.a);是因为a是类的静态成员变量,有没有实例对象依然存在
举例:
//静态内部类
public class A{
private String name="abc";
private Static String color="yellow"
staic class b{
//静态内部类可以包含静态成员
private static int age;
public void c{
//下面代码出错,静态内部类无法访问外部类的实例成员
System.out.println(name);
//下面正确
System.out.printn(color);
}
}
}
*/
//对象t(被null) 访问Test类中的 成员变量和静态变量 发生了什么情况?
//因为t=null,将对对象引用设置为空(null)。因为,b=3属于实例对象的成员变量,所以不能指向为3。System.out.println(t.a);是因为a是类的静态成员变量,有没有实例对象依然存在
}
}
|