Announcement

Collapse
No announcement yet.

finalize() ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • finalize() ?

    Also ich bin jetzt gerade bei der fiinalsierung angekommen, und möchte das jetzt auch mal ausprobieren, aber es will einfach nicht gehen.
    So schaut meine finalizemethode aus:

    protected void finalize()
    {
    super.finalize();
    System.out.println(" Ich bin die \" Finalisierung\" ");
    }

    Das Problem liegt in der Zeile mit dem super.finalize();
    Da sagt mein Compiler folgendes:
    Class.java [51:1] unreported exception java.lang.Throwable; must be caught or declared to be thrown
    super.finalize();
    ^
    1 error
    Errors compiling class TestThis.

    ich will das mit dem super.finalize ja nicht weglassen, da in dem buch mit dem ich java lernen will, drin stht das man das unbedingt aufrufen soll.
    und ohne das super.finalize fuktioniert es auch.

    danke für die Hilfe schon mal

  • #2
    Du
    musst entweder Throwable fangen oder weiterwerfen

    Comment


    • #3
      danke für die schnelle Antwort, aber was heißt Throwable fangen oder weiterwerfen. Das mit dem fangen habe ich schon mal bei Exeptions gelesen, hat das was damit zu tun??

      Comment


      • #4
        Weiterwerfen macht man in dem man das throws Schlüsselwort und die betreffenden Exceptions hinter den Methodennamen schreibt Beispiel:<br>

        <pre>
        class Simple
        {
        protected void finalize()throws Throwable

        {
        super.finalize();
        }

        }
        </pre>

        Ausserdem kannst du den Aufruf super.finalize()durchaus weglassen wenn deine Klasse vonn Object erbt, da dort die Methode leer implementiert ist.

        Falls in deinem Buch drinsteht dass man diese Methode zum freigeben von Ressourcen - etwa Datenbankverbindungen, Sockets, oder Datenströme - benutzen kann, geht das zwar aber das ist denkbar schlecht. Diese Methode wird vom Garbage Collector aufgerufen wenn dieser das Objekt aus dem Speicher entfernen will. Wann und ob aber dieser Zeitpunkt eintritt kann man nicht vorhersagen.

        Meiner Meinung nach kannst du dir finalize schenken.

        Thoma

        Comment


        • #5
          Nochmal danke für die schnelle Antwort. Das mit dem mehr oder minder zufälligen Aufrufen der finalize Methode steht schon drin, aber es steht auch drin, dass wenn man die übergeordneten finals nicht aufruft, dass das durchaus zu Speicherengpässen führen kann. Trotzdem nochmal danke für deine Hilfe

          Comment


          • #6
            Hallo Michael!

            Es ist zwar lobenswert, wenn man sich direkt beim Java-Lernen über den Speicher den Kopf zerbricht, aber die leichteste Methode, den Speicher aufzuräumen, ist ab und an den Befehl System.gc() zustarten, der regt den sogenannten Garbage Collector an, dieser wiederum räumt den Speicher automatisch leer.

            Man kann ihm dabei noch unter die Arme greifen, indem man alle nicht mehr benötigten Variablen den Wert null zuweist. Das funktioniert allerdings nicht mit Datentypen wie int, double, float, byte und so.

            smal

            Comment

            Working...
            X