• 从内存细看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所以可以直接调用其的方法。

  • 相关阅读:
    Next Permutation
    Substring with Concatenation of All Words
    Divide Two Integers
    Remove Duplicates from Sorted Array
    3sum closest
    ThreadPoolExecutor参数与拒绝策略
    多线程情况下ArrayList 如何解决线性安全问题
    ArrayList扩容机制jdk1.8
    SpringCloud--工作流程(好文)
    Java面试——TCP与HTTP
  • 原文地址:https://www.cnblogs.com/crazyBugs/p/3619236.html
Copyright © 2020-2023  润新知