Variable in try/catch

cybermog

Aktives Mitglied
Was ist daran falsch ?

Java:
try { 
BufferedWriter writeLog = new BufferedWriter(
                                   new OutputStreamWriter(
                                   new FileOutputStream( "errorlog.txt" ) ) );
... }
catch( FileNotFoundException ex ) {
          writeLog.write( "File not found." );
          }
Fehlermeldung: cannot fild variable writeLog.
 
Zuletzt bearbeitet von einem Moderator:
schau dir an, wann wo welche Variable sichtbar ist
Java:
public class Test {
    public static void main(String[] args)  {
        System.out.println(x);
        System.out.println(y);
        int x = 0;
        System.out.println(x);
        System.out.println(y);
        try   {
            int y = 0;
            System.out.println(x);
            System.out.println(y);
        }    catch (Exception e)    {
            System.out.println(x);
            System.out.println(y);
        }
        System.out.println(x);
        System.out.println(y);
    }
}
 
Java:
BufferedWriter writeLog = null;
try { 
writeLog = new BufferedWriter(
                                   new OutputStreamWriter(
                                   new FileOutputStream( "errorlog.txt" ) ) );
... }
catch( FileNotFoundException ex ) {
          writeLog.write( "File not found." );
}

Variablen gelten immer nur INNERHALB eines Blocks (Block beginnt mit { und endet mit } ).


Außerdem macht das ganze keinen Sinnn was du da machst.
Wenn beim initialisieren von writeLog ein Fehler passiert, willst du diesen über writeLog ausgeben?!
Da wird er dir gleich wieder ne Exception schmeißen...
 
Moin,

Was ist daran falsch ?
Java:
try { 
BufferedWriter writeLog = new BufferedWriter(
                                   new OutputStreamWriter(
                                   new FileOutputStream( "errorlog.txt" ) ) );
... }
catch( FileNotFoundException ex ) {
          writeLog.write( "File not found." );
          }
Fehlermeldung: cannot fild variable writeLog

mal so ins Blaue geschossen könnte ich mir vorstellen, dass durch die auftretende Exception Deine Variable "writeLog" gar nicht erst erzeugt wurde ....
Gibt mal im catch stattdessen den StackTrace aus!

Gruß
Klaus

[EDIT]
oh, zu spät :shock:
Und der Aldimann hat zu dem Recht, was die Gültigkeit angeht ....
Gruß vom Lidlmann :lol:
[/EDIT]
 
Am besten einfach gleich log4j nutzen, in der Klasse den logger als static final Variable anlegen und dann durchgehend nutzen.

Java:
public class Test{

  private static final Logger LOGGER = Logger.GetLogger(Test.class);

  public void doSomething(){

     LOGGER.info("doing something");
  }
}

eine Art Logger selber zu machen ist reine Zeitverschwendung und man muss sich da mit allerlei Sachen befassen die einem von einer fetigen lib abgenommen wird.
 
Zuletzt bearbeitet von einem Moderator:
Noctarius hat gesagt.:
ähm nein, die Variable ist schlicht nicht sichtbar und der Code macht auch keinen Sinn.
Selbst wenn man es zum Kompilieren bekommt, möchte ich auf Noctarius' Hinweis hinweisen 😉
Aber ich denke es kommt dann ein "may not be initialized"...
 
Selbst wenn man es zum Kompilieren bekommt, möchte ich auf Noctarius' Hinweis hinweisen 😉
Aber ich denke es kommt dann ein "may not be initialized"...

Bei

Java:
BufferedWriter writeLog = null;
try { 
BufferedWriter writeLog = new BufferedWriter(
                                   new OutputStreamWriter(
                                   new FileOutputStream( "errorlog.txt" ) ) );
... }
catch( FileNotFoundException ex ) {
          writeLog.write( "File not found." );
          }

nicht. Aber wenn z.B. das [c]new FileOutputStream( "errorlog.txt" )[/c] eine FileNotFoundException wirft würde die Zeile [c]writeLog.write( "File not found." );[/c] eine NullPointerException auslösen.
 
Bei

Java:
BufferedWriter writeLog = null;
try { 
BufferedWriter writeLog = new BufferedWriter(
                                   new OutputStreamWriter(
                                   new FileOutputStream( "errorlog.txt" ) ) );
... }
catch( FileNotFoundException ex ) {
          writeLog.write( "File not found." );
          }

nicht. Aber wenn z.B. das [c]new FileOutputStream( "errorlog.txt" )[/c] eine FileNotFoundException wirft würde die Zeile [c]writeLog.write( "File not found." );[/c] eine NullPointerException auslösen.

Jopp aber das ist auch etwas anderes, selbst wenn kein FileNotFoundException geschmissen wird wirst du einen NullPointerException bekommen. Die innere Variable writeLog shadowed nämlich die äußere. Das heißt sobald du den try/catch verlässt ist diese Instanz weg und es fliegt auch ein NPE.
 

Neue Themen


Zurück
Oben