Exception(例外)とはプログラムは予めどういった処理をするのか、という手順を書いたものですが、状況によっては予期しない事象で正しく処理が行えないことがあります。
そのような予期しない状況をJavaでは例外と呼んでいます。
Javaで発生する例外は以下のようになります。
try-catch文は自分で例外を処理する
try{ 例外が発生しているかどうか調べる文; ... } catch (例外クラス 変数名){ 例外クラス1の例外が発生した時に行う文; ... }
package JSample; public class JSample18_1 { public static void main(String[] args) { int[] myNumbers = {1, 2, 3}; System.out.println(myNumbers[10]); } }実行結果
package JSample; public class JSample18_2 { public static void main(String[ ] args) { try { int[] myNumbers = {1, 2, 3}; System.out.println(myNumbers[10]); } catch (Exception e) { System.out.println("例外が発生しました。"); } } }実行結果
Finallyは自分で例外を処理して、かつ例外の有無に関わらず必ず処理させたい場合に使います。
try{ 例外が発生しているかどうか調べる文; ... } catch (例外クラス 変数名){ 例外クラス1の例外が発生した時に行う文; ... } finally { 例外が発生するしないに関わらず実行する文; ... }例:[JSample18_3.java]
package JSample; public class JSample18_3 { public static void main(String[] args) { try { int[] myNumbers = {1, 2, 3}; System.out.println(myNumbers[10]); }catch (Exception e) { System.out.println("Something went wrong."); }finally { System.out.println("The 'try catch' is finished."); } } }実行結果
自分では処理せず、例外処理を呼び出し元のクラスにスルーする
public void read() throws FileNotFoundException, IOException { //メソッド内容 }例:[JSample18_4.java]
package JSample; import java.io.FileNotFoundException; import java.io.FileReader; public class JSample18_4 { public static void main(String[] args) { String fileName = "sample.txt"; try{ read(fileName); }catch (FileNotFoundException e) { System.out.println("ファイルが存在しませんでした。"); } } public static void read(String fileName) throws FileNotFoundException { FileReader r = new FileReader("sample.txt"); System.out.println("ファイルを読み込みました"); } }実行結果
問題[JEx18_1]
例外インスタンスのgetMessageメソッドを呼び出して取得した値を表示してください。
それ以外の例外が発生した場合、「2つの数値を指定してください」と表示してください。
public class JEx18_1{ public static void main(String[] args){ double weight = Double.parseDouble(args[0]); double height = Double.parseDouble(args[1]); System.out.println( "BMI = " + getBMI(weight,height) ); } public static double getBMI(double weight, double height){ return weight / ( height * height ); } }実行結果1