如题,
各位大虾:Java中static修饰的成员变量、方法、对象,执行完后,执行时所占的存储空间会被释放吗?

解决方案 »

  1.   

    不会
    被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
      

  2.   

    不会~!通常,我们创建类时会指出那个类的对象的外观与行为。除非用new创建那个类的一个对象,否则实际上并未得到任何东西。只有执行了new后,才会正式生成数据存储空间,并可使用相应的方法。
    但在两种特殊的情形下,上述方法并不堪用。一种情形是只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象。另一种情形是我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法。为满足这两方面的要求,可使用static(静态)关键字。一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一起。所以尽管从未创建那个类的一个对象,仍能调用一个static方法,或访问一些static数据。而在这之前,对于非static数据和方法,我们必须创建一个对象,并用那个对象访问数据或方法。这是由于非static数据和方法必须知道它们操作的具体对象。当然,在正式使用前,由于static方法不需要创建任何对象,所以它们不可简单地调用其他那些成员,同时不引用一个已命名的对象,从而直接访问非static成员或方法(因为非static成员和方法必须同一个特定的对象关联到一起)。
      

  3.   

    static的东西在类被编译的时候就会加载 不用对象也可调用 始终存在直到整个程序结束
      

  4.   

    不会。
    除非程序使用Runtime.gc()或者是使用super.finalize()的方法,这时所有的对象都被清空。
    另外,程序结束后,JVM也会自动清空所有的对象。
      

  5.   

    lz的问题主要是不明白java得垃圾回收(对象的释放),当垃圾回收的时候,jvm会检查是否有其它引用指向该对象,如果没有的话,才可能被回收,并且你不确定什么时候回收,当内存不够的时候jvm才会回收。
      

  6.   

    非常感谢各位大虾的赐教!!
    小弟 还有一个疑问就是,在JSP的服务器中,被声明为 static 的方法、变量、(不管有多少个客户端访问)在服务器端是不是只有一个实例?还是服务器端为个客户端各生成一个实例?
    小弟现在 也在学JSP,以上这些问题让各位大虾见笑了。
      

  7.   

    当然不会。他会被放在内存的STATIC区域。