从内存细看static

我们知道,当创建一个类时,就是对那个类的外观以及行为进行实例化,在执行New来创建的时候,就会分配一个数据存储空间。

但是,考虑到这两种情形时,以上的所说的分配的空间就是不满足,因为这空间是一对一映射的。第一种情形是,只想为某个特定域分配单一存储空间,不想创建多个对象,甚至,不用创建一个对象。还有一种情形是,希望某个方法不与它的类人和对象关联在一起,换一句老土的话来讲,就是几十没有创建对象,也能调用这个方法。

通过static可以满足我们的需求,当声明了一个事物是static时,就意味着,这个属性、域或者方法不会与包含他的那个类的任何对象实例关联在一起了。所以,即使为创建某个类的任何对象,也能调用其static方法或访问其static域。

案例分析

实例1.

Class StaticTest{

  static int i = 47 ;

}

StaticTest st1 = new StaticTest();

StaticTest st2 = new StaticTest();

虽然创建了两个StaticTest对象,StaticTest.i只会拥有一份存储空间,所以这两个对象共享同一个i。所以这st1.i和st2.i指向同一存储空间,因此他们具有相同的值47。如果 StaticTest.i++他们的值也会随之变化。

实例2.

System.out.println("helloword");

这个输出语句肯定常用,但是有人探究过没,System.out这个是静态类,是PrintStream类。由于不需要New所以可以直接调用其的方法。

原文地址:https://www.cnblogs.com/crazyBugs/p/3619236.html