Javaでオーバーフローとアンダーフローの例外を取得しようとしていますが、すばらしいチュートリアルを取得できませんでした。具体的に学びたい
- それらは互いにどのように異なりますか?
- これらの例外のサブクラスは何ですか?
- どのシナリオでそれらがスローされますか?
- それらのどれをどのように処理できますか?
- それらに関連するベストプラクティスは何ですか?
便利なチュートリアルへのリンクは
さて、OPは、スタックオーバーフローと算術オーバーフローの両方、およびそれらに対応するアンダーフローについて知りたいと話しました. ここに行きます....
int
の値を保持します。数値がこれらの制限を超えると、オーバーフローが発生し、数値が「ラップ アラウンド」します。これらにより、Java で例外が生成されることはありません。StackOverflowError
それが起こるとき、あなたは得ます。OP の他の質問 (コメントを参照) に答えるには、配列の境界を超えると anIndexOutOfBoundsException
が発行されます。
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
これを処理するための完全なプロジェクト スタイルの方法について、関連する質問をしました。
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); }
}