try catch finally
Bu eğitimde, Deneme, Yakalama, Nihayet, Atma ve Atma gibi İstisna İşleme için Java'da kullanılan çeşitli anahtar sözcükleri örneklerle tartışacağız:
Önceki eğitimlerimizde, Java İstisna sınıfı tarafından desteklenen çeşitli istisnaların yanı sıra Java'da istisna işlemenin temellerini gördük. Ayrıca NullPointerException'ı ayrıntılı olarak tartıştık.
Java'da sağlanan belirli anahtar kelimeleri kullanarak programımıza istisnalar ekleyebiliriz. Bu anahtar sözcükler, istisnaları tanımlamayı ve işlemeyi kolaylaştıran çeşitli kod bloklarını tanımlar.
=> Özel Java Eğitimi Eğitim Dizisi İçin Burayı Ziyaret Edin.
Ne öğreneceksin:
Deneyin, Yakala, Nihayet Java'da
Aşağıdaki anahtar sözcükler Java'da İstisna işleme için kullanılır.
- Deneyin
- Yakalamak
- En sonunda
- Atmak
- Atar
Aşağıdaki tablo bu anahtar kelimeleri kısaca açıklamaktadır.
Anahtar kelime | Açıklama |
---|---|
Deneyin | Özel bir blokta istisnaya yol açabilecek kod bloğunu “Try” anahtar kelimesi ile belirtiyoruz. |
Yakalamak | İstisna ortaya çıktığında, program tarafından yakalanması gerekir. Bu, bir 'catch' anahtar sözcüğü kullanılarak yapılır. Yani bir catch bloğu, bir istisna oluşturan try bloğunu takip eder. Catch anahtar kelimesi her zaman bir try ile kullanılmalıdır. |
En sonunda | Bazen programımızda istisnanın atılıp atılmadığına bakılmaksızın yürütülmesi gereken önemli bir kod bulunur. Bu kod, 'Nihayet' anahtar kelimesiyle başlayan özel bir bloğa yerleştirilir. Nihayet bloğu Try-catch bloğunu takip eder. |
Atmak | 'Fırlatma' anahtar kelimesi istisnayı açıkça atmak için kullanılır. |
Atar | 'Atar' anahtar sözcüğü bir istisna oluşturmaz, ancak istisnaları bildirmek için kullanılır. Bu anahtar sözcük, programda veya yöntemde bir istisnanın meydana gelebileceğini belirtmek için kullanılır. |
Bu eğitimde, yukarıdaki tüm anahtar kelimeleri programlama örnekleriyle birlikte ayrıntılı olarak tartışacağız.
Java'da Engellemeyi Deneyin
Bir program yazdığımızda, bir istisna oluşturabileceğinden şüphelendiğimiz bir kod olabilir. Örneğin, Kodda bir istisna atacak bir 'sıfıra bölme' işlemi olabileceğinden şüphelenebiliriz.
Bir istisna yaratabilecek bu kod, 'dene' anahtar kelimesi ile bir blok içine alınır. Bu nedenle, try bloğu, bir istisna oluşturabilecek kodu veya ifade kümesini içerir.
Try bloğunun genel sözdizimi aşağıdaki gibidir:
try{ //set of statements that can raise exception }
Bu nedenle, bir programcı belirli ifadelerin istisnalar doğuracağını düşünürse, bu ifadeleri bir try bloğunun içine alın. Bir try bloğundaki belirli bir ifadede bir istisna meydana geldiğinde, kodun geri kalanının çalıştırılmayacağını unutmayın.
Belirli bir ifadede bir try bloğunda bir istisna meydana geldiğinde, kontrol çıkar ve program aniden sona erer. Programın bu ani sonlandırılmasını önlemek için, bu istisnayı 'halletmeliyiz'. Bu işlem, 'catch' anahtar sözcüğü kullanılarak yapılır. Yani bir try bloğunun her zaman onu takip eden bir catch bloğu vardır.
Java'da Bloğu Yakala
İstisnaları ele almak için bir catch bloğu kullanıyoruz. Bu, 'catch' anahtar kelimesine sahip bloktur. Catch bloğu, try bloğunu takip eder.
Try bloğunda bir istisna meydana geldiğinde, catch bloğundaki istisnaya karşılık gelen kod çalıştırılır.
Catch bloğunun genel sözdizimi şöyledir:
catch (Exception e){ //code to handle exception e }
Genel olarak, beyan edilen istisna, tüm istisnaların ebeveyn sınıfı, yani İstisna olmalıdır. Ancak birden fazla istisna varsa, belirli istisna türleri veya oluşturulmuş istisnalar da yazabiliriz.
Sonra, dene-yakala bloğunu tartışacağız. Her try bloğu için birden fazla catch bloğumuz olabileceğini unutmayın.
Try-Catch Java
Try-catch bloğunun genel sözdizimi aşağıda gösterilmiştir:
try{ //code causing exception } catch (exception (exception_type) e (object)) { //exception handling code }
Try bloğu, birden çok istisnayı ortaya çıkarabilen birden çok kod satırına sahip olabilir. Bu istisnaların her biri, bağımsız bir catch bloğu tarafından ele alınır.
Exception sınıfının genel istisna işleyicisi, nesne e, tüm istisnaları işleyebilir, ancak belirli istisnaları ele almak istiyorsak, son yakalama bloğu olarak genel istisna işleyicisini belirtmemiz önerilir.
Java Try Catch Örneği
Şimdi Java'da bir deneme-yakalama bloğunu gösterelim. Burada try bloğunda bir bölme işlemi tanımlıyoruz. Bölen sıfırdır. Bu nedenle, iki sayıyı bölen ifade bir Aritmetik istisna yaratır. Aritmetik istisna için bir eylemci tanımlayan bir catch bloğumuz var.
Aşağıda örnek bir Java programı verilmiştir.
class Main { public static void main(String args()) { int val1, val2; try { //this block will contain statements that may raise exceptions System.out.println('Try Block:: Start'); val1 = 0; val2 = 25 / val1; System.out.println(val2); System.out.println('Try Block:: End'); } catch (ArithmeticException e) { //handler for ArithmeticException System.out.println('ArithmeticException :: Divide by Zero!!'); } System.out.println('Outside try-catch:: Rest of the code.'); } }
Çıktı
ne tür uygulamaları test ediyoruz
Birden Fazla İstisnayı Yakalama
Daha önce de belirtildiği gibi, bir try bloğu birden fazla istisna yaratan bir kod içerebilir. Bu durumda, her bir istisnayı işlemek için birden fazla catch bloğuna ihtiyacımız olacak. Tek bir try bloğunu birden çok catch bloğu takip edebilir. Her catch bloğu bağımsız istisnaları ele alacaktır.
Birden fazla yakalama bloğu olması durumunda, aşağıdaki noktaları hatırlamamız gerekir:
- Bir Java programında, herhangi bir zamanda, yalnızca bir istisna meydana gelebilir. Ayrıca, herhangi bir noktada, yalnızca bir catch bloğu çalıştırılır.
- Çoklu yakalama blokları, çoğu özel istisna için yakalama bloğu önce, sonra genel gelecek şekilde sıralanmalıdır.
Örneğin, ArithmeticException ve genel Exception varsa, o zaman catch bloğu işleme ArithmeticException gelir ve ardından catch bloğu işleme Exception gelir.
Aşağıdaki örnek, birden çok yakalama bloğunu göstermektedir.
public class Main { public static void main(String() args) { //try block containing exception prone code try{ System.out.println('try Block:: Begin'); int myArray()=new int(5); myArray (5)=10/0; } //multiple catch blocks catch(ArithmeticException e) { System.out.println('Arithmetic Exception :: Divide by zero!!'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds :: Accessed index out of bounds'); } catch(Exception e) { System.out.println('Exception :: ' + e.getMessage ()); } System.out.println('rest of the code'); } }
Çıktı
Yukarıdaki programda, ilk catch bloğunda yakalanan bir ArithmeticException oluşturulur. Bu catch bloğu belirtilmemişse, istisna genelleştirilmiş catch bloğuna yayılırdı.
Yukarıdaki programı biraz değiştirelim, böylece try bloğu iki istisna ortaya çıkarır. Şimdi çıktıyı görelim.
public class Main { public static void main(String() args) { //try block containing exception prone code try{ System.out.println('try Block:: Begin'); int myArray()=new int(5); System.out.println('Array element 10 : ' + myArray(10)); myArray(5)=10/0; } //multiple catch blocks catch(ArithmeticException e) { System.out.println('Arithmetic Exception :: Divide by zero!!'); } catch(ArrayIndexOutOfBoundsException e) { System.out.println('ArrayIndexOutOfBounds :: Accessed index out of bounds'); } catch(Exception e) { System.out.println('Exception :: ' + e.getMessage ()); } System.out.println('rest of the code'); } }
Çıktı
Bu çıktının atıldığını görürsek ArrayIndexOutOfBoundsException'ı gösterir. Bunun nedeni, ArrayIndexOutOfBoundsException'ı yükselten ifadenin ilk olarak yürütülmesidir. İstisna atılır ve kontrol ilgili catch bloğuna gider.
Yuvalanmış Try-Catch
Başka bir try bloğunun içindeki bir try bloğuna iç içe geçmiş bir try bloğu denir. Bir try kodunda yer alan bir kod parçası, bazı satırların belirli istisnaları artırdığı ve başka bir kod parçası tamamen farklı bir istisnayı ortaya çıkarabileceği belirli durumlarda bu tür yapılara ihtiyacımız var.
İç içe geçmiş deneme blokları durumunda, ilk önce en içteki try bloğu çalıştırılır ve istisna işlenir. En içteki try bloğunun eşleşen bir catch bloğu yoksa, o zaman üst try bloğuna kadar bir seviye yayılır. Bu şekilde, eşleşen istisna işleyicisi bulunana kadar istisna yukarı doğru yayılır.
Kural dışı durumla eşleşen bir istisna işleyicisi yoksa, program, sistem tarafından oluşturulan bir mesajla aniden sonlandırılır.
İç içe geçmiş bir try bloğunun genel sözdizimi aşağıda verilmiştir:
try { //try_block 1; try { //try_block 2; } catch(Exception e) { //exception handler code } } catch(Exception e) { //exception handler code }
Yuvalanmış try-catch bloğunu göstermek için bir program uygulayalım.
class Main{ public static void main(String args()){ //Main try block try{ //try block1 try{ System.out.println('Try Block1'); int num =15/0; System.out.println(num); } catch(ArithmeticException e1){ System.out.println('Block1 Exception: e1'); } //try block2 try{ System.out.println('Try Block2'); int num =100/0; System.out.println(num); } catch(ArrayIndexOutOfBoundsException e2){ System.out.println('Block2 Exception: e2'); } System.out.println('General statement after Block1 and Block2'); } catch(ArithmeticException e3){ System.out.println('Main Block Arithmetic Exception'); } catch(ArrayIndexOutOfBoundsException e4){ System.out.println('Main Block ArrayIndexOutOfBoundsException'); } catch(Exception e5){ System.out.println('Main Block General Exception'); } System.out.println('Code after Nested Try Block'); } }
Çıktı
Yukarıdaki programda, ana try bloğuna eklenmiş iki try bloğumuz var. Her iki iç try bloğunun da ArithmeticException'ı yükselten bir kodu vardır. Ancak, ikinci try bloğu için değil, yalnızca ilk blok için eşleşen bir catch bloğu sağladık.
Dolayısıyla, ikinci blok istisnasını ana try bloğuna yayar ve sonra onu işler. Bu çıktıdan anlaşılıyor.
Sonunda Java'da Engelleme
Şimdiye kadar, dene-yakala ve iç içe geçmiş deneme bloğunu gördük. İstisnayı ortaya çıkarması beklenen kodun bir try bloğuna yerleştirildiğini biliyoruz. Bir istisna meydana geldiğinde, try bloğundaki kodun geri kalanı çalıştırılmaz.
Bir istisna işlenmezse veya denetim istisna işleyicisine geçirilirse program aniden sona erer.
Böyle bir durumda, bir istisna olup olmadığına bakılmaksızın çalıştırılacak bir kodun dahil edilmesi ihtiyacı ortaya çıkar. Bu, bir istisna meydana geldiğinde ve ayrıca istisna oluşmadığında bile bir kod parçası çalıştıracağımız anlamına gelir.
Ancak try bloğu istisna oluşturulduktan sonra çıktığı için bu kodu try bloğuna koyamayız. Benzer şekilde, catch bloğunun bir istisna işleyicisi vardır, bu nedenle bunu catch bloğuna da koyamayız.
Bu nedenle, bir istisna olup olmadığına bakılmaksızın çalışan bir kod içeren ayrı bir bloğa ihtiyacımız var. Java, bu kod parçasını içeren bir 'nihayet' bloğu sağlar.
Dolayısıyla, Java'daki bir nihayet bloğu, programda yürütülecek kritik ifadeler içerebilir. Bu ifadelerin yürütülmesi, bir istisna olsa veya olmasa bile gerçekleştirilmelidir.
Bu nedenle, bir istisna meydana gelse bile çalıştırılabilmeleri için, kapatma bağlantıları, akış nesneleri vb. Gibi kodlar veya herhangi bir temizleme kodunu final bloğuna koyacağız.
Java'daki final bloğu genellikle bir dene veya yakala bloğunun ardından yerleştirilir. Nihai bloğun bir try bloğu olmadan var olamayacağını unutmayın. Nihayet bloğu try-catch'e dahil edildiğinde, ' sonunda yakala ”Bloğu.
İstisna işleme kodundaki nihayet bloğunu atlayabiliriz. Bu, nihayet bloğun isteğe bağlı olduğu anlamına gelir.
Try bloğu herhangi bir istisna oluşturmazsa, try bloğundan sonra final bloğu çalıştırılacaktır. Try bloğunda bir istisna varsa, kontrol önce catch bloğuna ve sonra son bloğa geçecektir.
Nihayet bloğunda meydana gelen bir istisna, diğer herhangi bir istisna ile aynı şekilde davranır. Try bloğu, return ve break ve continue gibi dallanma ifadeleri içerse bile, final bloğu yine de yürütülür.
Bu noktaları göz önünde bulundurarak, genel söz dizimi ve nihayet blok örnekleriyle devam edelim.
Nihayet bloğunun genel sözdizimi aşağıdaki gibidir:
try { //code that might raise exception }catch { //code that handles exception }finally { //mandatory code to be executed }
Sonunda blok her zaman yürütülse de, yürütülmediği belirli durumlar veya durumlar vardır.
Bunlar aşağıdaki durumlardır:
- İplik öldüğünde.
- System.exit () yöntemi kullanıldığında.
- Nihayet bloğunda bir istisna meydana geldiğinde.
Nihayet engelini göstermek için birkaç program uygulayalım.
class Main { public static void main (String args()) { //try block try { System.out.println ('::Try Block::'); int data = 125 / 5; System.out.println ('Result:' + data); } //catch block catch (NullPointerException e) { System.out.println ('::Catch Block::'); System.out.println (e); } //finally block finally { System.out.println (':: Finally Block::'); System.out.println ('No Exception::finally block executed'); } System.out.println ('rest of the code...'); } }
Çıktı
Yukarıdaki program, bir dene-yakala bloğu gösterir. Try bloğunda, geçerli bir işlem gerçekleştirilir ve bu nedenle hiçbir istisna atılmaz. Bu nedenle, kontrolden denemeye değil, nihayet bloke etmeye geçilir.
Aşağıdaki program, try-catch-final bloğunun başka bir örneğidir, ancak bu durumda, sıfıra bölme işlemi gerçekleştirdiğimizde, try bloğunda istisna atılır. Böylece, catch bloğu çalıştırıldıktan sonra final bloğu yürütülür.
class Main { public static void main(String args()) { //try block try{ System.out.println('::Try block::'); int num=67/0; System.out.println(num); } //catch block catch(ArithmeticException e){ System.out.println('::Catch block::'); System.out.println('ArithmeticException::Number divided by zero'); } //finally block finally{ System.out.println('::Finally block::'); } System.out.println('Rest of the code continues...'); } }
Çıktı
Java'da Bir İstisna Oluşturun
Java, koddaki istisnaları açıkça atabileceğimiz bir anahtar kelime 'fırlat' sağlar. Örneğin, aritmetik işlemleri kontrol ediyorsak ve işlenenleri kontrol ettikten sonra bazı istisnalar ortaya çıkarmak istiyorsak, bunu 'throw' anahtar kelimesini kullanarak yapabiliriz.
Throw anahtar sözcüğünü kullanarak, işaretlenmiş veya işaretlenmemiş istisnaları atabiliriz. Throw anahtar sözcüğü ayrıca özel istisnalar atmak için de kullanılır.
Throw anahtar kelimesinin genel sözdizimi şöyledir:
throw exception; or throw new exception_class('error message');
Aşağıda, throw anahtar sözcüğünü göstermek için örnek bir program verilmiştir.
public class Main{ static void validate_Age(int age){ //if specified age is <18, throw ArithmeticException if(age<18) throw new ArithmeticException('Not eligible to vote and drive!!'); else //print the message System.out.println('Eligible to vote and drive!!'); } public static void main(String args()){ //call validate_Age method validate_Age(10); System.out.println('rest of the code...'); } }
Çıktı
Yukarıdaki programda, yaşı doğrulamak için bir yöntem kullanıyoruz. Yaş ise<18, then an exception is thrown to indicate the age is not valid.
Atar Madde
İstisnaları bildirmek için try bloğu gördük. İstisnalara neden olabilecek kodu içerir. Bir istisna bildirmenin başka bir yolu vardır ve 'atar' anahtar kelimesini kullanmaktır.
'Throws' anahtar sözcüğünü kullanan istisna bildirimi, programcıya 'atar' anahtar sözcüğünden sonra belirtilen bir istisna olabileceğini ve programcının programın normal akışını sürdürmek için bu istisnaya karşılık gelen işleyici kodunu sağlaması gerektiğini söyler.
Bununla birlikte, istisnaları bildirmek ve işlemek için daha güvenilir bir dene-yakala bloğumuz varken neden bir 'atar' anahtar kelimesine ihtiyacımız olduğu sorusu ortaya çıkıyor?
Bunun bir nedeni, olası istisnaların sayısı arttıkça, istisnaları işleyen catch bloğu sayısı da bir catch bloğu yalnızca bir istisnayı işleyebildiğinden artar.
uat test komut dosyaları nasıl yazılır
Benzer şekilde, bir programda birçok yöntem varsa ve her yöntemin çok sayıda istisnası varsa, o zaman kod gereksiz yere uzun ve yönetilemez hale gelecektir.
Bu nedenle, yöntem imzasında throws anahtar sözcüğü ile bir istisna bildirmek ve ardından try-catch kullanarak yöntem çağrısını işlemek uygun bir çözüm gibi görünmektedir.
Throws anahtar sözcüğünü kullanarak istisnaları bildirmenin bir başka avantajı, istisnaları halletmek zorunda kalmamızdır. Bildirilen bir istisna için bir işleyici sağlamazsak, program bir hata verecektir.
Atar anahtar kelimesinin genel sözdizimi aşağıdaki gibidir:
return_type method_name() throws exception_class_name{ //method code }
Şimdi 'atar' anahtar sözcüğünü göstermek için bir Java programı uygulayalım.
Bu programda, testMethod yöntemimizin olduğu bir Example_throw sınıfımız var. Bu testMethod'un imzasında, throws anahtar sözcüğünü kullanarak iki istisna IOException ve Arithmetic Exception bildiriyoruz. Daha sonra ana işlevde, atılan istisnalar catch bloğu tarafından ele alınır.
import java.io.*; class Example_Throw { //declare exception using throws in the method signature void testMethod(int num) throws IOException, ArithmeticException{ if(num==1) throw new IOException('IOException Occurred'); else throw new ArithmeticException('ArithmeticException'); } }class Main{ public static void main(String args()){ try{ //this try block calls the above method so handle the exception Example_Throw obj=new Example_Throw(); obj.testMethod(1); }catch(Exception ex){ System.out.println(ex); } } }
Çıktı
Sıkça Sorulan Sorular
S # 1) Java'da throws VS try-catch ne zaman kullanılır?
Cevap: 'Throws' anahtar sözcüğü, istisnayı yöntem imzasıyla bildirmek için kullanılır. Throw anahtar sözcüğü, istisnayı açıkça atmak için kullanılır. Try-catch bloğu, başkaları tarafından atılan istisnaları işlemek için kullanılır.
S # 2) Atışları kullanabilir miyiz, tek bir yöntemde deneyip yakalayabilir miyiz?
Cevap: Hayır. İstisnayı atıp aynı yöntemle yakalayamazsınız. Throws kullanılarak bildirilen istisna, istisnayı atan yöntemi çağıran çağırma yönteminde işlenmektir.
S # 3) Bir catch bloğu bir istisna attığında ne olur?
Cevap: Catch bloğunda bir istisna atıldığında, program yürütmeyi durduracaktır. Programın devam etmesi gerektiğinde, catch bloğunda ortaya çıkan istisnayı işlemek için ayrı bir try-catch bloğu olması gerekir.
S # 4) Java'da try-catch-nihayet nedir?
Cevap: Try-catch-final bloğu üç bloğu içerir, yani try bloğu, catch bloğu ve nihayet bloğu.
Try bloğu, bir istisna atabilecek kodu içerir. Catch bloğu, try bloğundaki istisnalar için istisna işleyicisini içerir. Nihai blok, istisnanın gerçekleşip gerçekleşmediğine bakılmaksızın yürütülecek kritik kodu içerir.
S # 5) Sonunda blok, dene-yakalamaya sahip olabilir mi?
Cevap: Evet, nihayet bloğunda bir istisna atabilecek bir temizleme kodumuz varsa, o zaman bir dene-yakala bloğumuz olabilir. Ancak çirkin görünüyor.
Sonuç
Bu eğitimde, Java'da istisna işlemede kullanılan çeşitli anahtar kelimeleri tartıştık. Dene, yakala, nihayet, at ve fırlat gibi anahtar kelimeleri tartıştık.
Olasılıkla bir istisna atacak olan kod, try bloğunda yer alır ve catch, istisna için işleyiciye sağlar. Nihai blok, istisnanın atılıp atılmadığına bakılmaksızın içindeki kodu yürütür. Nihayet bloğu genellikle dene veya dene-yakala bloğunu takip eder.
Yöntem imzasıyla istisnaları bildirmek için throws anahtar sözcüğünü kullanırız ve throw, istisnaları atmak için açıkça kullanılır. Özel istisnalar atmak için genellikle throw anahtar kelimesini kullanırız.
=> Mükemmel Java Eğitim Kılavuzuna Buradan Bakabilirsiniz.
Önerilen Kaynaklar
- Java İstisnaları ve Örneklerle İstisna İşlemleri
- Java'da ArrayIndexOutOfBoundsException Nasıl İşlenir?
- Yeni Başlayanlar İçin JAVA Eğitimi: 100+ Uygulamalı Java Video Eğitimi
- JDBC Özel Durum İşleme - SQL İstisnalarını İşleme
- Kod Örnekleriyle C # İstisna İşleme Eğitimi
- Örneklerle PL SQL İstisna İşlemi İçin Eksiksiz Kılavuz
- C ++ 'da Özel Durum İşleme
- Python Hariç Deneyin - Örneklerle Python İstisnasını İşleme