Fieds_labo3
基本-例外
最終更新:
fieds_labo3
-
view
基本 例外
1.例外処理基本
- 発生した例外がcatchに見つからない場合、コール元のcatchを探す。(自動ネストになる)
- catchブロックは、処理したい例外の数分、複数ブロック記述できる
- catchで処理できない例外が発生した場合、プログラムエラー終了
- catchブロック以降の処理は、tryブロックが正常に進んだ後、またはtryで例外が発生しchatchブロックの処理が終わった後に実行される。
- 通常、例外のクラス=catchする例外(クラス)名、変数名=e
try {
例外の発生が予測される文; ・・・
}
catch(例外のクラス 変数名){
catch(例外のクラス 変数名){
例外が起きたときに処理; ・・・
}
2.例外処理finally
- finallyブロックは、tryが正常、tryで例外発生しcatchで処理、tryで例外が発生しcatchせずのいずれのパターンでも必ず最後に実行される。
try {
例外の発生が予測される文; ・・・
}
catch(例外のクラス 変数名){
catch(例外のクラス 変数名){
例外が起きたときに処理; ・・・
}
finally{
finally{
必ず最後に処理;
}
3.例外クラス
- 例外はjava.langのThrowableクラスのサブクラスのオブジェクト。それ以外は受け取れない。
- クラス階層
Throwable--+--Error +--Exception--+--IOException etc. +--RuntimeException --+--
- Errorはプログラムが実行不能となるエラー。例外処理対象外。
- Exceptionは例外処理対象。最上位のため、このクラスを指定するとすべての例外をcatch可。
4.例外スルー
- Throwableクラスのサブクラスを拡張して例外クラスを宣言
class AbcException extends Exception
{
}
{
}
- 例外スルーメソッド宣言
戻り値の型 メソッド名(引数リスト) throws 例外クラス
- 例外スルー
throw 例外オブジェクト変数;
public void abc(int a) throws AbcException
{
public void abc(int a) throws AbcException
{
if(条件){ AbcException e = new AbcException(); throw e; }
}
5.例外を上位に報告
- 例外をそのまま上位にスルー
public void def(int x) throws AbcException
{
{
例外の発生が予測される文;
}
6.例外処理まとめ
- メソッドの例外処理は2つ
- try~catchを使用して、メソッド内で例外処理
- throwsで上位メソッドに例外を報告。上位おまかせ。
7.例外処理が不要なクラス
- Errorのサブクラス:プログラムの実行停止
- RuntimeExceptionのサブクラス:上の同じ理由か?