необъявленное исключение должно быть перехвачено или объявлено выброшенным

Я не понимаю, почему я получаю эту ошибку в этой строке:

Vehicle v = new Vehicle("Opel",10,"HTG-454");

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

public static void main(String[] args)  {
  Vehicle v = new Vehicle("Opel",10,"HTG-454");

  Vector<Vehicle> vc =new Vector<Vehicle>();
  vc.add(v);

  Scanner sc = new Scanner(System.in);
  boolean test=false;
  while(!test) 
    try {
      String name;
      int i = 0;
      int say;
      int age;
      String ID;

      System.out.println("Araba Adeti Giriniz...");
      say = Integer.parseInt(sc.nextLine());

      for(i = 0; i<say; i++) {
        System.out.println("Araba markası...");
        name = sc.nextLine();

        System.out.println("araba yası...");
        age = Integer.parseInt(sc.nextLine());

        System.out.println("araba modeli...");
        ID = sc.nextLine();
        test = true;   

        vc.add(new Vehicle(name, age, ID));
      } 
      System.out.println(vc);
    } catch (InvalidAgeException ex) {
      test=false;
      System.out.println("Hata Mesajı: " + ex.getMessage());
    }           
  }     
}

и это мой конструктор в классе транспортных средств;

public Vehicle(String name, int age,String ID )throws InvalidAgeException{
        this.name=name;
        this.age=age;
        this.ID=ID;

person mehmet    schedule 12.12.2012    source источник
comment
проверьте, передаете ли вы правильные значения (т. е. правильный тип данных) в конструктор транспортного средства — это поможет, если вы можете опубликовать здесь определение конструктора.   -  person Waqas    schedule 12.12.2012
comment
но на этот раз блок try/catch не работает.. покажите нам, как вы пытались поймать   -  person Subin Sebastian    schedule 12.12.2012
comment
Мне также было бы интересно посмотреть, как это даже компилируется, поскольку у него не равное количество левых и правых фигурных скобок... ;) (Я предполагаю, что вам не хватает { после while(!test)).   -  person brimborium    schedule 12.12.2012
comment
@brimborium: по-видимому, нет, сообщение об ошибке в заголовке вопроса является ошибкой времени компиляции.   -  person T.J. Crowder    schedule 12.12.2012
comment
@T.J.Crowder Тогда мое исправление поможет, я думаю... ;)   -  person brimborium    schedule 12.12.2012
comment
Предложение: используйте IDE, которая может переформатировать ваш код, а также предлагать и фактически вносить исправления в ваш код. По крайней мере, NetBeans может, возможно, и Eclipse. Такая IDE может точно сказать вам, какое исключение вы не перехватываете и что его генерирует, и даже добавить try-catch или throws в ваш код одним щелчком мыши.   -  person hyde    schedule 12.12.2012


Ответы (1)


Должно быть Дело в том, что конструктор Vehicle объявляет проверенное исключение. Ваш код, вызывающий его в main, не объявляет это проверенное исключение и не обрабатывает его, поэтому компилятор жалуется на это.

Теперь, когда вы разместили конструктор Vehicle, мы видим, что он объявляет, что выдает InvalidAgeException:

public Vehicle(String name, int age,String ID )throws InvalidAgeException{
// here ---------------------------------------^------^

Ваш main не объявляет, что он генерирует InvalidAgeException, и у вас нет try/catch вокруг new Vehicle, поэтому компилятор не будет его компилировать.

Это то, для чего нужны проверенные исключения: обеспечение того, чтобы код, вызывающий что-то, либо обрабатывал исключительное условие (try/catch), либо документировал, что он передает его (через предложение throws).

В вашем случае вам нужно будет добавить try/catch, так как вы не должны main объявлять проверенные исключения, например:

public static void main(String[] args)  {
  try {
    Vehicle v = new Vehicle("Opel",10,"HTG-454");
    // ...as much of the other code as appropriate (usually most or all of it)...
  }
  catch (InvalidAgeException ex) {
    // ...do something about it and/or report it...
  }
}
person T.J. Crowder    schedule 12.12.2012
comment
Точно. Кажется, что вопрос обновлен конструктором транспортных средств, возможно, обновите этот ответ, чтобы он соответствовал. - person hyde; 12.12.2012
comment
@mehmet: Рад, что помог! - person T.J. Crowder; 12.12.2012