catch
日本語 | 捕獲 |
英語 | catch |
ふりがな | きゃっち |
フリガナ | キャッチ |
投げられた例外を止めるための予約語。
tryで囲まれた範囲内で投げられる例外を拾うために使用する。catchで止められなければ、例外はメソッドの外へと抜けていく。
「try{ 例外が投げられる範囲 }catch( 止める例外 変数 ) { 行う処理 }」という構文で、「止める例外」が投げられた場合に「行う処理」が実行される。
拾うことのできる例外は、完全に一致した例外か、もしくはサブクラスの例外のみ。異なる例外は拾うことができず、外へ逃げていく。
catchで指定した例外のサブクラスも拾うことができるため、親の方、つまりExceptionクラスに近ければ近いほど、多くの例外を拾うことができる。
拾った例外は「catch( 止める例外 変数 )」の「変数」に格納される。これは、例外を投げる際に作られたインスタンスの参照がそのまま格納される。そのため、投げられた例外が「止める例外」のサブクラスの場合、変数にはそのサブクラスの参照が格納されていることになる。
catchはひとつのtryに対して複数用意することができる。try内で例外が投げられた場合、上から順にcatchの例外クラスと同じかそのサブクラスかを調べ、そうであればそのcatch内のみが処理される。
この「catchの並び」にスーパークラスとサブクラスを混在させる場合、スーパークラスを上に、サブクラスを下にすると、サブクラスでのcatchは意味がないためコンパイルエラーとなる。逆に、サブクラスを上に、スーパークラスを下にすることで、サブクラス個別の処理と、一般的な例外の処理とを組み合わせることができる。
このように、例外は継承やポリモーフィズムと密接に結びついているため、難易度は高いと言える。
tryで囲まれた範囲内で投げられる例外を拾うために使用する。catchで止められなければ、例外はメソッドの外へと抜けていく。
「try{ 例外が投げられる範囲 }catch( 止める例外 変数 ) { 行う処理 }」という構文で、「止める例外」が投げられた場合に「行う処理」が実行される。
拾うことのできる例外は、完全に一致した例外か、もしくはサブクラスの例外のみ。異なる例外は拾うことができず、外へ逃げていく。
catchで指定した例外のサブクラスも拾うことができるため、親の方、つまりExceptionクラスに近ければ近いほど、多くの例外を拾うことができる。
拾った例外は「catch( 止める例外 変数 )」の「変数」に格納される。これは、例外を投げる際に作られたインスタンスの参照がそのまま格納される。そのため、投げられた例外が「止める例外」のサブクラスの場合、変数にはそのサブクラスの参照が格納されていることになる。
catchはひとつのtryに対して複数用意することができる。try内で例外が投げられた場合、上から順にcatchの例外クラスと同じかそのサブクラスかを調べ、そうであればそのcatch内のみが処理される。
この「catchの並び」にスーパークラスとサブクラスを混在させる場合、スーパークラスを上に、サブクラスを下にすると、サブクラスでのcatchは意味がないためコンパイルエラーとなる。逆に、サブクラスを上に、スーパークラスを下にすることで、サブクラス個別の処理と、一般的な例外の処理とを組み合わせることができる。
このように、例外は継承やポリモーフィズムと密接に結びついているため、難易度は高いと言える。
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// 一般的な例。
try
{
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
catch( NullPointerException e )
{
e.printStackTrace();
// java.lang.NullPointerException
// at Sample.main(Sample.java:9)
// このように、投げられた例外を止めます。
}
// 例外が異なると拾えません。
try
{
try
{
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
catch( ClassCastException e )
{
// 例外が異なるのでここには来ません。
System.out.println( "来ないよー" );
}
System.out.println( "ここも来ないよー" );
}
catch( NullPointerException e )
{
e.printStackTrace();
// java.lang.NullPointerException
// at Sample.main(Sample.java:26)
// 例外が異なっていると拾うことができないので、
// 上記の箇所ではなくこちらで拾われます。
}
// 例外は複数指定できます。
try
{
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
catch( ClassCastException e )
{
// 例外が異なるのでここには来ません。
System.out.println( "来ないよー" );
}
catch( NullPointerException e )
{
e.printStackTrace();
// java.lang.NullPointerException
// at Sample.main(Sample.java:49)
// catchは上から順にチェックされ、一致したら
// 中の処理が行われます。
}
// ポリモーフィズムが適用される例。
try
{
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
catch( Exception e )
{
e.printStackTrace();
// java.lang.NullPointerException
// at Sample.main(Sample.java:69)
// スーパークラスの例外は、サブクラスの例外を
// 止めることができます。また、この時、
// 投げられた例外のインスタンスは投げられた時
// そのままです。
System.out.println( e instanceof NullPointerException );
// true
}
// だから順番が重要です。上の続きでNullPointerExceptionを
// 拾おうとすると、「絶対に拾えない」のでコンパイルエラーになります。
// catch( NullPointerException e ){}
// コンパイルエラー:
// 到達不可能な catch ブロック
}
}
public class Sample
{
public static void main( String[] args )
{
// 一般的な例。
try
{
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
catch( NullPointerException e )
{
e.printStackTrace();
// java.lang.NullPointerException
// at Sample.main(Sample.java:9)
// このように、投げられた例外を止めます。
}
// 例外が異なると拾えません。
try
{
try
{
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
catch( ClassCastException e )
{
// 例外が異なるのでここには来ません。
System.out.println( "来ないよー" );
}
System.out.println( "ここも来ないよー" );
}
catch( NullPointerException e )
{
e.printStackTrace();
// java.lang.NullPointerException
// at Sample.main(Sample.java:26)
// 例外が異なっていると拾うことができないので、
// 上記の箇所ではなくこちらで拾われます。
}
// 例外は複数指定できます。
try
{
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
catch( ClassCastException e )
{
// 例外が異なるのでここには来ません。
System.out.println( "来ないよー" );
}
catch( NullPointerException e )
{
e.printStackTrace();
// java.lang.NullPointerException
// at Sample.main(Sample.java:49)
// catchは上から順にチェックされ、一致したら
// 中の処理が行われます。
}
// ポリモーフィズムが適用される例。
try
{
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
catch( Exception e )
{
e.printStackTrace();
// java.lang.NullPointerException
// at Sample.main(Sample.java:69)
// スーパークラスの例外は、サブクラスの例外を
// 止めることができます。また、この時、
// 投げられた例外のインスタンスは投げられた時
// そのままです。
System.out.println( e instanceof NullPointerException );
// true
}
// だから順番が重要です。上の続きでNullPointerExceptionを
// 拾おうとすると、「絶対に拾えない」のでコンパイルエラーになります。
// catch( NullPointerException e ){}
// コンパイルエラー:
// 到達不可能な catch ブロック
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // 一般的な例。 try { // NullPointerExceptionを投げます。 throw new NullPointerException(); } catch( NullPointerException e ) { e.printStackTrace(); // java.lang.NullPointerException // at Sample.main(Sample.java:9) // このように、投げられた例外を止めます。 } // 例外が異なると拾えません。 try { try { // NullPointerExceptionを投げます。 throw new NullPointerException(); } catch( ClassCastException e ) { // 例外が異なるのでここには来ません。 System.out.println( "来ないよー" ); } System.out.println( "ここも来ないよー" ); } catch( NullPointerException e ) { e.printStackTrace(); // java.lang.NullPointerException // at Sample.main(Sample.java:26) // 例外が異なっていると拾うことができないので、 // 上記の箇所ではなくこちらで拾われます。 } // 例外は複数指定できます。 try { // NullPointerExceptionを投げます。 throw new NullPointerException(); } catch( ClassCastException e ) { // 例外が異なるのでここには来ません。 System.out.println( "来ないよー" ); } catch( NullPointerException e ) { e.printStackTrace(); // java.lang.NullPointerException // at Sample.main(Sample.java:49) // catchは上から順にチェックされ、一致したら // 中の処理が行われます。 } // ポリモーフィズムが適用される例。 try { // NullPointerExceptionを投げます。 throw new NullPointerException(); } catch( Exception e ) { e.printStackTrace(); // java.lang.NullPointerException // at Sample.main(Sample.java:69) // スーパークラスの例外は、サブクラスの例外を // 止めることができます。また、この時、 // 投げられた例外のインスタンスは投げられた時 // そのままです。 System.out.println( e instanceof NullPointerException ); // true } // だから順番が重要です。上の続きでNullPointerExceptionを // 拾おうとすると、「絶対に拾えない」のでコンパイルエラーになります。 // catch( NullPointerException e ){} // コンパイルエラー: // 到達不可能な catch ブロック } }
「解説」に含まれているページ
- (
- ArithmeticException
- ArrayIndexOutOfBoundsException
- ArrayStoreException
- AssertionError
- catch
- ClassCastException
- Error
- Exception
- ExceptionInInitializerError
- IllegalArgumentException
- IndexOutOfBoundsException
- InterruptedException
- NoSuchElementException
- NullPointerException
- NumberFormatException
- RuntimeException
- ServletException
- StringIndexOutOfBoundsException
- Throwable
- throws
- try
- アサーション
- キャッチ
- ステートメント
- ローカル変数宣言
- 予約語
- 例外処理
- 変数
- 変数宣言
- 投げられる
- 拾う
「サンプルプログラムとか」に含まれているページ
- %演算子
- /演算子
- 127.0.0.1
- <%! %>
- ArithmeticException
- ArrayIndexOutOfBoundsException
- ArrayList
- ArrayStoreException
- ASCII
- assert
- AssertionError
- BufferedInputStream
- BufferedOutputStream
- BufferedReader
- BufferedWriter
- catch
- Caused by
- CharArrayReader
- CharArrayWriter
- Class
- ClassCastException
- ClassNotFoundException
- clone
- Cloneable
- CloneNotSupportedException
- close
- Connection
- Cookie
- CP932
- CREATE TABLE
- DataInputStream
- DataOutputStream
- DELETE
- DOM
- DTD
- EOF
- EOFException
- Error
- EUC
- EUC-JP
- Exception
- ExceptionInInitializerError
- execute
- File
- FileInputStream
- FileNotFoundException
- FileOutputStream
- FileReader
- FileWriter
- FilterInputStream
- FilterOutputStream
- FilterReader
- FilterWriter
- finally
- GET
- getBytes
- HashMap
- HEAD
- HTTP
- HttpURLConnection
- IANA
- IllegalArgumentException
- IndexOutOfBoundsException
- InputStream
- InputStreamReader
- INSERT
- InterruptedException
- InvocationTargetException
- IOException
- IPアドレス
- ISO-10646-UCS-2
- ISO-2022-JP
- ISO-8859-1
- java.net.URL
- java.sql.Date
- JAVA_HOME
- JDBC
- JDBCドライバ
- JSP宣言
- LineNumberInputStream
- LineNumberReader
- localhost
- Logger
- Node
- NoSuchElementException
- NOT NULL制約
- null
- NullPointerException
- NumberFormatException
- Object
- ObjectInputStream
- ObjectOutputStream
- OutOfMemoryError
- OutputStream
- OutputStreamWriter
- PipedInputStream
- PipedOutputStream
- PipedReader
- PipedWriter
- POST
- PreparedStatement
- printStackTrace
- PrintStream
- PushbackInputStream
- PushbackReader
- Reader
- ResultSet
- RSS
- Rss4j
- Runnable
- Runtime
- RuntimeException
- SELECT
- SequenceInputStream
- Serializable
- ServletException
- Shift_JIS
- sleep
- SQL
- SQLException
- SQLインジェクション
- StackOverflowError
- Statement
- StringBufferInputStream
- StringIndexOutOfBoundsException
- StringReader
- StringWriter
- substring
- synchronizedブロック
- synchronizedメソッド
- TCP
- Thread
- throw
- Throwable
- throws
- Timestamp
- transient
- try
- UCS-2
- UDP
- Unicode
- UPDATE
- URI
- URL
- URLDecoder
- URLEncoder
- US-ASCII
- UTF-8
- volatile
- WHERE
- Windows-31J
- Writer
- Xerces
- XML
- ZIP
- 「-」
- 「~」
- ぬるぽ
- インデックスナンバー
- イントロスペクション
- エイリアス
- エラーハンドラ
- エンコーディング
- エンコード
- カスタムタグライブラリ
- キャッチ
- クエリー
- クッキー
- クライアント
- クライアントサーバーシステム
- コネクション
- コミット
- コンパイルタイムエラー
- サーバー
- シフトJIS
- スタックトレース
- ステートレス
- スレッド
- ソケット
- ソート
- ダウンキャスト
- ダンプ
- テキストファイル
- テーブル
- ディレクトリ
- ディレクトリトラバーサル
- デコード
- デッドロック
- データベース
- トランザクション
- ドメイン名
- ハンドラ
- バイト入力ストリーム
- バイト出力ストリーム
- バイナリーファイル
- バッファアンダーフロー
- バッファアンダーラン
- バッファオーバーフロー
- バッファオーバーラン
- ファイル
- フラッシュ
- ブロックします
- プリペアードステートメント
- プロパティファイル
- ホスト
- ポート番号
- マルチスレッド
- リクエスト
- リクエストパラメーター
- リクエストヘッダー
- リフレクション
- ルート
- レコード
- レスポンス
- レスポンスヘッダー
- ログファイル
- ロック
- ロールバック
- 丸数字
- 主キー
- 例外
- 例外処理
- 列
- 制約
- 半角カタカナ
- 可変長配列
- 同期
- 変数宣言
- 契約による設計
- 投げられる
- 投げる
- 拾う
- 排他
- 改行文字
- 文字コード
- 文字入力ストリーム
- 文字出力ストリーム
- 文字化け
- 標準入出力
- 浅いコピー
- 深いコピー
- 環境変数
- 直列化
- 行
- 配列