Не исключение-исключение в Java? - PullRequest
2 голосов
/ 28 марта 2012

Есть ли в java класс библиотечных исключений, что означает на самом деле не ошибку, а хорошее завершение?Я знаю, что могу создать свой собственный класс или использовать null, но хочу знать.

РЕДАКТИРОВАТЬ 1

Я хочу использовать объект исключения как возврат старой модыкод для метода, поэтому мне нужно что-то эквивалентное ERROR_SUCCESS код в Win32 API.

Ответы [ 8 ]

6 голосов
/ 28 марта 2012

Исключения в Java предназначены только для аварийного завершения. Использование их для обозначения правильного завершения должно считаться очень плохой практикой.

Вместо этого вы можете использовать возвращаемые значения.

1 голос
/ 28 марта 2012

Чтобы прямо ответить на ваш вопрос: Нет. Нет стандартного исключения Java, которое означает «это нормальное завершение».

Если вы хотите, вы можете определить пользовательское исключение, которое означает это для вашего приложения.

Тем не менее,

... использование исключения для "нормального потока управления" противоречит строгим рекомендациям разработчиков Java и правилу "Best Practice" Java, которое в значительной степени универсально. Это не значит, что вы никогда не должны делать это. Просто случаи, когда это оправдано, являются ОЧЕНЬ РЕДКИМИ. (И вам нужно будет предпринять специальные шаги, чтобы избежать крайне неэффективного кода ...)

Во всяком случае, тот факт, что (почти) всегда ужасная идея использовать исключения для нормального управления потоком, объясняет, почему стандартное исключение никогда не создавалось. Разработчики Java явно не хотели поощрять эту практику.

1 голос
/ 28 марта 2012

Самым близким к сигналу "хорошего завершения", который я могу придумать, является не исключение, а вызов System.exit(int) с 0 в качестве аргумента, чтобы указать операционной системе, чтоПрограмма успешно завершилась.Из javadocs:

Завершает работающую в настоящее время виртуальную машину Java.Аргумент служит кодом состояния;условно, ненулевой код состояния указывает на ненормальное завершение.Этот метод вызывает метод выхода в классе Runtime.Этот метод никогда не возвращает нормально.

Как было указано, исключение составляет , а не , которое используется для информирования о "хорошем завершении", а совсем наоборот.

0 голосов
/ 28 марта 2012

Как и в некоторых других ответах, когда нет исключений, ничего не возникает.

Таким образом, вы можете просто добавить свой код для "без исключения" в блок try после остальных инструкций.Что-то вроде:

try{
  //code here

  //code of no exception
}catch(Exception e){
  //nothing or exception code
}

или вы можете просто создать свое собственное исключение, создав класс, расширяющий Exception

0 голосов
/ 28 марта 2012

Может быть, вы имеете в виду InterrupedException ?Этот брошен, когда вы хотите завершить поток изящно.

0 голосов
/ 28 марта 2012

Зависит от того, что вы определяете как «хорошее завершение». Полагаю, является ли исключение безопасности хорошим, потому что оно остановило кого-то от взлома вашей системы? Это не совсем ошибка, но это ненормальная ситуация, с которой вам нужно разобраться.

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

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

0 голосов
/ 28 марта 2012

Исключения означают, что что-то пошло не так.Различные исключения изображают различные элементы, которые пошли не так, что приведет к завершению программы, если не будет обработано.Успешное завершение не является исключением.

Я думаю, что вам нужно либо вернуть определенное значение, либо заставить ваше приложение запускать что-то вроде event.В этом случае исключение броска (по крайней мере, для меня) не рекомендуется.

0 голосов
/ 28 марта 2012

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

Итак, если вы хотите вернуть «success»: return true или некоторое перечисление Result.SUCCESS.

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