1

この行でこのエラーが発生する理由がわかりません。

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());
    }           
  }     
}

これは、Vehicle クラスのコンストラクターです。

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

1 に答える 1

2

Vehicleコンストラクターがチェック済み例外を宣言していることですそれを呼び出すコードはmain、チェックされた例外を宣言することも処理することもしないため、コンパイラはそれについて不平を言います。

コンストラクターを投稿したVehicleので、それがスローすることを宣言していることがわかりますInvalidAgeException

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

あなたmainは をスローすることを宣言しておらず、 の周りにInvalidAgeExceptionaがないため、コンパイラはそれをコンパイルしません。try/catchnew 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...
  }
}
于 2012-12-12T08:49:11.787 に答える