Оптимизация, я думаю, вы найдете, что это, вероятно, мытье. Они оба выступят хорошо, я не думаю, что бросание исключений когда-нибудь станет твоим узким местом. Вы, вероятно, должны быть более обеспокоены тем, для чего предназначена Java (и что ожидают другие Java-программисты), и это вызывает исключения. Java в значительной степени разработана для создания / перехвата исключений, и вы можете поспорить, что разработчики сделали этот процесс максимально эффективным.
Я думаю, что это в основном философия и языковая культура. В Java общепринятая практика заключается в том, что сигнатура метода - это контракт между вашим методом и кодом, вызывающим его. Поэтому, если вы получаете неподходящее значение, вы обычно генерируете непроверенное исключение и позволяете ему обрабатываться на более высоком уровне:
public void setAge(int age)
{
if(age < 0)
{
throw new IllegalArgumentException("Array can't be negative");
}
this.age = age;
}
В этом случае вызывающая сторона нарушила окончание контракта, поэтому вы выплевываете их вводные данные обратно, за исключением. Предложение «throws» предназначено для использования, когда вы по какой-то причине не можете выполнить свой конец контракта.
public void readFile(String filename) throws IOException
{
File myfile = new File(filename);
FileInputStream fis = new FileInputStream(myfile);
//do stuff
fis.read();
//do more stuff
}
В этом случае, как автор метода, вы нарушили свой конец контракта, потому что пользователь дал вам верный ввод, но вы не смогли выполнить их запрос из-за IOException.
Надеюсь, что это поставит вас на правильный путь. Удачи!