public XX extends Action
{
   List list=new ArrayList();
   public void fun();
   public void fun1();
}
我知道 全局的list 在调用 action类的时候不管用没用到 都会在内存中创建个地址 
在调用了 fun()  会给list指向一个空间(我不知道说'指向空间'用词是否正确!呵呵) 当方法结束后 list 还会指向那个空间么? 这个地址会销毁么?还是依然存在内存中并指向之前的那个空间? 
如果给 list 加上 set get 方法 时候set 或get 方法 和直接时候list赋值有什么区别么?

解决方案 »

  1.   

    说实在的,你的问题问的让人摸不着头脑
    你的xx类实例化之后,就会有一个list对象同时被创建
    list的生命周期跟xx类的对象一致,就是说,只要XX类的对象还在,list里面的东西就会一直保存在内存
    get set方法是提供给外部操作list的方法,list最好定义成private
      

  2.   

    "在调用了 fun()  会给list指向一个空间" ,不是在调用了fun()时给list分配内存的,你调用fun()方法,首先必须先创建你的这个类的实例,创建实例时就在内存中给list分配了空间。调用fun(),该方法结束和list在内存中的指向没有关系,除非你在fun()方法中操作了list,改变了list的指向。
    给list加上get,set方法和直接赋值没有区别,只是你的list是默认的包级访问,只能在同一包内才能访问到这个类的list。
    如果你加了get,set方法,而且方法的修饰符为public的话,就没有访问的限制,哪里都可以访问到。说的不正确的地方请楼下的指正,谢谢。
      

  3.   

    哪儿来的全局list?只是个属性而已,普通属性的周期同对象一致,static属性的周期则同类一致。
      

  4.   


    如果我在方法中改变了list的引用,或者把null给list,list在内存中还是可以改变的吧。
      

  5.   

    恩对啊. 调用的xxx.do 然后就有struts处理返回到jsp 返回到jsp xx类的对象还在不在了?不在了的话什么时候销毁的?
      

  6.   

    我的意思就是fun()中会给list分配空间.当fun()结束返回jsp 页面的时候 list 所指向的空间会不会被释放?
      

  7.   

    public XX extends Action 

      List list=new ArrayList(); // 这个list 不叫全局变量么? 还是java中没有全局变量这一说 学名叫属性啊?
      public void fun(); 
      public void fun1(); 

      

  8.   

    在action中应该用另外一个jspList来保存action中的list,然后在jsp中操作的应该是jspList,fun()结束后,如果action在内存中没有了,action中的list当然也没有了。
      

  9.   

    java经过类的封装,己经没有全局变量一说,list在类加载时会在内存划一块空间给它,但要明白,它是一个List 类型的引用,引用了一个ArrayList类型的对象(我们只能通过引用来操作对象)如果你在以后任何一个方法里,对引用list 进行赋值操作(赋了其它值,如null),那它原来所引用的对象就和引用list没有关系了如果那个对象没有被其它引用所引用,那么这个对象就等待被销毁了
      

  10.   


    别的先不提阿
    先说说你的代码的含义吧public XX extends Action 这一句,乍一看,好像是个方法,
    其实不对,方法中怎莫能出现extends关键字呢如果说是类,怎莫没有class关键字呢
      

  11.   

    貌似java里面没有什么全局变量的吧
      

  12.   

    4楼正解
    因为对象还存在,所以LIST还没释放。当对象不存在了,该LIST就释放了
      

  13.   

    4楼正解
    因为对象还存在,所以LIST还没释放。当对象不存在了,该LIST就释放了
      

  14.   

    会被释放的,但是假如你在jsp上用了jstl,那就要小心点,jstl有可能会不释放,需要手工释放。