1

我不明白为什么我在这一行收到此错误:

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

当我把这条线放在 a 中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没有声明它会抛出InvalidAgeException,并且你try/catch周围没有new Vehicle,所以编译器不会编译它。

这就是检查异常的用途:确保调用某些东西的代码要么处理异常条件(try/catch),要么记录它传递它的文件(通过throws子句)。

在您的情况下,您需要添加 atry/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 回答