当一个对象的某个属性值低于某个固定的值时,那么这个对象就应该"死"了,不知道如何实现,我直接this = null, 提示错误:can not assign a vaule to a final variable this ,请问应该如何写程序,让这个对象"死"了呢

解决方案 »

  1.   

    一个对象是不可以让自己死掉的, 不过不知道 , Reference 可不可以让持有它的句柄的对象 帮它 达到同样的作用? 等高手解答。
      

  2.   

    当然是不能够让自己死掉了你如果把它仅仅放在Collection类及其子类里
    你可以直接删除,这样没有了对象的引用,它就会被回收
      

  3.   

    在方法里面new不就可以了么!
      

  4.   

    java的gc会自己处理的,单并不一定是在你说的条件下啊。
      

  5.   

    对阿,垃圾回收是java自己处理的,那我怎么弄啊
      

  6.   

    看来 ,你只有把这些 需要同样处理的对象 都自己管理, 比如上面说的 ,自己写个类,里面包括一个集合, 虫子都只会在这个集合里,然后用一个 Daemon 线程, 每隔一段时间扫描一下集合, 看看是不是有 “虫子” 该死,该死的 虫子 从集合里去掉。当然,为安全起见, 所有 与 虫子的 “接洽” 都有应该由这个集合来牵线。
    abstract class Worm{
      private int power;
      private final Collection nest;  protected Worm(int power,Collection nest){
        if( power <= 0) 
            throw new IllegalArgumentException(" Why i'm about to die just after boring ? ");    this.power = power;
      
       try{
         nest.add(this);
       }catch(UnsupportedOperationException e){ // maybe not modifiable collection.
             throw new IllegalArgumentException (" Please give a house .");
       }    }
      public  void move(){
        if( power ==0 ) 
             throw new IllegalStateException(" I'm dead , let me sleep. ");
        power --;
        System.out.println(" moved .");    if( power == 0 )
           nest.remove(this);
      }
      
      int getPower(){return power;}   public boolean isAlive(){
         return power > 0;
      }
    }class WormNest{
       private final HashSet worms = new HashSet();   public Worm createWorm(int power){
         Worm w = new Worm(power,this){ };
       }   public Set getWorms(){ return worms; }}
      

  7.   

    哦, 这里创建方法还要改下:不能用 HashSet , 应该用 HashMap 然后给每个虫子一个名字,如果你要找虫子就必须用 名字, WormNest 不应该返回一个 Worm 对象的句柄给你, 这样不安全,可能你保留句柄的时间过长, 导致 上面的 I'm dead 异常,
    只能  wormNest.moveWorm('wormA') ; 这样让 wormNest 管理虫子.abstract class Worm{
      private int power;
      private final String name;
      private final HashMap nest;  protected Worm(int power,HashMap nest){
        if( power <= 0) 
            throw new IllegalArgumentException(" Why i'm about to die just after boring ? ");    this.power = power;
      
        if( nest.containsKey(name) 
           throw new IllegalArgumentException(" My brother has already this name, please give me another name ! ");
       try{
         nest.put(name,this);
       }catch(UnsupportedOperationException e){ // maybe not modifiable collection.
             throw new IllegalArgumentException (" Please give a house .");
       }    }
      public  void move(){
        if( power ==0 ) 
             throw new IllegalStateException(" I'm dead , let me sleep. ");
        power --;
        System.out.println(" moved .");    if( power == 0 )
           nest.remove(this);
      }
      
      int getPower(){return power;}   public boolean isAlive(){
         return power > 0;
      }
    }class WormNest{
       private final HashSet worms = new HashSet();   public Worm createWorm(String name,int power){
         Worm w = new Worm(name ,power,this){ };
       }
       public void moveWorm(String name){
        Worm w =  worms.get(name);
        if( w == null) throw new IllegalArgumentException(name+" not found or already dead ");     w.move();
       }
    }
      

  8.   

    class worm(){
        private int blood;    public void die(){
            ...
        }
        
        public int getBlood(){
            return blood;
        }    public static void main(String[] args){
            Worm w = new Worm();
            if(w.getBlood() == 0){
                w.die();
            }
        }
    }
      

  9.   

    对象"死"掉啊, 因为定义了好多虫子,用组表示,比如INSECT[5]能量值到了底线了,那么就应该"死"了,其他的虫子还是好好的。
      

  10.   

    public void die(){
            ...
        }
    里面可做一些资源释放的动作。        if(w.getBlood() == 0){
                w.die();
                w = null;//这里赋null应是可以的。
            }
      

  11.   

    转载:Web制作一些面向对象的语言需要你掌握你产生的所有对象的踪迹而且当他们不再需要的时候,你能清除他们。直接管理内存是费力的和不好的做法。Java平台充许你清除不再需要的对象而释放资源。这个过程称为garbage collection(无用存储单元的收集)。 
      当一个对象不在被引用时,它符合garbage collection。通常,通过变量引用一个对象,当变量离开作用域的时候,便被撤消,也就不再引用这个对象。或者,你能通过设置引用对象的变量值为特殊的空值(NULL)而停止引用一个对象。一个程序能多次引用同一个对象。  无用单元收集方法  Java运行环境有一个无用单元收集方法以定期释放那些不再被引用的对象。无用单元收集方法自动完成,虽然,有些情况你可能通过调用System类的gc方法运行这个方法。例如,你可以想在产生大量的无用单元代码后或者需要许多存储代码区前运行无用单元收集方法。  Finalization  在一个对象获得无用单元收集前,无用单元收集程序给对象一个调用它自己的finalize方法的机会。这一个方法即是 finalization。  大多数程序员不必编写finalize方法。但有时候,一个程序员必须实现finalize方法释放资源,例如native peers,就不在无用单元收集程序的控制下。  这个finalize方法是Object类成员,Object类是Java平台的顶层类,是所有类的超类。一个类能忽略finalize 方法执行任何类型对象所必须的finalization(调用它自己的finalize方法)。如果你忽略finalize(不在程序代码中出现)和finalization,当执行完JAVA程序时将自动调用super.finalize方法释放对象资源。
      

  12.   

    GC是什么? 为什么要有GC? (基础)。 
    GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
    要请求垃圾收集,可以调用下面的方法之一: 
    System.gc() 
    Runtime.getRuntime().gc()