如何在另一个方法中使用java中的用户定义的异常

时间:2015-11-11 01:40:33

标签: java exception

我想创建一个set方法来插入特定地点的最高温度,我希望该温度为Double类型,该方法将检查输入的数字是否为> = 100或<= 100 如果是,则将其插入最高温度范围。 否则我必须抛出一个用户定义的异常,告诉我我输入的数字超出了假定的限制!

我用这种方式编写了Exception和方法:

public class OutOfSensibleLimits extends Exception
{
private Double max;
public OutOfSensibleLimits(Double max)
  {
this.max = max;
  }
public Double getMax()
 {
return max;
 }
public String toString()
  {
return "The maximum Tempreture you entered: '" + maxTemp +
"' is out of sensible limits.";
  }
}



public void setMaxTemp(Double max){

   if ( max >= -100 || max <= 100)
   {
      maxTemp = max;
   }
    else throw new OutOfSensibleLimits();
       }

它给了我一个错误,我做错了什么?

1 个答案:

答案 0 :(得分:2)

问题:

  1. 这不是异常的工作原理 - 如果你想让它显示一个字符串,你需要用适当的字符串调用相应的超级构造函数,并且
  2. 您没有正确调用自己的异常构造函数。你已经把它写成接受一个Double,而你没有传入Double(你没有传递任何东西)。
  3. toString方法是不必要的并且令人困惑,因为它永远不会被调用,并且永远不会看到String。
  4. 您声明"and it gives me an error,...",但未向我们显示任何错误消息。我猜测编译器抱怨你没有正确调用你的类的构造函数,但请不要让我们猜测 - 显示完整的未删节错误消息
  5. 您的setMaxTemp使用错误的布尔运算符:if ( max >= -100 || max <= 100)。这始终为true。您想改用&&
  6. 建议:

    • 是的,传入构造函数的两倍
    • 然后使用该double创建一个传递给super的构造函数的相应错误/异常消息。
    • 删除异常类的字段和toString()方法。
    • 最重要的是,我建议您在尝试其他任何事情之前先阅读Exception tutorial
    • 当你使事情变得过于复杂时,也会简化。你的异常类很容易就是一个构造函数,就是这样。
    • 确保可能抛出异常的方法声明它会抛出此异常。

    例如:

    public class TestSensibleLimits {
        private Double maxTemp;
    
        public void setMaxTemp(double max) throws OutOfSensibleLimits {
            if (max >= -100 && max <= 100) { // use && not ||
                maxTemp = max;
            } else
                throw new OutOfSensibleLimits(max);
        }
    
        public Double getMaxTemp() {
            return maxTemp;
        }
    
        public static void main(String[] args) {
            TestSensibleLimits test = new TestSensibleLimits();
            try {
                test.setMaxTemp(200);
            } catch (OutOfSensibleLimits e) {
                e.printStackTrace();
            }
        }
    
    }
    

    @SuppressWarnings("serial")
    public class OutOfSensibleLimits extends Exception {
        private static final String FORMAT = "The maximum Temperature you "
                + "entered: %.2f is out of sensible limits.";
    
        public OutOfSensibleLimits(Double max) {
            super(String.format(FORMAT, max));
        }
    }