Как бросить общее исключение в Java? - PullRequest
62 голосов
/ 04 августа 2011

Рассмотрим эту простую программу.В программе есть два файла:

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());
    }

}

Как вы можете видеть в первом классе, я добавил комментарий ("// выбросить исключение"), где я хотел бы бросить исключение.Нужно ли мне определять собственный класс для исключений или есть какой-то общий класс исключений в Java, который я могу использовать?

Ответы [ 8 ]

100 голосов
/ 04 августа 2011

Вы можете создать свой собственный класс исключения:

public class InvalidSpeedException extends Exception {

  public InvalidSpeedException(String message){
     super(message);
  }

}

В вашем коде:

throw new InvalidSpeedException("TOO HIGH");
41 голосов
/ 04 августа 2011

Вы можете использовать IllegalArgumentException:

public void speedDown(int decrement)
{
    if(speed - decrement < 0){
        throw new IllegalArgumentException("Final speed can not be less than zero");
    }else{
        speed -= decrement;
    }
}
13 голосов
/ 04 августа 2011

Ну, есть много исключений, которые вы можете сгенерировать, но вот как вы можете сгенерировать исключение:

throw new IllegalArgumentException("INVALID");

Также да, вы можете создавать свои собственные исключения.

Редактировать: Также обратите внимание наисключения.Когда вы выбрасываете исключение (как описано выше) и перехватываете исключение: к String, который вы указали в исключении, можно получить метод getMessage().

try{
    methodThatThrowsException();
}catch(IllegalArgumentException e)
{
  e.getMessage();
}
6 голосов
/ 04 августа 2011

Это действительно зависит от того, что вы хотите сделать с этим исключением после того, как вы его поймаете.Если вам нужно дифференцировать свое исключение, вам нужно создать свой пользовательский Exception.В противном случае вы могли бы просто throw new Exception("message goes here");

5 голосов
/ 30 ноября 2016

Самый простой способ сделать это - что-то вроде:

throw new java.lang.Exception();

Однако следующие строки будут недоступны в вашем коде.Итак, у нас есть два способа:


  1. сгенерировать общее исключение в нижней части метода.\
  2. выдает пользовательское исключение на случай, если вы не хотите делать 1.
4 голосов
/ 04 августа 2011

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

В этом случае вы должны выбросить IllegalArgumentException, поскольку проблема заключается в том, что вызывающий объект передалневерный параметр.

1 голос
/ 04 августа 2011

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

1 голос
/ 04 августа 2011

Вы можете определить свой собственный класс исключений, расширяющий java.lang.Exception (это для проверенного исключения - эти, которые должны быть перехвачены), или расширение java.lang.RuntimeException - эти исключения не должны быть перехвачены.Другое решение состоит в том, чтобы просмотреть Java API и найти соответствующее исключение, описывающее вашу ситуацию: в данном конкретном случае я думаю, что лучшим будет IllegalArgumentException.

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