[英]Common underflow and overflow exceptions
我試圖在 Java 中掌握溢出和下溢異常,但找不到任何好的教程。 具體我想學習
任何有用教程的鏈接都可以
好的,OP 談到想要了解堆棧溢出和算術溢出,以及它們相應的下溢。 開始....
int
保存 -2 31和 2 31 -1 之間的值,包括這兩個值。 如果您的號碼超過這些限制,則會發生溢出,並且號碼會“環繞”。 這些不會導致在 Java 中生成異常。StackOverflowError
。 要回答 OP 的其他問題(請參閱評論),當您超出數組的邊界時,會發出IndexOutOfBoundsException
。
在 Java 算術中,上溢或下溢永遠不會拋出異常。 相反,對於浮點算術,該值設置為Not a number
、'infinite' 或零。
要測試這些,您可以使用靜態方法: 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
。
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); }
}
由於這是一個非常古老的問題,因此應該注意,從 Java 8 開始, Math 包提供了“精確”的算術方法,當發生溢出時會觸發異常。
例如
int iv1 = Integer.MAX_VALUE;
int iv2 = Math.addExact(iv1,1);
會觸發 java.lang.ArithmeticException: integer overflow 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.