例外
例外の種類
例外の種類
エラーの種類は大きく以下の3つ。
1.文法エラー
2.実行時エラー
3.論理エラー
1.文法エラー
・文法の誤りによるコンパイルミス
・例はセミコロン忘れ、スペルミスなど
・コンパイルされない
2.実行時エラー
・実行中に不具合が発生することで発生するエラー
・例はあるはずのファイルが削除される、あるはずの値がnull値になっているなど
・コンパイルされる
3.論理エラー
・構文ミスにより、実行結果が意図していたものと異なること
・例は電卓ソフトで3+5が35と出力されるなど
・コンパイルされる
まとめると・・・
3種類あるが
・「2.実行時エラー」に対しては、エラー発生時を想定したコードを記述して対応!
・「1.文法エラー」・「3.論理エラー」は、元々のコードを修正して対応!
例外を表すクラスとその種類
・エラー発生状況毎にクラスが用意されており、継承階層で構成されている
・クラス毎の意味・継承階層図は以下の通り
まとめると・・・
Exception
に対しては、エラー発生時に対応出来るようなコードを記述する必要がある
例外の処理
例外の調べ方
例外はJavaAPIに記載されている
例
例外処理の種類
例外処理の種類は大きく以下の2つ。
1.catch構文
2.throws構文
1.catch構文
catch構文とは
例外が発生した場合の処理を、自身のメソッド内に記述する際に使用する
使用方法
try {
本来の処理
}catch (例外クラス 変数名) {
例外が発生した場合の処理
}finally{
例外があってもなうても必ず実行する処理
}
[処理の流れ]
①try
メソッド内に処理を記述し、例外が発生した場合は、エラークラスのインスタンスをcatch
に渡す
②catch(例外クラス 変数名)
の(例外クラス 変数名)
で例外インスタンスを受け取る。
メソッド内には受け取った後の処理を記述する。
③finally
では、ファイルを閉じる・切断などの処理を実施する。
例外インスタンスが持つ情報
①例外情報の解説文
いわゆる、エラーメッセージ。String getMessage()
で表示。
②スタックトレース
JVMがプログラムのメソッドをどのような順序で呼び出し、どこで例外が発生したか。
void printStackTrace
で内容表示。
例
public static void main (String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("date.txt");//インスタンスの生成
fw.write("hellow");//中にhellowと書き込む
}catch (Exception e) {
System.out.println("何らかの例外が発生しました");
}finally{
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
補足
・catch (Exception e)
はException
の子孫の、例外インスタンスなら全て受け取るという意味
・FileWriterクラスについては以下参照
https://docs.oracle.com/javase/jp/6/api/java/io/FileWriter.html
https://www.sejuku.net/blog/20657
finaly
を省略した書き方
try (
ファイルインスタンスの生成
){
ファイルに対する処理
}catch{
}
()内で開かれた、ファイルやデータベースは、処理終了後に自動でclose
メソッドを呼び出してくれる。
2.throws構文
throws構文とは
例外が発生した場合の処理を、呼び出し元のメソッドにお願いする際に記述する方法
使用方法
メソッド名 throws 例外クラス名1,例外クラス名2
[補足]
・throws
を宣言する事で、try catch文
の記述が義務では無くなる
・呼び出し元メソッドは、try catch文
を記述する必要がある
例外を発生させる方法
考え方
発生した例外を受け取るだけでなく、例外を通知する事が可能
使用方法
throw 例外インスタンス名
例
//mainメソッド
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setAge(-100);
}
}
//Personクラス
public class Person {
int age;
public void setAge(int age) {
if(age<0) {
throw new IllegalArgumentException("年齢は正の数を指定すべきです。");
}
this.age = age;
}
}
//出力結果
Exception in thread "main" java.lang.IllegalArgumentException: 年齢は正の数を指定すべきです。
at Java15.Person.setAge(Person.java:7)
at Java15.Main.main(Main.java:6)
・IllegalArgumentExceptionクラスについては以下参照
https://docs.oracle.com/javase/jp/7/api/
Author And Source
この問題について(例外), 我々は、より多くの情報をここで見つけました https://qiita.com/k_sk193/items/68c32fed4638ae2fa9fa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .