我试图在java中获得溢出和下溢异常,但无法获得任何好的教程。具体来说,我想学习
任何有用教程的链接都可以
答案 0 :(得分:26)
好的,OP谈到了想要了解堆栈溢出和算术溢出,以及它们相应的下溢。这就是......
int
保持-2 31 和2 31 -1之间的值,包括端值。如果您的数字超过这些限制,则会发生溢出,并且数字“环绕”。这些不会导致在Java中生成异常。StackOverflowError
。要回答OP的另一个问题(请参阅注释),当您超越数组的边界时,会发出IndexOutOfBoundsException
。
答案 1 :(得分:6)
在Java算法中,溢出或下溢将从不抛出异常。相反,对于浮点运算,该值设置为Not a number
,'无限'或零。
要测试这些,您可以使用静态方法:isNaN或isInfinite使用适当的包装类。您可以根据需要处理此问题。例如:
double d1 = 100 / 0.;
if (Double.isNaN(d1)) {
throw new RuntimeException("d1 is not a number");
}
if (Double.isInfinite(d1)) {
throw new RuntimeException("d1 is infinite");
}
对于某些操作,您可以获得ArithmeticException,例如在整数数学中dividing by zero
时。
我刚刚问related question一个完整的项目风格方式来处理这个问题。
答案 2 :(得分:0)
Java没有无符号整数。如果您认为它可能有用,则可以轻松抛出异常。
public class Counter
{
private int counter = 0;
public int increment ()
{
counter += 1;
if (counter < 0)
throw new RuntimeException ("Counter overflow");
else
return counter;
}
public String toString() { return String.valueOf(counter); }
}
答案 3 :(得分:0)
由于这是一个非常古老的问题,需要注意的是,从 Java 8 开始,Math 包提供了“精确”的算术方法,当发生溢出时会触发异常。
例如
<input id="importfile" asp-for="ImportFile" type="file" accept=".xls, .xlsx" />
public IFormFile ImportFile { set; get; }
会触发 java.lang.ArithmeticException: integer overflow .