1. throwoperatör

Bir blok tarafından bir istisna yakalandığında catchve Java makinesine atılana kadar, bu sadece miras alan Exception(veya daha doğrusu Throwable) bir nesnedir. İstisna nesnesinin kendisinin herhangi bir büyülü özelliği yoktur.

İstisnaların nasıl çalıştığına dair tüm mantık, Java makinesinin kendisine bir istisna fırlatıldığında davrandığı özel bir yoldur.

Yakalanan bir istisnayı her zaman Java makinesine yeniden gönderebilirsiniz. Bunu yapmak için operatörü kullanmanız gerekir throw:

throw exception;

Örnek:

kod Konsol çıkışı
try
{
   int d = 2/0;
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

Bu kodda bir istisna yakaladık, ekranda bununla ilgili bir mesaj görüntüledik ve ardından onu yeniden gönderdik.

catchYeniden atılan bir istisna, aynı bloktaki diğer bloklar tarafından yakalanamaz try.


2. İstisnalarınız

Bu arada, kendiniz bir istisna nesnesi oluşturabilirsiniz: bu yalnızca türü Exceptionveya onu miras alan bir sınıf olan bir nesnedir. Ve fırlat.

Göründüğünden daha kolay. Örnek:

kod Konsol çıkışı
try
{
   throw new RuntimeException();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

Yukarıdaki örnekte, türü olan yeni bir istisna nesnesi oluşturduk RuntimeExceptionve işleci kullanarak onu hemen fırlattık throw.

catchRuntimeException miras aldığı için blok tarafından hemen yakalanacaktır Exception. Kod catch (Exception except), sınıfı miras alan tüm sınıfların istisna nesnelerini yakalar Exception.



3. finallyanahtar kelime

Bir başka önemli nokta. Bazen bir programcının, kodda bir istisna oluşup oluşmadığına bakılmaksızın bazı eylemler gerçekleştirmesi gerekir. Örneğin, yazmak için bir dosya açtığımızı varsayalım. Açılan dosya çağrılarak kapatılmalıdır close().

try
{
   // Code where an exception might occur
}
catch(ExceptionType name)
{
   // Exception handling code
}
finally
{
   // Code that must executed no matter what happens
}

Bu zorunlu eylemleri gerçekleştirmek için yapıya başka türde bir blok ( finally) eklendi try-catchve böylece yapı oluşturuldu try-catch-finally. Şuna benziyor:

Örnek:

FileInputStream source = null;
try
{
   source = new FileInputStream("c:\\note.txt");
   source.read();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
finally
{
   if (source != null)
      source.close();
}

finallyBloktaki kod, bir istisna olup olmadığına bakılmaksızın her durumda yürütülür. Bir istisna atılsa ve yakalanmasa bile, finallyblok yine de yürütülür.

Bu arada, bir istisna yakalamak istemiyorsanız, ancak bir finallybloğa ihtiyacınız varsa, yapı için kestirme gösterimi kullanın try-catch-finally: a try-finallyblok. Şunun gibi görünüyor:

try
{
   // Code where an exception might occur
}
finally
{
   // Code that must executed no matter what happens
}