Подтвердить что ты не робот

Как сделать общее исключение в 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, который я могу использовать?

4b9b3361

Ответ 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

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