Bu eğitimde, örnekler yardımıyla Java'daki try catch deyimini öğreneceğiz.
try… catch
Java blok kolu özel durumlar için kullanılan program ve anormal sonlandırma önler.
İşte try… catch
Java'daki bir bloğun sözdizimi .
try( // code ) catch(exception) ( // code )
try
Blok bir istisna oluşturabilir kodunu içerir.
catch
Blok içindeki bir istisna var oluştuğunda yürütülür kodu try
blok.
Örnek: Java try… catch bloğu
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Çıktı
ArithmeticException => / sıfıra göre
Yukarıdaki örnekte, satıra dikkat edin,
int divideByZero = 5 / 0;
Burada bir sayıyı sıfıra bölmeye çalışıyoruz . Bu durumda bir istisna oluşur. Bu nedenle, bu kodu try
bloğun içine ekledik.
Program bu kodla karşılaştığında ArithmeticException
oluşur. Ve istisna, catch
blok tarafından yakalanır ve bloğun içindeki kodu yürütür catch
.
catch
İçeride bir istisna vardır, eğer blok sadece yürütülür try
blokta.
Not : Java'da try
bloksuz bir catch
blok kullanabiliriz. Ancak bloksuz bir catch
blok kullanamayız try
.
Java deneyin… sonunda engelleyin
Ayrıca try
bloğu bir nihayet bloğu ile birlikte kullanabiliriz .
Bu durumda, try bloğu içinde bir istisna olsa da olmasa da, final bloğu her zaman çalıştırılır.
Örnek: Java deneyin… sonunda engelleyin
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Çıktı
Son olarak blok daima çalıştırılır "main" iş parçacığında istisna java.lang.ArithmeticException: / Main.main'de sıfır ile (Main.java:4)
Yukarıdaki örnekte, try
bloğu blokla birlikte kullandık finally
. try
Bloğun içindeki kodun bir istisnaya neden olduğunu görebiliriz .
Bununla birlikte, finally
bloğun içindeki kod istisnadan bağımsız olarak yürütülür.
Java dene… yakala… sonunda engelle
Java'da, bloktan sonraki final bloğunu da kullanabiliriz try… catch
. Örneğin,
import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Çıktı
Try ifadesi girme Exception => İndeks 5 uzunluk için sınır dışı 5 PrintWriter kapatılıyor
Yukarıdaki örnekte, list adlı bir dizi ve output.txt adlı bir dosya oluşturduk. Burada diziden veri okumaya ve dosyaya depolamaya çalışıyoruz.
Koda dikkat edin,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Burada dizinin boyutu ve dizinin 5
son elemanı at list(4)
. Ancak, a(5)
ve öğelerine erişmeye çalışıyoruz a(6)
.
Bu nedenle kod, catch bloğu tarafından yakalanan bir istisna oluşturur.
Yana finally
blok her zaman çalıştırılır, kapatmak kodu dahil ettik PrintWriter
nihayet bloğunun içinde.
Bir dosyayı veya bağlantıyı kapatmak gibi önemli temizleme kodunu eklemek için nihayet blok kullanmak iyi bir uygulamadır.
Not : Bir finally
bloğun çalışmadığı bazı durumlar vardır :
- Kullanımı
System.exit()
yöntemiyle finally
Blokta bir istisna meydana gelir- Bir ipliğin ölümü
Çoklu Yakalama blokları
Her try
blok için sıfır veya daha fazla catch
blok olabilir. Birden çok catch
blok, her istisnayı farklı şekilde ele almamıza izin verir.
Her catch
bloğun bağımsız değişken türü, kendisi tarafından ele alınabilecek istisna türünü belirtir. Örneğin,
class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Çıktı
IndexOutOfBoundsException => Uzunluk 10 için sınır dışı 10 endeks
Bu örnekte, 10arr
beden adında bir tamsayı dizisi oluşturduk .
Dizi dizini 0'dan başladığından dizinin son elemanı 'dır arr(9)
. İfadeye dikkat edin,
arr(10) = 11;
Burada indeks 10'a bir değer atamaya çalışıyoruz . Dolayısıyla IndexOutOfBoundException
oluşur.
try
Blokta bir istisna meydana geldiğinde ,
- The exception is thrown to the first
catch
block. The firstcatch
block does not handle anIndexOutOfBoundsException
, so it is passed to the nextcatch
block. - The second
catch
block in the above example is the appropriate exception handler because it handles anIndexOutOfBoundsException
. Hence, it is executed.
Catching Multiple Exceptions
From Java SE 7 and later, we can now catch more than one type of exception with one catch
block.
This reduces code duplication and increases code simplicity and efficiency.
Each exception type that can be handled by the catch
block is separated using a vertical bar |
.
Its syntax is:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
To learn more, visit Java catching multiple exceptions.
Java try-with-resources statement
Try-ile-kaynaklar deyimi bir veya daha fazla kaynak bildirimleri vardır denemek ifadedir.
Sözdizimi şöyledir:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Kaynak, programın sonunda kapatılacak bir nesnedir. Try deyiminde bildirilmeli ve başlatılmalıdır.
Bir örnek alalım.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Kaynaklarla dene deyimi, otomatik kaynak yönetimi olarak da adlandırılır . Bu ifade, ifadenin sonunda tüm kaynakları otomatik olarak kapatır.
Daha fazla bilgi edinmek için java kaynaklarla deneme bildirimini ziyaret edin.