Chr*_*ung 26
好的,OP谈到想要了解堆栈溢出和算术溢出,以及它们相应的下溢.开始....
int保持在-2 31和2 31 -1 之间的值,包括端值.如果您的数字超过这些限制,则会发生溢出,并且数字"环绕".这些不会导致在Java中生成异常.StackOverflowError发生的时间.要回答OP的另一个问题(参见注释),当你超越数组的边界时,IndexOutOfBoundsException会发出一个.
在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");
}
Run Code Online (Sandbox Code Playgroud)
对于某些操作,您可以获得ArithmeticException,例如dividing by zero在Integer数学中.
我刚刚问了一个相关的问题,关于完整的项目风格方式来处理这个问题.