Что является исключением в Java? - PullRequest
1 голос
/ 10 мая 2010

У меня есть несколько вопросов относительно исключений в Java:

  1. Что такое исключение Java?

  2. Является ли исключение ошибкой?

  3. Когда я должен выбросить исключения?

  4. Сколько исключений?

Ответы [ 8 ]

11 голосов
/ 10 мая 2010
  1. Сигнал о том, что в коде что-то не получилось, но которое можно программно восстановить.

  2. Зависит от того, как вы интерпретируете «ошибку». Это неоднозначно.

  3. Когда вы хотите сообщить, что в коде что-то не получилось, но что можно восстановить программным путем.

  4. Бесчисленные. Вы также можете создавать собственные.

Чтобы узнать больше об исключениях, ознакомьтесь с учебником Sun по теме .

8 голосов
/ 10 мая 2010

Вы можете начать здесь:

http://java.sun.com/docs/books/tutorial/essential/exceptions/

4 голосов
/ 10 мая 2010

Что такое исключение Java?

Это класс, используемый для выявления непредвиденного поведения в вашем приложении.

Считается ли исключение ошибкой?

Не всегда (и зависит от того, что вы называете ошибкой)

Когда я должен выбросить исключения?

Когда ваше приложение переходит в неожиданное состояние или вы хотите сообщить о неожиданном поведении

Сколько исключений?

Есть три:

  • Проверенные исключения (должны быть обработаны, т.е. FileNotFoundException)

Эти исключения не являются вменяемыми для программиста, но для среды, с которой он сталкивается, и программист может что-то с этим сделать (программист может это обработать)

  • Исключения во время выполнения (a.k.a. GoodProgrammerExpected tm , не должны обрабатываться, т.е. NullPointerException)

Эти исключения являются ошибками программиста и происходят из-за плохой практики кодирования (или знаний), и их всегда можно предотвратить, т.е. не проверять границы массивов.

  • Ошибки (т. Е. OutOfMemoryError, следует обрабатывать , а не )

Эти исключения не вменяются программисту, но для среды, с которой он сталкивается, они отличаются от проверенного исключения тем, что программист ничего не может с этим поделать. Например, если системе не хватает памяти,

См. этот ответ для более подробного объяснения.

2 голосов
/ 10 мая 2010

Кстати, вы также можете создавать свои собственные исключения ... например:

coder's revenge

2 голосов
/ 10 мая 2010
  1. Исключением является исправимая ошибка в вашем приложении.

  2. Относительно того, что вы делаете и чего ожидает пользователь. Допустим, у вас есть исключение деления на 0, и ваше приложение является калькулятором. Большинство пользователей ожидают, что появится сообщение, объясняющее, что они разделены на 0.

  3. Вы должны бросать исключения, когда захотите. Вы можете сделать приложение, которое ничего не делает, исключая исключения. Как удивительный текстовый процессор, который выдает исключения каждый раз, когда вы нажимаете клавишу, но когда он перехватывает исключение, он выводит только что набранный вами символ. Кроме того, вы можете сделать потрясающую игру Connect 4, где каждый раз, когда вы выигрываете, выдается исключение.

  4. Существует много типов исключений. Сгенерированное пользователем исключение (выполняется командой throw), системное исключение (пример деления на 0) и т. Д. И т. Д.

0 голосов
/ 01 августа 2015

1- Исключением является событие, которое происходит во время выполнения программы и нарушает нормальный поток инструкций программы.

2- Ошибка «указывает на серьезные проблемы, которые разумное приложение не должно пытаться устранить». в то время как, - Исключение "указывает на условия, которые разумное приложение может захотеть отловить."

3-Мое личное указание: выдается исключение, когда фундаментальное предположение о текущем блоке кода ложно.

4- Проверенные исключения - это, как правило, те, из которых программа может восстановиться, и это может быть хорошей идеей для восстановления из таких исключений программным путем. Примеры включают FileNotFoundException, ParseException и т. Д. Предполагается, что программист проверит эти исключения с помощью блока try-catch или вернет его вызывающей стороне

С другой стороны, у нас есть непроверенные исключения. Это те исключения, которые могут не произойти, если все в порядке, но они случаются. Примеры включают ArrayIndexOutOfBoundException, ClassCastException

0 голосов
/ 23 апреля 2015

Исключительные подклассы представляют ошибки, которые программа может разумно исправить. За исключением RuntimeException и его подклассов (см. Ниже), они, как правило, представляют ошибки, которые программа может ожидать при нормальном режиме работы: например, ошибки сетевого подключения и системные ошибки регистрации.

enter image description here

0 голосов
/ 10 мая 2010

Исключение 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 сбивает все это с толку.

Третье преимущество исключений заключается в том, что они помогают четко определить условия исключений.

Что ж, это столько же учебник, сколько я собираюсьсписывай мне на голову!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...