2017-01-21 4 views
0

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

public class Frazione { 
    private int num; 
    private int den; 

    public Frazione(int x, int y) throws FrazioneException { 
     if (y == 0) { 
      throw new FrazioneException(); 
     } 
     num = x; 
     den = y; 
    } 

    /*public Frazione(int x){     THAT'S HOW IT SHOULD BE BASED 
               ON THE EXCERCISE BUT IT WON'T 
               COMPILE BECAUSE THIS ISN'T THE 
               FIRST STATEMENT 
     try{ 
      this(x,1); 
     }catch(FrazioneException e){ 
      System.err.print("errore: "+e); 
     } 
    }*/ 
    /*public Frazione(int x){ 
      this(x,1);       IF I TRY THIS WAY I'LL BE IN 
               AN UNREPORTED EXCEPTION PROBLEM 
    }*/ 
    public int getNum() { 
     return num; 
    } 

    public int getDen() { 
     return den; 
    } 
} 

есть способ использовать try и catch с этим() заявлением?

+1

Почему вы не выбрали 'IllegalArgumentException' (который наследует от RuntimeException) вместо вашего исключенного исключения FrazioneException? –

+0

Как насчет 'public Frazione (int x) throws FrazioneException { это (x, 1); } ' –

ответ

2

Да, это не работает. Вы должны были бы выполнить два противоречивых требования:

  1. this вызов должен быть первым оператором
  2. this вызов должен быть в try..catch заявлении.

Так что это невозможно.

Что вы можете сделать:

  • Если вы хотите, чтобы бросить проверяемое исключение в конструкторе, бросить его и в другой. Но это не имеет никакого смысла, потому что он никогда не будет брошен, потому что вы никогда не проходите y=0
  • Преобразование FrazioneException в исключение времени выполнения и удаление throws.
  • Попробуйте решить ваши требования, не бросать исключения из конструктора (я обычно избегаю, потому что это часто вызывает слишком много проблем. Как один у вас есть)
0

Если есть несколько конструкторов, и вы используете this ключевое слово внутри конструктора для вызова другого конструктора, вызов другого конструктора (this()) должен быть первой строкой конструктора.

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