2014-01-08 3 views
1

Здесь я использовал throws в сигнатуре метода, когда я собираюсь вызвать этот метод из какого-то другого, где еще не просил обработать исключение.Метод вызова не просит обработать исключение, когда я использую throws

public class Exception { 

     int a, b, c; 

     void set(String data[]) throws NumberFormatException, ArrayIndexOutOfBoundsException { 
      a = Integer.parseInt(data[0]);//convert the string into int. eg1.("12" ---> 12) eg2.("df23" ---> fail) 
      b = Integer.parseInt(data[1]); 
      c = 0; 
     } 

     void divide() throws ArithmeticException { 
      c = a/b; 
     } 

     void disp() { 
      System.out.println(a + "/" + b + " = " + c); 
     } 
    } 

ответ

3

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

Да, поскольку оба они являются RuntimeException и не должны быть пойманы.

Прочтите учебник по java о exceptions and unchecked exceptions.

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

Помимо комментарий user3168013 в

как мы можем в состоянии преобразовать непроверенное исключение проверяемого исключения.

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

Например определить ваш проверил исключение

public class DataFormatException extends Exception { 
    public DataFormatException(Throwable cause) { 
     super(cause); 
    } 
} 

, а затем бросить свой собственный

void set(String data[]) throws DataFormatException { 
    try { 
     a = Integer.parseInt(data[0]);// convert the string into int. 
             // eg1.("12" 
             // ---> 12) eg2.("df23" ---> fail) 
     b = Integer.parseInt(data[1]); 
     c = 0; 
    } catch (NumberFormatException e) { 
     throw new DataFormatException(e); 
    } catch (ArrayIndexOutOfBoundsException e) { 
     throw new DataFormatException(e); 
    } 
} 

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

+0

Как пользователь класса узнает о исключении времени выполнения и как его обрабатывать. – user3168013

+0

Вы можете обрабатывать их так же, как проверенные исключения. Используйте try/catch. Пользователь класса будет знать только, что ваш метод генерирует исключение RuntimeException, если вы сообщите ему (javadoc или объявите их в сигнатуре метода). Я бы порекомендовал вам прочитать http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html –

+0

Могу ли я использовать throw для обработки исключения. – user3168013

1

Оба Исключения составляют unchecked Exception. Unchecked Exception обрабатываются во время выполнения.

Свой выбор разработчика, как обрабатывать или не запускать Exception, компилятор никогда не заставляет вас обращаться.

Подробнее об обработке Runtime Exception.

Смежные вопросы