Как бросить общее исключение в 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 60

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. бросьте общее исключение в нижней части метода. \
  2. бросить пользовательское исключение в случае, если вы не хотите сделать 1.

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

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

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

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