Java'da istisna yönetimi, uygulamanın düzenli akışının korunabilmesi için çalışma zamanı hatalarını işlemenin etkili yollarından biridir. NullPointerException ArrayIndexOutOfBoundsException vb. gibi çalışma zamanı hatalarını yönetir. Bu hataları etkili bir şekilde ele almak için Java, throw ve throws olmak üzere iki anahtar kelime sağlar.
Java atışı
Java'daki throw anahtar sözcüğü, bir yöntemden veya herhangi bir kod bloğundan açıkça bir istisna atmak için kullanılır. İşaretli veya işaretsiz istisna atabiliriz. throw anahtar sözcüğü esas olarak özel istisnalar oluşturmak için kullanılır.
Sözdizimi:
fırlatmak Misal
Örneğin, Throwable türünde bir nesne (veya onun Exception gibi alt sınıfları) olduğu durumlarda.
Örnek:
throw new ArithmeticException('/ sıfıra kadar');
Ancak bu istisna, yani Örnek türünde olmalıdır Fırlatılabilir veya bir alt sınıfı Fırlatılabilir .
Programın yürütme akışı, throw ifadesi yürütüldükten ve en yakın çevrelemeden hemen sonra durur. denemek bloğun olup olmadığı kontrol edilir yakalamak istisna türüyle eşleşen ifade. Kontrollü bir eşleşme bulursa bu bildirime aktarılır, aksi takdirde bir sonraki ekte yer alır. denemek blok kontrol edilir vb. Eşleşme yoksa yakalamak bulunursa, varsayılan istisna işleyici programı durduracaktır.
için Java normal ifadesi
Örnek: Bu örnek, bir istisnanın bir yöntem içinde nerede yakalandığını ve yeniden atıldığını gösterir.
Javaclass Geeks { static void fun() { try { throw new NullPointerException('demo'); } catch (NullPointerException e) { System.out.println('Caught inside fun().'); throw e; // rethrowing the exception } } public static void main(String args[]) { try { fun(); } catch (NullPointerException e) { System.out.println('Caught in main.'); } } }
Çıkış
Caught inside fun(). Caught in main.
Açıklama: Yukarıdaki örnek, açıkça bir NullPointerException oluşturmak için throw anahtar sözcüğünün kullanımını gösterir. İstisna içeride yakalandı eğlence() yöntemini kullanır ve daha sonra main() yönteminde yakalandığı yere yeniden atılır.
Örnek: Bu örnek bir aritmetik istisnayı göstermektedir.
Java// Throwing an arithmetic exception class Geeks { public static void main(String[] args){ int numerator = 1; int denominator = 0; if (denominator == 0) { // Manually throw an ArithmeticException throw new ArithmeticException('Cannot divide by zero'); } else { System.out.println(numerator / denominator); } } }
Çıkış:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)
Açıklama: Yukarıdaki örnek, sıfıra bölünme nedeniyle açıkça bir ArithmeticException'ın atıldığı throw işlevini kullanan bir istisnayı göstermektedir.
Java atar
atar Java'da bir yöntemin imzasında, bu yöntemin listelenen tür istisnalarından birini atabileceğini belirtmek için kullanılan bir anahtar kelimedir. Bu yöntemleri çağıran kişinin istisnayı try-catch bloğu kullanarak ele alması gerekir.
Sözdizimi:
method_name(parameters) yazın, istisna_listesini atar
burada istisna_listesi, bir yöntemin oluşturabileceği tüm istisnaların virgülle ayrılmış listesidir.
Bir programda bir istisna ortaya çıkma şansı varsa, o zaman derleyici bizi her zaman bu konuda uyarır ve kontrol edilen istisnayı ele almalıyız. Aksi takdirde, bildirilmemiş istisna XXX'in yakalanması veya atılması için bildirilmesi gerektiğini söyleyen derleme zamanı hatası alırız. Bu derleme zamanı hatasını önlemek için istisnayı iki şekilde ele alabiliriz:
- try catch'i kullanarak
- kullanarak atar anahtar kelime
İstisna işleme sorumluluğunu arayana devretmek için throws anahtar sözcüğünü kullanabiliriz (Bu bir yöntem veya JVM olabilir), ardından arayan yöntemi bu istisnayı ele almaktan sorumludur.
Örnek 1: İşlenmeyen İstisna
Javaclass Geeks { public static void main(String[] args) { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Çıkış:
error: unreported exception InterruptedException; must be caught or declared to be thrownAçıklama: Yukarıdaki programda derleme zamanı hatası alıyoruz çünkü ana iş parçacığı uyuyacaksa bir istisna olasılığı vardır, diğer iş parçacıkları InterruptedException'a neden olacak main() yöntemini yürütme şansını yakalar.
Örnek 2: Kullanma throws İstisnayı Yönetmek
class Geeks { public static void main(String[] args) throws InterruptedException { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Çıkış:
Hello GeeksAçıklama: Yukarıdaki programda throws anahtar sözcüğünü kullanarak şunları ele aldık: Kesintili İstisna ve çıktıyı şu şekilde alacağız: Merhaba Geek'ler.
Örnek 3: İle bir İstisna Atmathrows
Java'da tarayıcıJava
class Geeks { static void fun() throws IllegalAccessException { System.out.println('Inside fun(). '); throw new IllegalAccessException('demo'); } public static void main(String args[]) { try { fun(); } catch (IllegalAccessException e) { System.out.println('Caught in main.'); } } }
Çıkış
Inside fun(). Caught in main.
Açıklama: Yukarıdaki örnek, bir yöntemden bir IllegalAccessException atıyor ve bunu bir try-catch bloğu kullanarak ana yöntemde ele alıyor.
Atma ve atma arasındaki fark
Java'da fırlatma ve fırlatma arasındaki temel farklar şunlardır:
fırlatmak | atar ABD şehrinin adı |
|---|---|
Açıkça bir istisna atmak için kullanılır. | Bir yöntemin bir veya daha fazla istisna atabileceğini bildirmek için kullanılır. |
Bir yöntemin veya kod bloğunun içinde kullanılır. | Yöntem imzasında kullanılır. |
Hem işaretli hem de işaretsiz istisnalar atabilir. | Yalnızca işaretlenen istisnalar için kullanılır. Denetlenmeyen istisnalar gerektirmez atar |
Yöntem veya blok istisnayı atar. | Yöntemi çağıran, istisnanın ele alınmasından sorumludur. |
Mevcut yürütme akışını anında durdurur. | Arayanı bildirilen istisnaları ele almaya zorlar. |
throw new ArithmeticException('Error'); | public void myMethod(), IOException {} değerini atar |