Как сделать общее исключение в 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, который я могу использовать?
Ответы
Ответ 1
Вы можете создать свой собственный класс Exception:
public class InvalidSpeedException extends Exception {
public InvalidSpeedException(String message){
super(message);
}
}
В вашем коде:
throw new InvalidSpeedException("TOO HIGH");
Ответ 2
Вы можете использовать IllegalArgumentException:
public void speedDown(int decrement)
{
if(speed - decrement < 0){
throw new IllegalArgumentException("Final speed can not be less than zero");
}else{
speed -= decrement;
}
}
Ответ 3
Ну, есть много исключений для броска, но вот как вы делаете исключение:
throw new IllegalArgumentException("INVALID");
Также да, вы можете создавать свои собственные пользовательские исключения.
Изменить: Также обратите внимание на исключения. Когда вы генерируете исключение (например, выше), и вы обнаруживаете исключение: к String
, который вы предоставляете в исключении, можно получить доступ к методу getMessage()
.
try{
methodThatThrowsException();
}catch(IllegalArgumentException e)
{
e.getMessage();
}
Ответ 4
Это действительно зависит от того, что вы хотите сделать с этим исключением после того, как поймаете его. Если вам нужно отличить свое исключение, вам нужно создать свой собственный Exception
. В противном случае вы могли бы просто throw new Exception("message goes here");
Ответ 5
Самый простой способ сделать это:
throw new java.lang.Exception();
Однако следующие строки были бы недостижимы в вашем коде. Итак, у нас есть два пути:
- бросить общее исключение в нижней части метода. \
- создайте собственное исключение, если вы не хотите делать 1.
Ответ 6
Java имеет большое количество встроенных исключений для разных сценариев.
В этом случае вы должны выбросить IllegalArgumentException
, так как проблема в том, что вызывающий передал плохой параметр.
Ответ 7
Вы можете определить свой собственный класс исключений, расширяющий java.lang.Exception(что для проверенного исключения - это должно быть уловлено) или расширение java.lang.RuntimeException - эти исключения не должны быть пойманы. Другое решение - пересмотреть Java API и найти соответствующее исключение, описывающее вашу ситуацию: в этом конкретном случае я считаю, что лучшим будет IllegalArgumentException
.
Ответ 8
Это зависит, вы можете бросить более общее исключение или более конкретное исключение. Для более простых методов достаточно общих исключений. Если метод является сложным, то бросание более конкретного исключения будет надежным.