Как бросить общее исключение в Java?
рассмотрим следующую простую программу. Программа имеет два файла:
Vehicle.java:
class Vehicle {
private int speed = 0;
private int maxSpeed = 100;
public int getSpeed()
{
return speed;
}
public int getMaxSpeed()
{
return maxSpeed;
}
public void speedUp(int increment)
{
if(speed + increment > maxSpeed){
// throw exception
}else{
speed += increment;
}
}
public void speedDown(int decrement)
{
if(speed - decrement < 0){
// throw exception
}else{
speed -= decrement;
}
}
}
И Файл HelloWorld.java:
public class HelloWorld {
/**
* @param args
*/
public static void main(String[] args) {
Vehicle v1 = new Vehicle();
Vehicle v2 = new Vehicle();
// do something
// print something useful, TODO
System.out.println(v1.getSpeed());
}
}
Как вы можете видеть в первом классе, я добавил комментарий ("// throw exception"), где я хотел бы бросить исключение. Я должен определить свой собственный класс исключений или есть какой-то общий класс исключений в Java я могу использовать?
8 ответов:
Вы можете создать свой собственный класс исключений:
public class InvalidSpeedException extends Exception { public InvalidSpeedException(String message){ super(message); } }
в коде:
throw new InvalidSpeedException("TOO HIGH");
вы можете использовать IllegalArgumentException:
public void speedDown(int decrement) { if(speed - decrement < 0){ throw new IllegalArgumentException("Final speed can not be less than zero"); }else{ speed -= decrement; } }
Ну есть много исключений, чтобы бросить, но вот как вы бросаете исключение:
throw new IllegalArgumentException("INVALID");
и да, вы можете создавать свои собственные пользовательские исключения.
Edit: также обратите внимание на исключения. Когда вы бросаете исключение (как выше), и вы ловите исключение:
String
что вы предоставляете в исключении можно получить доступ броситьgetMessage()
метод.try{ methodThatThrowsException(); }catch(IllegalArgumentException e) { e.getMessage(); }
это действительно зависит от того, что вы хотите сделать с этим исключением после того, как вы его поймаете. Если вам нужно дифференцировать ваше исключение, то вы должны создать свой собственный
Exception
. В противном случае вы могли бы простоthrow new Exception("message goes here");
самый простой способ сделать это будет что-то вроде:
throw new java.lang.Exception();
однако следующие строки будут недоступны в вашем коде. Итак, у нас есть два пути:
- бросьте общее исключение в нижней части метода. \
- бросить пользовательское исключение в случае, если вы не хотите сделать 1.
Java имеет большое количество встроенных исключений для различных сценариев.
в этом случае, вы должны выбросить
IllegalArgumentException
, так как проблема заключается в том, что вызывающий передал плохой параметр.
вы можете определить свой собственный класс исключений, расширяющий java.ленг.Исключение (это для проверенного исключения - те, которые должны быть пойманы), или расширение java.ленг.RuntimeException - эти исключения не должны быть пойманы. Другое решение-просмотреть Java API и найти подходящее исключение, описывающее вашу ситуацию: в этом конкретном случае я думаю, что лучшим было бы
IllegalArgumentException
.