Как бросить 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 уже должна была указать, что ошибка времени компиляции
вам нужно создать экземпляр исключения RuntimeException, используя new
так же, как и для создания экземпляра большинства других классов:
throw new RuntimeException(msg);
только для других: убедитесь, что это новое исключение RuntimeException, а не новое исключение RuntimeErrorException, которое нуждается в ошибке в качестве аргумента.
throw new RuntimeException(msg);
в отличие от любых других исключений я думаю, что RuntimeException является единственным, который не будет останавливать программу, но он все еще может продолжать работать и восстанавливаться, просто распечатайте кучу строк исключений? поправьте меня, если я ошибаюсь.