Compiler-Fehler unreachable statement

  • Themenstarter Themenstarter Pierre
  • Beginndatum Beginndatum
P

Pierre

Gast
Hallo,

Da ich noch nicht viel über die Java-Programmierung kenne, würde ich gerne eine Frage stellen.
Im folgenden Code sollte normaler weise am Schluss vor dem catch block " temp_in.close(); " stehen, ohne diesen funktionierts, mit der Anweisung aber nicht, woran könnte das liegen?

Java:
import java.io.*;
public class read_celsius
{
  public static void main(String[] args)
{
     double temp;
     try
{
         // Streams fuer AUsgabe in Datei erzeugen
         FileInputStream temp_dat = new FileInputStream ("temp.dat");
         DataInputStream temp_in = new DataInputStream(temp_dat);
         while (true)
{
            temp = temp_in.readDouble() + 273.15;
            System.out.println(temp+" Grad Kelvin");
}
         
}
     catch (EOFException ende)
{
         System.out.println("Das war's!");
}
     catch (IOException e)
{
         e.printStackTrace();
}
}
}


Mit code bekomme ich diese Fehlermeldung.

Java:
C:\Streams>javac read_celsius.java
read_celsius.java:18: unreachable statement
         temp_in.close();
         ^
1 error

Vielen Dank
P.
 
Java:
import java.io.*;
public class read_celsius
{
  public static void main(String[] args)
{
     double temp;
     try
{
         // Streams fuer AUsgabe in Datei erzeugen
         FileInputStream temp_dat = new FileInputStream ("temp.dat");
         DataInputStream temp_in = new DataInputStream(temp_dat);
         while (true)
{
            temp = temp_in.readDouble() + 273.15;
            System.out.println(temp+" Grad Kelvin");
}
         
}
     catch (EOFException ende)
{
         System.out.println("Das war's!");
}
     catch (IOException e)
{
         e.printStackTrace();
}
}
}
Gewöhn dir bitte mal div. Conventions an :noe:

Leider ging nicht eindeutig aus deinem Schnipsel hervor, wo das close stehen soll. Ich vermute mal so?

Java:
try {
  ...  
  while (true) {
    temp = temp_in.readDouble() + 273.15;
    System.out.println(temp+" Grad Kelvin");
  }
  temp_in.close();
}
catch ...

Das ist logisch, dass er hier den Fehler wirft.
Es liegt an der Schleife. Die wird immer ausgeführt ([c]while (true)[/c]) und deswegen kommt er von sich ohnehin nicht aus der Schleife raus, um den Stream zu schließen ([c]unreachable code[/c]). Außerdem sind Endlosschleifen kein guter Stil (irgendwann musst du da ja wieder raus).

Ich weiß nicht ob das deinem Problem hilft, aber du könntest es in einen [c]finally[/c] Block setzen:

Java:
try {
  ...  
  while (true) {
    temp = temp_in.readDouble() + 273.15;
    System.out.println(temp+" Grad Kelvin");
  }
}
catch ...
catch ...
finally {
  temp_in.close();
}
 
Danke für die Antwort, mit finally hab ich's probiert, funktioniert aber nicht.
Die stelle an der du close() vermutet hast, stimmt. Der code funktioniert auch ohne dieses close(), da es ja die exception gibt.
Die Frage war eigentlich weil in der Übung dieses close() mit im code war. Im code von Datendatei-schreiben war ein close() auch drin, und es funktioniert mit oder ohne. Also schon gut, belassens wir hier.

Vielen Dank
P.
 
close() macht in diesem Beispiel kein Sinn. Etweder fliegt beim Erstellen des Streams eine Exception, dann gibt es auch nicht, was man schließen könnte, oder es kommt zu einer Endlosschleife und man kommt die dazu etwas schließen zu könne.

Nachtrag: Man sollte vllt erst nachdenken 😳 readDouble schmeißt ja auch eine Exception...
 
Zuletzt bearbeitet:

Zurück
Oben