Исключение уже определенно в этой компиляции блока импорт java.lang.Exception;

Вопрос задан: 8 месяцев назад Последняя активность: 8 месяцев назад
up 0 down

Попытка создания пользовательского утра исключения, расширив класс Exception, который приводит к ошибке

ошибка: Исключение уже определено в этом модуле компиляции

Если вы удалите оператор импорта -> импорт java.lang.Exception

то новый набор ошибок приходит ниже

-------------------- Конфигурация: --------------------

E: \ ArjunJava \ Exception.java: 29: ошибка: несовместимые типы: MyException не может быть преобразован в Throwable

throw new MyException("Array size is less than what you are referencing");
    ^

E: \ ArjunJava \ Exception.java: 35: ошибка: несовместимые типы: MyException не может быть преобразован в Throwable

    catch(MyException me)
          ^

E: \ ArjunJava \ Exception.java: 37: ошибка: не удается найти символ

System.out.println("Exception caught "+me.getMessage()); 
symbol:   method getMessage() location: variable me of type MyException

E: \ ArjunJava \ Exception.java: 15: ошибка: конструктор Exception в классе Exception не может быть применен к данным типам;

super(message);
    ^
required: no arguments
found: String
reason: actual and formal argument lists differ in length

4 ошибки

Процесс завершен.

import java.lang.Exception;

class MyException extends Exception {
   MyException(String message) {
    super(message);
   }
}

public class Exception {
   public static void main (String[] args) {
      // array of size 4. 
      int[] arr = new int[4];//Referring 5th Element 
      try {
        int i = arr[4]; // this statement causes an exception 
        throw new MyException("Referring to element more than Array size");
      } 
      catch(MyException me) {
        System.out.println("Exception caught : "+me.getMessage()); 
      }
   } 
}

Выход:

Исключение пойманы: Со ссылкой на элемент больше, чем размер массива

2 ответа

up 2 down

Проблема с кодом является то, что у вас есть main() определяется внутри класса Exception который уже используется Java и импортированы по умолчанию. Измените имя класса из Exception к чему-то еще и ваш код должен работать нормально. Другой способ подхода к проблеме, если вы не хотите, чтобы изменить имя класса будет использовать полное имя Exception как показано ниже:

class MyException extends java.lang.Exception {

}

Опять же, вам не нужно явно иметь оператор импорта

up 1 down accepted

Проблема здесь заключается в том, что вы определяете класс с именем «Exception» и пытается использовать существующий класс - встроенный класс - названный «java.lang.Exception» в одной и той же программе. Вы должны делать это очень осторожно, используя полное имя «java.lang.Exception» для встроенного в классе, когда вы обратитесь к нему:

class MyException extends java.lang.Exception

Если убрать «импорт» и изменить декларацию MyException к вышесказанному, то ваш класс будет компилироваться. Другой способ DEA с этим было бы назвать свой класс программа что-то кроме «Exception», как «ExceptionTest».

К сожалению, до сих пор не будет вести себя совсем, как вы хотите; линия с пометкой «это утверждение вызывает исключение» действительно сгенерирует исключение, прежде чем ваш «бросить» заявление получает возможность выполнить. Но теперь, когда ваш код компилируется, вы можете поэкспериментировать сами.