• 中文
    • English
  • 注册
  • 查看作者
  • 为什么创建一个类的多个对象,这个类的static域却只有一个实例

    当声明一个方法或者域是static时(Java中的域说的就是类的成员变量)

    就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起

    所以就算没有创建这个类的任何对象,也可以调用其static方法或访问其static域,所以我们可以用类名来直接引用

    下面我们来举例说明静态成员变量独立于对象存在,加深我们对static有关知识的理解:

    首先我们创建两个StaticDemo对象,分别是s1和s2,

    但是我们执行s1.i++后,s1.i的的值和s2.i值都发生了变化,

    因为我们即使创建了两个StaticDemo对象,但是Static.i也只有一份存储空间,(非静态字段则是每个对象有一个存储空间)

    这两个对象共享同一个i,也就说,s1.i和s2.i指向同一存储空间,所以改变了s1.i的值,s2.i的值也会随着改变

    (这里永远要记住一点:静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问)

    package tv.zhangjia.test8;
    public class StaticDemo {
    	static int i = 47;
    	public static void main(String [] args) {
    		StaticDemo s1 = new StaticDemo();//创建第一个StaticDemo对象
    		StaticDemo s2 = new StaticDemo();//创建第二个StaticDemo对象
    		System.out.println(s1.i + " == " + s2.i);//输出47 == 47
    		s1.i++;//改变第一个StaticDemo对象的值
    		System.out.println(s1.i + " == " + s2.i);//输出48 == 48
    	}
    }
    
    输出:
    47 == 47
    48 == 48

  • 0
  • 0
  • 0
  • 2.7k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: