实验代码
class User{
private String a ="a";
private static String b = "b";
public static void main(String[] args){
User user1 = new User();
user1.b = "a1";
System.out.println(User.b.toString());
User user2 = new User();
user2.b = "a2";
System.out.println(User.b.toString());
User user3 = new User();
user3.b = "a3";
System.out.println(User.b.toString());
User.b = "a4";
System.out.println(user1.b.toString());
System.out.println(user2.b.toString());
System.out.println(user3.b.toString());
System.out.println(User.b.toString());
}
}
调试论证法:
你可以看到user1,user2,user3在调式窗口中可以看到a变量,没有看到b变量。说明a在每个对象中,b不在。
你可以看到user1.a,user2.a,user3.a是不一样的,user1.b,user2.b,user3.b,User.b的id都是一样的。说明每个对象的a变量都是单独的,b变量是所有对象共享的。
输出验证法:
通过输出我们就知道对象名.静态变量名
或类名.静态变量名
都可以直接访问。最后输出的值一样,说明它们指向了同一个对象。
总结
(1) 普通变量都是存在于对象的内存块中。
(2)java当中静态变量单独在一个内存区域,而不是在每个实例化对象当中。每个实例化后的对象都共享这个变量。可以通过对象名.静态变量名
或类名.静态变量名
两种方式进行访问。
注意:
静态变量是private,public,protec其实都是可以直接使用对象名.静态变量名
或类名.静态变量名
直接访问。
我的博客地址: http://gv7.me