zoukankan      html  css  js  c++  java
  • 从内存细看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所以可以直接调用其的方法。

  • 相关阅读:
    C++ map详解
    C++ vector和list的区别
    C++静态存储,动态存储
    C++文件输入和输出
    C/C++数组名与指针的区别详解
    C++运算符重载详解
    poj3177Redundant Paths tarjan缩点
    C++编译过程与内存空间
    [JAVA · 0基础]:19.容器类
    FFmpeg总结(六)AV系列结构体之AVPacket
  • 原文地址:https://www.cnblogs.com/crazyBugs/p/3619236.html
Copyright © 2011-2022 走看看