Funkcja Dispose

0

Funkcje dispose() używamy w szczególnym przypadkach, kiedy chcemy posprzątać po nie typowych rzeczach wykonanych przez nasz obiekt. Np zamknięcie portu lub pliku. Wszystkie operacje nie związane z pamięcią.

Czy funkcja dispose uruchamia GC dla tego konkretnego obiektu na rzecz którego została wywołana??
Czy funkcja dispose ma jeszcze jakieś inne ukryte własności?

Pozdrawiam

0

Jeśli zostanie wywołana na rzecz jedynego wyświetlanego okna, to kończy wykonywanie programu.

0

Ale mi chodzi o obiekty.

Przykład

 
package chapter74;

class Shape {
    Shape(int i) 
    {
        System.out.println("Konsruktor Shape");
    } 
    void dispose() 
    {
        System.out.println("usowanie Shape");
    } 
}


class Circle extends Shape {
    Circle(int i) 
    {
        super(i);
        System.out.println("Konsruktor Circle");
    } 
    @Override
    void dispose() 
    {
        System.out.println("usowanie circle");
    } 
}

class Triangle extends Shape {
    Triangle(int i) 
    {
        super(i);
        System.out.println("Konsruktor Triangle");
    } 
    void dispose() 
    {
        System.out.println("usowanie Triangle");
    } 
}

class Line extends Shape {
  private int start, end;
  Line(int start, int end)
  {
      super(start);
      this.start = start;
      this.end = end;
      System.out.println("Konstruktor Rysowanie lini");
  }
  void dispose()
  {
      System.out.println("usowanie Triangle");
      super.dispose();
  }
}

public class Main extends Shape {
private Circle c;
private Triangle t;
private Line[] lines = new Line[3];
    public Main(int i)
    {
        super(i);
        for(int j = 0; j < lines.length; ++j)
        {
            lines[j] = new Line(j, j*j);
        }
        c = new Circle(3);
        t = new Triangle(4);
        System.out.println("Konstruktor main");
    }
    public void dispose()
    {
        t.dispose();
        c.dispose();
        for(int w = lines.length; w >= 0 ; --w)
        {
            lines[w].dispose();
            super.dispose();
        }
    }
    public static void main(String[] args) 
    {
        Main obj = new Main(44);
        try 
        { 
            
        } 
        finally 
        { 
           obj.dispose();
        }
    }
 }

0

Nie pomyliłeś dispose() z finalize()? W każdym razie, tak czy tak jest to zwykła metoda i nie uruchamia żadnego GC, bo to działa odwrotnie: GC wywołuje finalize() na niszczonych obiektach. I raczej nie ma powodu wywoływać tej metody samemu.
Aha, no i finalize() to nie destruktor, nie niszczy obiektu i z reguły nie powinno się na tym polegać: http://google.pl/search?q=java+don't+use+finalize

0

to wreszcie do czego służy ??? bo już się pogubiłem :(

0

Napisana przez Ciebie metoda dispose() nie ma żadnego specjalnego znaczenia, równie dobrze może się nazywać d*pa(). Istniejące w standardowej bibliotece Javy metody o nazwie dispose() mogą mieć specjalne znaczenie (o jednym Ci napisałem w poprzednim poście).

1 użytkowników online, w tym zalogowanych: 0, gości: 1