Хорошо, ребята, я пытался понять это на прошлый день или около того. В моем задании домашней работы я создал как Unchecked, так и Checked Exceptions. Проверяемые исключения, я считаю, что в основном они должны обрабатываться перед компиляцией (с помощью try & catch или бросания его на следующую вещь, которая его вызывает). Для исключенных исключений я не понимаю, как работают пользовательские. Они попадают во время выполнения и дона обязательно нужно бросать или заключать в оболочку с помощью try & catch, но если они обычны, как IDE или что-то знать, что искать? Пример: один из моих непроверенных файлов должен запускаться, если пользователь добавляет покемон, но сторона заполнена, но как я могу сообщить IDE, что это должно произойти? Мой файл Exception выглядит так:
public class PartyIsFullException extends RuntimeException {
public PartyIsFullException() {
super();
}
public PartyIsFullException(String message) {
super(message);
}
}
а затем я хочу реализовать его в этом методе, но idk, как это сделать. Я понимаю, что я не могу их бросить, потому что пользователь не будет их ожидать и поэтому не будет пытаться их поймать.
public void addToParty(String name) throws PartyIsFullException {
boolean exists = false;
for (int i = 0; i < 152; i++) {
exists = (name.equals(pokedex[i]));
}
if (exists) {
throw new PokemonAlreadyExistsException();
} else {
if (partyPos < 6) {
party[partyPos] = name;
partyPos++;
} else {
throw new PartyIsFullException();
}
}
}
Я понимаю, что я не могу их бросить, потому что пользователь не будет их ожидать и поэтому не будет пытаться их поймать.
Вы можете бросить их!
В реальном проекте он должен быть четко документирован.
/*
* @throws PartyIsFullException if isPartyFull() would return true
*/
public void addToParty(String name) throws PartyIsFullException {...}
Обычно исключенное исключение используется для ситуации, когда клиент метода избегает исключительных условий, например:
if(theParty.isPartyFull()) {
// tell the user the party is full
// and they can't add more Pokemon
} else {
theParty.addToParty(thePokemon);
}
И, таким образом, им не нужно явно улавливать это, потому что они уже справляются с этим обстоятельством.
Если исключение выбрано, и на нем нет try
catch
, он будет полностью перекрывать поток. (Для небольшой программы с main
, это означает, что программа вылетает.)
Хотя вы не знаете, может или не может быть выбрано определенное выборочное исключенное исключение из определенного метода, вы все равно можете его поймать (или это суперкласс Exception
). Наличие настраиваемого исключения из предоставленного Java может добавить некоторые полезные сведения, специфичные для вашего исключительного случая (то есть имя исключения должно быть значимым, чтобы было легче читать ваши журналы).
Пользовательское (непроверенное) создание исключения и его контент также могут быть настроены в соответствии с вашими потребностями. Например, конструктор PartyIsFullException
может принимать объект Party
и форматировать его в String.
В случае, если вам не нужно облегчать создание/презентацию непроверенных исключений, RuntimeException
это правильно, чтобы использовать RuntimeException
предполагая, что вы предоставляете описательное сообщение.