Как бросить RuntimeException ("не удается найти символ")

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

throw RuntimeException(msg);

но когда я создаю в NetBeans я получаю эту ошибку:

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

мне нужно что-то импортировать? Я опечатка это? Я уверен, что я, должно быть, делаю что-то глупое: - (

8 ответов


throw new RuntimeException(msg)

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


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

throw new RuntimeException();

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

RuntimeException e = new RuntimeException();
throw e;

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

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


как все уже говорили, создайте экземпляр объекта, прежде чем бросать его.

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

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

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

вам придется создать его экземпляр, прежде чем бросить его

throw new RuntimeException(arg0) 

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


throw new RuntimeException(msg); // notice the "new" keyword

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

throw new RuntimeException(msg);

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


throw new RuntimeException(msg);

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