try-catch-finally-Problem

saladin100

Mitglied
Servus Folks,

Nachdem ich jetzt kein blassen hab wie es weiter geht, dacht ich, ich meld mich mal hier an und schau ob ihr mir helfen könnt^^.

Ich beschäftige mich gerade mit Exceptions und lese dazu das Kapitel in "Java ist auch eine Insel".
Um mir folgen zu können schaut ihr am besten auch mal rein und zwar hier:

Galileo Computing :: Java ist auch eine Insel – 6 Exceptions

Listing 6.10

Unten drunter heißt es: "Ein zweiter Schönheitsfehler ist der, dass die Variable f nun außerhalb des try-Blocks deklariert werden muss".

Ok versteh ich vollkommen das f raus muss. Aber sobald ich f außerhalb des try-block deklariere... soll ich f wieder in einem try block deklarieren ?!.... Was jetzt?

Gruß saladin100
 
Wo steht, dass f im try-catch-Block deklariert werden soll?
f muss außerhalb deklariert(!= initialisiert) werden, damit es im finally sichtbar ist.
 
Nein, es geht nur um den finally-Block.
f muss da (aber nicht deklariert werden) wieder in ein try-catch-Konstrukt . Und das, meint der Autor, wäre ein Schönheitsfehler.
 
Ok versteh ich vollkommen das f raus muss. Aber sobald ich f außerhalb des try-block deklariere... soll ich f wieder in einem try block deklarieren ?!.... Was jetzt?
Solange die Variable außerhalb des try-catch-Blocks nur deklarierst (wie im Listing 6.10), dann ist doch alles OK - wieso sollst du sie dann wieder in einem try-catch-block deklarieren?
 
Der Konstruktoraufruf muss in einen try-catch Block, die Variable kann aber außerhalb des try-catches deklariert werden

Java:
RandomAccessFile f = null; // deklarieren
try {
    f = new RandomAccessFile(...); // initialisieren
} ...
 
Häh ???:L

Ich weise mal darauf hin, das Unterschiede zwischen Deklaration und Definition gibt.

Java:
RandomAccessFile f = null;
Hier wird f deklariert und definiert, damit f im Scope der Funktion bekannt, aber mit null initialisiert (definiert).
Java:
try
{
  f = new RandomAccessFile( "duke.gif", "r" );
In try-Block wird nun f "richtig" initialisiert (definiert), keine Deklaration mehr, da ja bereits erfolgt. Daher kann im finally-Block weiterhin auf f zugegriffen werden, weil es ja noch in Scope ist.
 

Zurück
Oben