Как вызвать RuntimeException («не могу найти символ») - PullRequest
32 голосов
/ 04 августа 2010

Я пытаюсь создать исключение в своем коде, например так:

throw RuntimeException(msg);

Но при сборке в NetBeans появляется следующее сообщение:

C:\....java:50: cannot find symbol
symbol  : method RuntimeException(java.lang.String)
location: class ...
        throw RuntimeException(msg);
1 error

Нужноимпортировать что-то?Я неправильно пишу это?Я уверен, что должен делать что-то глупое: - (

Ответы [ 9 ]

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

throw new RuntimeException(msg);

Вам нужен new там. Он создает экземпляр и выбрасывает его, а не вызывает метод.

35 голосов
/ 04 августа 2010

Exception - это Object, как и любой другой в Java. Вам нужно использовать ключевое слово new для создания нового Exception, прежде чем вы сможете throw его.

throw new RuntimeException();

При желании вы также можете сделать следующее:

RuntimeException e = new RuntimeException();
throw e;

Оба фрагмента кода эквивалентны.

Ссылка на учебники для полноты.

15 голосов
/ 04 августа 2010

Как и все остальные, создайте экземпляр объекта перед тем, как его бросить.

Просто хотел добавить один бит; Невероятно редко создавать исключение RuntimeException. Было бы нормально, чтобы код в API генерировал подкласс этого, но обычно код приложения генерировал бы исключение или что-то, что расширяет исключение, но не RuntimeException.

И в ретроспективе я пропустил добавление причины , почему вы используете Exception вместо RuntimeException; @Jay, в комментарии ниже, добавлен полезный бит. RuntimeException не является проверенным исключением;

  • Подпись метода не должна объявлять, что может быть выдано RuntimeException.
  • От абонентов этого метода не требуется перехватывать исключение или каким-либо образом подтверждать его.
  • Разработчики, пытающиеся позже использовать ваш код, не предвидят эту проблему, если не будут внимательно смотреть, и это увеличит нагрузку на обслуживание кода.
6 голосов
/ 04 августа 2010

вам нужно будет его создать, прежде чем выбросить

throw new RuntimeException(arg0) 

PS: Интересно, что в среде IDE Netbeans уже указывалось, что ошибка времени компиляции

4 голосов
/ 04 августа 2010
throw new RuntimeException(msg); // notice the "new" keyword
3 голосов
/ 04 августа 2010

Вам необходимо создать экземпляр RuntimeException, используя new так же, как и для создания экземпляра большинства других классов:

throw new RuntimeException(msg);
1 голос
/ 24 марта 2016
throw new RuntimeException(msg);

в отличие от любых других исключений, я думаю, что RuntimeException - единственное, которое не остановит программу, но все равно может продолжать работать и восстанавливаться, просто распечатав несколько строк исключений?поправьте меня, если я ошибаюсь.

1 голос
/ 18 июля 2014

Только для других: убедитесь, что это новое RuntimeException, а не новое RuntimeErrorException, которому в качестве аргумента требуется ошибка.

0 голосов
/ 10 июня 2019

используя новое ключевое слово, мы всегда создаем экземпляр (новый объект) и бросаем его, не вызывая метод

throw new RuntimeException("Your Message");

You need the new in there. It's creating an instance and throwing it, not calling a method.

int no= new Scanner().nextInt();   // we crate an instance using new keyword and throwing it 

используя новое ключевое слово memory clean [потому что используют ибросить]

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {

        //do your work here..
    }
}, 1000);
...