„Бих искал да ви разкажа малко за това How работят изключенията . Примерът по-долу трябва да ви даде груба представа Howво се случва:“
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;
}
}
— Съвсем съм се загубил.
— Добре. Нека ти обясня Howво става.
„В примера отляво извикваме последователно няколко метода. В method2
, съзнателно създаваме и хвърляме изключение (създаваме грешка).“
„Примерът вдясно показва Howво се случва.
„Вижте method2
. Вместо да създаваме изключение, ние създаваме обект RuntimeException
, запазваме го в статичната променлива exception
и след това незабавно излизаме от метода с помощта на return
оператор.“
"В method1
, след извикване method2
, ние проверяваме дали има изключение. Ако има изключение, то method1
приключва веднага. Проверка като тази се извършва индиректно след всяко (!) извикване на метод в Java."
"Еха!"
"Уау е прав."
"В дясната колона използвах основния метод, за да покажа приблизително Howво се случва, когато изключение бъде уловено с помощта на конструкция try-catch. Ако няма изключение, тогава всичко продължава да работи според очакванията. Ако има изключение и то е от същия тип, посочен в оператора catch, тогава ние го обработваме."
"Какво правя throw
и instanceof
означавам? "
„Вижте последния ред: throw new RuntimeException(s);
. Ето How създавате и хвърляте изключение. Все още няма да работим върху това. Това беше просто пример.“
„Използваме a instanceof B
, за да проверим дали обектът a
е от тип B
, т.е. дали обектът, посочен от променливата изключение, е RuntimeException. Това е булев израз.“
— Мисля, че го разбрах. Почти.
GO TO FULL VERSION