类中的Java自定义异常处理

类中的Java自定义异常处理,java,exception,Java,Exception,我正在使用netbeans,并创建了以下异常类: public class VehicleException extends Exception{ private String matricula; private Calendar dataMatricula; private ModelVehicle model; private int causa; public VehicleException(int causa, Object val

我正在使用netbeans,并创建了以下异常类:

public class VehicleException extends Exception{
    private String matricula;
    private Calendar dataMatricula;
    private ModelVehicle model;

    private int causa;

        public VehicleException(int causa, Object valor) throws Exception {
        this.causa = causa;
        switch (causa) {
            case 1:
                dataMatricula = (Calendar) valor;
                break;
            case 2:
                matricula = (String) valor;
                break;
            case 3:
                model = (ModelVehicle) valor;
                break;

            default:
                throw new Exception("Utilització errònia en construir VehicleException. Causa: " + causa);
        }
    }

         @Override
    public String getMessage() {
        switch (causa) {
            case 1:
                return "dataMatricula erroni: " + dataMatricula + " Ha de contenir valor";
            case 2:
                return "matricula erroni: " + matricula + " Ha de contenir valor";
            case 3:
                return "Model erroni: " + model + " Ha de contenir valor";
            default:
                return "";
        }
    }
在我的课程“Vehicle”中,我遇到了这种异常:

公共级车辆{
私有弦矩阵;
私家车模型;
私人日历数据矩阵;
公共车辆(字符串矩阵、模型车辆模型、日历数据矩阵)抛出VehicleeException{
刚毛母质(母质);
setDataMatricula(dataMatricula);
setModelVehicle(模型);
}
公共字符串getMatricula(){
回归矩阵;
}
公共模型车辆getModelVehicle(){
收益模型;
}
公共日历getDataMatricula(){
返回数据矩阵;
}
公共最终无效setMatricula(字符串matricula)抛出VehicleeException{
if(matricula==null | | matricula.compareTo(“”==0){
抛出新车辆异常(2,Matcula);
}
这个。matricula=matricula;
}
public void setModelVehicle(ModelVehicle model)抛出VehicleeException{
if(model==null){
抛出新车异常(3,车型);
}
否则{
this.model=模型;
}
}
public void setDataMatricula(日历c)引发车辆异常{
如果(c==null){
抛出新车辆异常(1,c);
}
this.dataMatricula=c;
}
当我尝试编译时,在setter方法中,我得到以下消息:

错误:未报告的异常;必须捕获或声明为 被抛弃 抛出新车辆异常(2,matricula);C:\Users\Ivan\Desktop\Examen isidrer\M03-uf5\Exmaenm03uf5\src\info\infomila\Vehicle.java:55:错误: 未报告的异常;必须捕获或声明为 扔 抛出新车辆异常(3,型号);C:\Users\Ivan\Desktop\Examen isidrer\M03-uf5\Exmaenm03uf5\src\info\infomila\Vehicle.java:64:错误: 未报告的异常;必须捕获或声明为 扔 抛出新车辆异常(1,c)


我不太明白为什么会发生这种情况,显然setter方法有一个“抛出VehicleeException”。VehicleeException的构造函数本身可以抛出一个异常:

public VehicleException(int causa, Object valor) throws Exception {
                                                 ^^^^^^^^^^^^^^^^
这意味着您的调用范围需要从构造函数处理/重新抛出该异常,或者您可以选择这样做,而不是抛出它

default:
    super.addSuppressed(new Exception("Utilització errònia en construir VehicleException. Causa: " + causa));

VehicleeException
的构造函数本身可以引发异常:

public VehicleException(int causa, Object valor) throws Exception {
                                                 ^^^^^^^^^^^^^^^^
这意味着您的调用范围需要从构造函数处理/重新抛出该异常,或者您可以选择这样做,而不是抛出它

default:
    super.addSuppressed(new Exception("Utilització errònia en construir VehicleException. Causa: " + causa));

从传递给
异常
构造函数的消息中,我通常倾向于在这里抛出
运行时异常
。@Izruo如果他们抛出
运行时异常
,那么将永远看不到
车辆异常
,因此这允许两个异常都出现在错误日志中。我的观点是
异常
不是RMALY
被抑制
,当它是由于引发其他一些
异常
而导致的。当程序员在其代码中使用错误的常量时(在本例中,这是引发
异常
)将引发此异常。但说到日志记录,这里有一个要点。从传递给
异常
构造函数的消息中,我通常倾向于在这里抛出
运行时异常
。@Izruo如果他们抛出
运行时异常
,那么将永远看不到
车辆异常
,因此这允许两个异常都出现在er中ror日志。我的观点是,由于抛出其他
异常
而导致的
异常
通常被抑制。当程序员在其代码中使用错误的常量时(在本例中是抛出
异常
),将抛出此异常.但是说到日志记录,你有一个要点。