Hirdetés

Új hozzászólás Aktív témák

  • Mr K
    őstag

    SajatClass sajat = new SajatClass();
    try {
    sajat.futtat();
    } finally {
    sajat.ment();
    }

    Ha kivétel történik a futtás során, a mentés akkor is megtörténik. Ez inkább javallott, mint a finalize() funkció használata. Vagy akár a sima metódus szekvencia. Mondjuk ha hiba esetén mégsem szeretnél menteni, akkor felejtsd el, amit írtam, arra tényleg jó a szekvencia.

    Neked nem kell kézzel semmit sem takarítani, a garbage collector majd teszi a dolgát, nincs destruktor. De ezt már írták. :)

    A finalize általában nem fog működni:
    public class T {
      static void p(String msg) { System.out.print(msg); }
      public static void main(String[] args) {
      p("started"); T t = new T(); t = null; p(" finished");
      }
      private T() { p(" constructed"); }
      @Override protected void finalize() { p(" finalized"); }
    }

    (Kimenet: started constructed finished)

    Ha a teszt JVM-emen beszúrok egy GC-t, akkor javul a helyzet:
        p("started"); T t = new T(); t = null; System.gc(); p(" finished");
    (Kimenet: started constructed finished finalized)

    De azon túl, hogy egy normális programot nyilván nem lehet telehinteni GC hívásokkal, az egész viselkedés még a garbage collector implementációjától is függ, szóval a finalize egyáltalán nem megoldás a problémára.

Új hozzászólás Aktív témák