java try exceptând returnarea după try și catch [closed] (Programare, Java, Io)

matt a intrebat.

Am următorul corp de funcție

String f(filename){
   BufferredReader br = null;
   try{..}
   catch(Exception e){
       e.printStackTrace();
   }

}

În interiorul blocului try încerc să deschid fișierul și să fac ceva cu el. La sfârșitul blocului try returnez un șir de caractere. Programul nu se compilează.

Așadar, inițializez o variabilă string înainte de blocul try, manipulez variabila în interiorul blocului try și o returnez după blocul catch. Este acesta un mod corect de a proceda? Întrebarea mea este de ce nu-mi permite compilatorul să returnez direct șirul în interiorul blocului try. try bloc. În plus, am încercat să închid fișierul făcând br.close() după blocul catch și programul nu se compilează, spunând că trebuie să introduc un bloc catch. IOException, așa că a trebuit să închid fișierul în interiorul blocului try.

Este aceasta și modalitatea de a scrie? Să deschid și să închid fișierul atât în interiorul blocului try.

Comentarii

  • Ce te face să crezi că nu permite acest lucru? Ideea este că are nevoie de o declarație de returnare pentru fiecare scenariu posibil. fie asta, fie trebuie să arunci o excepție în blocul catch –  > Por Stultuske.
  • Dacă utilizați java 7+, puteți utiliza blocurile try-with-resource. docs.oracle.com/javase/tutorial/essential/exceptions/… –  > Por Beri.
  • Nu, nu continuă pe linia următoare. Sare la blocul catch. Postați codul real în întrebare. –  > Por Kayaman.
  • Am vrut să spun după ce excepția este prinsă. Se trece la ceea ce este după blocul catch –  > Por matt.
  • Întrebările care solicită ajutor pentru depanare („de ce nu funcționează acest cod?”) trebuie să includă în întrebarea propriu-zisă comportamentul dorit, o problemă sau o eroare specifică și cel mai scurt cod necesar pentru a o reproduce. Întrebările fără o enunțare clară a problemei nu sunt utile pentru ceilalți cititori. A se vedea: Cum să creați un exemplu minim reproductibil. Utilizați linkul „edit” pentru a vă îmbunătăți întrebare – nu adăugați mai multe informații prin intermediul comentariilor. Vă mulțumim! –  > Por GhostCat.
1 răspunsuri
Slava Vedenin

Trebuie să returnați o anumită valoare din funcție în orice caz posibil (sau să aruncați o excepție), deci acest cod nu este compilat:

String f(filename){
   BufferredReader br = null;
   try{
     ...
     return s;
   }
   catch(Exception e){
       e.printStackTrace(); // what is return from function in this case?  
   }
}

Ar trebui să utilizați următorul cod

String f(filename){
   BufferredReader br = null;
   try{
     ...
     return s;
   }
   catch(Exception e){
       e.printStackTrace();
   }
   return null; // or return "";
}

sau

String f(filename){
   BufferredReader br = null;
   try{
     ...
     return s;
   }
   catch(Exception e){
       e.printStackTrace();
       throw new RuntimeException(e);
   }
}

Comentarii

  • Mulțumesc, metoda 2 a fost modul în care am făcut-o. De asemenea, am făcut br.close() în interiorul blocului try. Este aceasta calea de urmat sau construcția închide automat fișierul pentru mine. –  > Por matt.
  • @matt căutați try-with-resources –  > Por Scary Wombat.
  • Știu despre asta, dar este un pic prea complicat și nu doresc să îl implementez deocamdată. Aș vrea să știu dacă ar trebui să fac br.close() în interiorul blocului try. Din moment ce nu am putut să o fac după blocul catch. –  > Por matt.

Tags:,