ゼロ除算

次のようなプログラムはエラーになります。クラスを作成して試してみましょう。

void start() {
    JOptionPane.showMessageDialog(null, 1 / 0);
}

上記の命令を処理すると、メッセージダイアログは表示されずに、Eclipseの「コンソール」というタブに次のようなメッセージが表示されます (表示されない場合は、メニューバーの「ウィンドウ」から「ビューを表示」「コンソール」と選択すると表示されると思います)。

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at j1.lesson02.DivByZeroInt.start(DivByZeroInt.java:20)
    at j1.lesson02.DivByZeroInt.main(DivByZeroInt.java:16)

メッセージの細かい点は多少異なるかもしれませんが、だいたい上記のようになっていると思います。まず、1行目で注目すべきは「/ by zero」という個所です。最初のスラッシュはJavaの割り算の演算子で、by zeroということで「ゼロで割ろうとした」ことを表しています。その手前の「…ArithmeticException」は「算術例外」という意味で、数値計算に関する失敗であることを表しています。

つまり、このプログラムは整数をゼロで割ろうとしてエラーになっていることが分かります。エラーが発生するとプログラムの実行はその時点で打ち切られ、代わりにエラーメッセージを表示します。そのため、このプログラムを実行しても、メッセージダイアログは表示されません。

なお、残りの2行はこのエラーが発生した位置を表しています。「at <パッケージ名>.<クラス名>.start(<クラス名>.java:<行番号>)」という形式で書かれているので、このようなエラーメッセージを見かけたら、該当する行を調べてみましょう。今回の例では、「DivByZeroInt」というクラスを作成して、20行目は「JOptionPane.showMessageDialog(null, 1 / 0)」となっていました。

なお、実数をゼロで割ろうとした場合には先ほどと異なる動きをします (エラーにはなりません)。次のようにプログラムを書き換えて、再度を実行してみてください。

void start() {
    JOptionPane.showMessageDialog(null, 1.0 / 0.0);
}

その他、「-1.0 / 0.0」や「0.0 / 0.0」としてもプログラムはエラーになりません。どのような表示になるか考え、実際に試してみてください。