############### 关于java内存中静态区域(static)的问题 ###############(问题解决另100分相送)
假如有一个web容器,当我在这个容器里执行了一个Servlet,而这个Servlet初始 化了一个静态的对象,那么以后我在执行这个servlet的时候,这个静态方法就不用再次初始化了,因为上次执行已经初始化了该静态对象,该静态对象已经常驻内存的静态区域,知道容器关闭为止。
而对于一个Application来说,此时没有容器,只是一个简单的java程序,我同样执行一个java程序,让这个java程序来初始化一个静态对象,同样此时静态对象也会创建于静态区域,但是问题是,当我程序执行结束时候该静态对象也就不存在了,当我再次执行这个java程序的时候,还必须再次创建这个静态对象,也就是说当我执行10次这个java程序的时候,就会创建10次静态对象,但在web容器里却只是创建一次而已,以后就直接利用上次创建的那个就可以了
用代码说明如下:
public class Hello
{
private static String str;
public static void doTest()
{
if(str==null)
{
str = "Hello";
System.out.println("init str......" +str);
}
}
}
如果这段代码运行与web容器内,而且运行10次,那么web容器只会打印出一条"init str......Hello"
而如果只是简单的用jb或是cmd运行这段程序的话,就会打印出来10条语句,
我的问题是web容器是如何实现每次执行的时候都共享静态区域呢,而在Application中又该如何实现象web容器那样共享静态区域呢?也就是说静态对象我只创建一次,以后每次在运行的话,就不在创建了,而是运用以前创建的那个呢?或者谁可以说一下static创建的原理呢?如何才可以共享呢?让静态区域不随着程序运行的结束而消失呢?象web容器那样?