"Size istisnaların nasıl çalıştığından biraz bahsetmek istiyorum . Aşağıdaki örnek, size ne olduğu hakkında kabaca bir fikir verecektir:"
class ExceptionExampleOriginal
{
public static void main(String[] args)
{
System.out.println("main begin");
try
{
System.out.println("main before call");
method1();
System.out.println("main after call");
}
catch (RuntimeException e)
{
String s = e.getMessage();
System.out.println(s);
}
System.out.println("main end");
}
public static void method1()
{
System.out.println("method1 begin");
method2();
System.out.println("method1 end");
}
public static void method2()
{
System.out.println("method2");
String s = "Message: Unknown Exception";
throw new RuntimeException(s);
}
}
public class ExceptionExample
{
private static Exception exception = null;
public static void main(String[] args)
{
System.out.println("main begin");
System.out.println("main before call");
method1();
if (exception == null)
{
System.out.println("main after call");
}
else if (exception instanceof RuntimeException)
{
RuntimeException e = (RuntimeException) exception;
exception = null;
String s = e.getMessage();
System.out.println(s);
}
System.out.println("main end");
}
public static void method1()
{
System.out.println("method1 begin");
method2();
if (exception != null) return;
System.out.println("method1 end");
}
public static void method2()
{
System.out.println("method2");
String s = "Message: Unknown Exception";
exception = new RuntimeException(s);
return;
}
}
"Tamamen kayboldum."
"Pekala. Neler olduğunu açıklayayım."
"Soldaki örnekte art arda birkaç yöntem çağırıyoruz. 'da method2
kasıtlı olarak bir istisna oluşturup atıyoruz (bir hata oluşturuyoruz).
"Sağdaki örnek neler olduğunu gösteriyor."
"Bakın method2
. Bir istisna oluşturmak yerine, bir nesne oluşturuyoruz RuntimeException
, onu statik değişkene kaydediyoruz ve ardından bir ifade exception
kullanarak yöntemden hemen çıkıyoruz ."return
"'de method1
çağrıldıktan sonra bir istisna olup olmadığını method2
kontrol ederiz . İstisna varsa method1
hemen biter. Java'da her(!) metod çağrısından sonra dolaylı olarak böyle bir kontrol yapılır."
"Vay!"
"Vay canına."
"Sağ sütunda, try-catch yapısı kullanılarak bir istisna yakalandığında yaklaşık olarak ne olduğunu göstermek için ana yöntemi kullandım. İstisna yoksa, o zaman her şey beklendiği gibi çalışmaya devam eder. catch deyiminde belirtilen türle aynıysa, o zaman onu hallederiz."
"Ne demek throw
ve ne instanceof
demek? "
"Son satıra bakın: throw new RuntimeException(s);
. Bu şekilde bir istisna oluşturup atarsınız. Bunun üzerinde henüz çalışmayacağız. Bu sadece bir örnekti."
a instanceof B
" nesnenin a
türünde olup olmadığını B
, yani istisna değişkeni tarafından başvurulan nesnenin bir RuntimeException olup olmadığını kontrol etmek için kullanırız . Bu bir boole ifadesidir."
"Sanırım anladım. Neredeyse."
GO TO FULL VERSION