public static String name="007";  你把static去掉

解决方案 »

  1.   

    运行linyuan类的main方法?
    是在执行不同的程序吧,和启动struts无关
    应该不可能执行init()
      

  2.   

    java的类加载器的问题
    public static String name="007";  
    虽然这是static的成员,但是因为(1)tomcat容器启动时加载OnePlugIn类的类加载器
    和你在命令行里运行linyuan类时(2)OnePlugIn类的类加载器不是同一个,
    (1)时的类加载器应该是webappX
    (2)时应该是AppClassLoader
    AppClassLoader是webappX的父类,不能使用子类加载器所加载的东西,所以出现上述结果
    lz可以用getClassLoder()方法打印出来看看。不过你写 
    public class linyuan 来测试似乎没有任何意义啊
      

  3.   

    上面的各位朋友:    OnePlugIn是一个STRUTS插件类,他的生命周期是从TOMCAT启动到TOMCAT关闭.    OnePlugIn.name是一个静态变量,当TOMCAT启动时在控制台输出了"李小龙",说明着个时候name的值已经是"李小龙"了.    然后在TOMCAT启动关闭只前我在其他类中输出OnePlugIn.name,在这里name作为一个静态变量值应该是"李小龙"
    而不是"007",所以我想问一下我什么地方出了错~在这里输出的是"007"?   
        
      

  4.   

    我一直没明白“运行linyuan类的main方法”是如何操作的是在struts中加入代码实现吗
      

  5.   

        1。OnePlugIn是一个STRUTS插件类,他的生命周期是从TOMCAT启动到TOMCAT关闭.     2。OnePlugIn.name是一个静态变量,当TOMCAT启动时在控制台输出了"李小龙",说明着个时候name的值已经是"李小龙"了.     上面说明在内存中存在这个静态变name="李小龙",linyuan类的main方法只是把静态变量name的值显示在控制台。问题就是明明name="李小龙",却在控制台输出了name的初始值!
      

  6.   

    同意三楼的,即使singleton的模式下,不同的类加载器下也会有多个实例
      

  7.   

    这个问题看似简单,实际上还是有点难度的。
    此OnePlugIn非彼OnePlugIn,自然name不同了
    呵呵,我理解楼主的意思,如果想彻底搞明白请你先看一下java的ClassLoder
    再看看tomcat的类加载器体系
      

  8.   

    首先我想知道你是在开了tomcat后,是在非web容器里面执行linyuan 吗?如果是的话,那一定是不对的了,先不说类加载器,你的程序是运行在两个进程里面的.
    两个进程明白吗就是两个jvm,进程间是不能通信的,不是线程!!!
    对于同一个类,由不同的类加载器加载在jvm看来是两个不同的类,这是在同一jvm里面,请楼上不要误导人,楼主似乎是启了两个jvm进程.
      

  9.   

    验证整个道理也很简单在任务管理器里面看有几个javaw就可以了.tomcat是一个,如果按你的想法执行测试程序又起了一个javaw那么你的想法就是大错特错了,为了测试你需要让你的测试线程水sleep下
      

  10.   

    抱歉,lz该开启tomcat后在另外一个命令提示行又执行了linyuan
    是两个进程两个jvm,楼上正解