【问题标题】:I have trouble using the try-catch method for a exception in java我在使用 try-catch 方法处理 java 中的异常时遇到问题
【发布时间】:2016-04-01 02:14:21
【问题描述】:

我不知道如何成功地尝试捕获异常。如您所见,我已经开始了 try-catch 语句,但不知道如何完成它。我收到错误“ tractorException.java:83: error: unreported exception tractorException; 必须被捕获或声明为抛出 setVehicleID(0); "

import java.io.*;
import java.util.*;
import javax.swing.*;

public class tractorException extends Exception {
    protected int VehicleID; 

    public int setVehicleID(int VehicleID) throws tractorException {
        if (VehicleID <= 0 || VehicleID > 100000) {
            throw new tractorException();
        } else {
            this.VehicleID = VehicleID;
             return this.VehicleID;
        }
    }

    public int getVehicleID() {
        return this.VehicleID;
    }

    tractorException() {
        setVehicleID(0);
    }

    public static void main (String[] args) {
        try {
            throw new Exception("Something went wrong!!");
        } catch (Exception e) {             
        }

【问题讨论】:

  • 你想达到什么目的?一个无限抛出异常的类?
  • 是的,我正在尝试实现一个只抛出异常的类

标签: java oop try-catch


【解决方案1】:

将您的main 方法更改为:

public static void main (String[] args) {
      try {
         throw new tractorException(); // infinite loop ensues
      } catch (Exception e) {
         // this catch doesn't matter
      }
}

发生无限循环是因为tractorException 的构造函数调用setVehicleID(0),而throw new tractorException() 又调用throw new tractorException(),正如您猜到的,它调用setVehicleID(0) ... 到无穷大甚至更远。

【讨论】:

  • 要使程序编译,您还必须声明构造函数throws tractorException
  • 如果你让它抛出tractorException,我认为程序不会编译,我认为(但我不确定)java编译器足够聪明,可以告诉你无限循环会发生。
  • @PaulBoddington 哇哦,你会认为它足够聪明,至少可以发出警告。
【解决方案2】:

必须捕获或声明抛出异常的函数。如您发布的错误日志中所述,您的代码存在的问题在 setVehicleID(0); 行中。

由于setVehicleID()方法抛出异常,任何时候调用这个函数,都必须被捕获或者重新抛出。要修复你的错误,你需要用 try catch 包围这个调用:

  tractorException()
  {
     try{
       setVehicleID(0);
     }
     catch( tractorException e ) {
       // Do something with error
     }
  }

【讨论】:

  • 还想指出 setVehicleID(0) 会产生一个值传入为 0 的异常,因此将调用构造函数,该构造函数将调用 setVehicleID(0).. etc.. etc.. 基本上无限循环
  • 您想要更新您的代码的 tractorException() 以具有如上所示的 try-catch 块。这将解决您当前遇到的编译问题。
【解决方案3】:

试着输入这个

你不能直接调用 setVehicleID 方法,因为它是有风险的方法

tractorException() {
try{
    setVehicleID(0);
}catch(Exception e){

}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2018-06-24
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多