Исключение Java - это механизм прерывания нормального выполнения программы, обычно - хотя и не обязательно - когда возникает ошибка, препятствующая продолжению обработки.Исключения являются наиболее полезными для "панического отказа от выброса !!"условия.
Часто при написании программы вы сталкиваетесь с каким-то условием, при котором невозможно продолжить.Часто в программе возможно много таких условий.Например, предположим, что вы читаете файл, который должен содержать список имен и адресов.Вы можете обнаружить, что не можете найти файл на жестком диске.Формат может не соответствовать ожидаемому.Там могут быть повторяющиеся записи.И т.д. Некоторые из этих ошибок могут вообще сделать невозможным выполнение операции, например, «файл не найден».В других случаях вам, возможно, придется отказаться от записи, но можно продолжить обработку оставшихся записей в файле.
До изобретения исключений программисты часто оказывались с глубоко вложенными IF для всех возможных ошибок.Например (некоторый псевдокод, без определенного языка):
fileHandle=open("myfile.txt");
if (fileHandle==null)
{
writeMessage("File not found");
}
else
{
while (record=fileHandle.read())
{
parseRecord(record);
if (parseError)
{
writeMessage("Invalid record format");
}
else
{
lookupRecord(record);
if (found)
{
writeMessage("Duplicate record");
}
else
{
... etc ...
}
}
}
}
Это может привести к путанице по мере роста числа ошибок.Исключения позволяют нам выручить в любой момент, не нуждаясь в куче предложений «else».
Кроме того, у нас часто есть функции, которые вызывают другие функции, которые вызывают другие функции и т. Д., Или циклы внутри цикла внутри цикла.Некоторые ошибки могут быть обработаны глубоко внутри структуры.В основном это означает те, с которыми мы можем иметь дело и восстановить, как плохой отчет.Другие должны быть обработаны на более высоком уровне.Главным образом это означает, что все, что мы можем сделать, это прервать процесс и отобразить сообщение об ошибке для пользователя или записать ошибку в файл журнала или что-то еще.Исключения позволяют нам делать это, устанавливая уровень, на котором мы ловим ошибку.Мы можем поставить блок «catch» сразу после оператора, который может создать ошибку и предпринять некоторые корректирующие действия.Мы можем поставить немного выше, чтобы прервать обработку, скажем, записи, но продолжим со следующей записью.Или мы можем поставить его наверх, чтобы прервать все это.Чтобы взять приведенный выше пример:
try
{
fileHandle=open("myfile.txt");
if (fileHandle==null)
throw new FileException("File not found")
while (record=fileHandle.read())
{
try
{
parseRecord(record);
if (parseError)
throw new RecordException("Invalid format")
lookupRecord(record);
throw new RecordException("Duplicate record")
... etc ...
}
catch (RecordException e)
{
showMessage(e.getMessage())
}
}
catch (FileException e)
{
showMessage(e.getMessage())
}
Обратите внимание, что RecordException прервет обработку записи, но давайте перейдем к следующему.FileException сбивает все это с толку.
Третье преимущество исключений заключается в том, что они помогают четко определить условия исключений.
Что ж, это столько же учебник, сколько я собираюсьсписывай мне на голову!