finally
日本語 | 最後に |
英語 | finally |
ふりがな | ふぁいなりぃ |
フリガナ | ファイナリィ |
必ず行わなければならない処理を実行するための予約語。
try後のブロック内で処理が行われたあと、続いてfinallyがあれば、必ず直後のブロック内の処理が実行される。
「try{ なんかの処理 }finally{ 絶対に行う処理 }」という構文で、tryの中の「なんかの処理」の中で、たとえ例外が投げられる場合でも、returnでメソッドから抜ける場合でも、もちろん何もなくても、必ず「絶対に行う処理」が行われる。
Javaのクラスには、ガベージコレクションによる「いつか消える」という曖昧な後処理がポリシーであり、C++言語が持つデストラクタのようなものが存在しないため、ファイル処理やネットワーク処理で不可欠な「後処理」をし忘れやすい。これら、必ず必要な後処理をfinally内で行って必ず行うようにするのがいいだろう。
try後のブロック内で処理が行われたあと、続いてfinallyがあれば、必ず直後のブロック内の処理が実行される。
「try{ なんかの処理 }finally{ 絶対に行う処理 }」という構文で、tryの中の「なんかの処理」の中で、たとえ例外が投げられる場合でも、returnでメソッドから抜ける場合でも、もちろん何もなくても、必ず「絶対に行う処理」が行われる。
Javaのクラスには、ガベージコレクションによる「いつか消える」という曖昧な後処理がポリシーであり、C++言語が持つデストラクタのようなものが存在しないため、ファイル処理やネットワーク処理で不可欠な「後処理」をし忘れやすい。これら、必ず必要な後処理をfinally内で行って必ず行うようにするのがいいだろう。
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// 最も基本的だが、最もマイナーな例。
try
{
System.out.println( "try(0)" );
}
finally
{
// finally内は、何があっても処理されます。
System.out.println( "finally(0)" );
}
// try(0)
// finally(0)
// 例外の後に使う例。
try
{
System.out.println( "try(1)" );
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
catch( NullPointerException e )
{
e.printStackTrace();
}
finally
{
// 例外が投げられた後、ここを通ります。
System.out.println( "finally(1)" );
}
// try(1)
// java.lang.NullPointerException
// at Sample.main(Sample.java:24)
// finally(1)
try
{
// 例外が拾われなくても通ります。
try
{
System.out.println( "try(2)" );
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
finally
{
// 例外が拾われなくてもここには来ます。
System.out.println( "finally(2)" );
}
}
catch( NullPointerException e )
{
// 後の例で困るのでここで例外を拾っておきます。
e.printStackTrace();
}
// try(2)
// finally(2)
// java.lang.NullPointerException
// at Sample.main(Sample.java:47)
// returnで返ってもここに来ます。
try
{
System.out.println( "try(3)" );
return;
}
finally
{
// returnで抜けてもここに来ます。
System.out.println( "finally(3)" );
}
// try(3)
// finally(3)
}
}
public class Sample
{
public static void main( String[] args )
{
// 最も基本的だが、最もマイナーな例。
try
{
System.out.println( "try(0)" );
}
finally
{
// finally内は、何があっても処理されます。
System.out.println( "finally(0)" );
}
// try(0)
// finally(0)
// 例外の後に使う例。
try
{
System.out.println( "try(1)" );
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
catch( NullPointerException e )
{
e.printStackTrace();
}
finally
{
// 例外が投げられた後、ここを通ります。
System.out.println( "finally(1)" );
}
// try(1)
// java.lang.NullPointerException
// at Sample.main(Sample.java:24)
// finally(1)
try
{
// 例外が拾われなくても通ります。
try
{
System.out.println( "try(2)" );
// NullPointerExceptionを投げます。
throw new NullPointerException();
}
finally
{
// 例外が拾われなくてもここには来ます。
System.out.println( "finally(2)" );
}
}
catch( NullPointerException e )
{
// 後の例で困るのでここで例外を拾っておきます。
e.printStackTrace();
}
// try(2)
// finally(2)
// java.lang.NullPointerException
// at Sample.main(Sample.java:47)
// returnで返ってもここに来ます。
try
{
System.out.println( "try(3)" );
return;
}
finally
{
// returnで抜けてもここに来ます。
System.out.println( "finally(3)" );
}
// try(3)
// finally(3)
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // 最も基本的だが、最もマイナーな例。 try { System.out.println( "try(0)" ); } finally { // finally内は、何があっても処理されます。 System.out.println( "finally(0)" ); } // try(0) // finally(0) // 例外の後に使う例。 try { System.out.println( "try(1)" ); // NullPointerExceptionを投げます。 throw new NullPointerException(); } catch( NullPointerException e ) { e.printStackTrace(); } finally { // 例外が投げられた後、ここを通ります。 System.out.println( "finally(1)" ); } // try(1) // java.lang.NullPointerException // at Sample.main(Sample.java:24) // finally(1) try { // 例外が拾われなくても通ります。 try { System.out.println( "try(2)" ); // NullPointerExceptionを投げます。 throw new NullPointerException(); } finally { // 例外が拾われなくてもここには来ます。 System.out.println( "finally(2)" ); } } catch( NullPointerException e ) { // 後の例で困るのでここで例外を拾っておきます。 e.printStackTrace(); } // try(2) // finally(2) // java.lang.NullPointerException // at Sample.main(Sample.java:47) // returnで返ってもここに来ます。 try { System.out.println( "try(3)" ); return; } finally { // returnで抜けてもここに来ます。 System.out.println( "finally(3)" ); } // try(3) // finally(3) } }
「みだし」に含まれているページ
「解説」に含まれているページ
「サンプルプログラムとか」に含まれているページ
- 127.0.0.1
- BufferedInputStream
- BufferedOutputStream
- BufferedReader
- BufferedWriter
- CharArrayReader
- CharArrayWriter
- close
- Connection
- CREATE TABLE
- DataInputStream
- DataOutputStream
- DELETE
- DOM
- DTD
- EOF
- EOFException
- execute
- FileInputStream
- FileOutputStream
- FileReader
- FileWriter
- FilterInputStream
- FilterOutputStream
- FilterReader
- FilterWriter
- finally
- GET
- HEAD
- HTTP
- HttpURLConnection
- InputStream
- InputStreamReader
- INSERT
- IPアドレス
- java.net.URL
- java.sql.Date
- JDBC
- JDBCドライバ
- LineNumberInputStream
- LineNumberReader
- localhost
- Node
- NOT NULL制約
- ObjectInputStream
- ObjectOutputStream
- OutputStream
- OutputStreamWriter
- PipedInputStream
- PipedOutputStream
- PipedReader
- PipedWriter
- POST
- PreparedStatement
- PrintStream
- PrintWriter
- PushbackInputStream
- PushbackReader
- Reader
- ResultSet
- return
- RSS
- Rss4j
- SELECT
- SequenceInputStream
- Serializable
- SQL
- SQLException
- SQLインジェクション
- Statement
- StringBufferInputStream
- StringReader
- StringWriter
- TCP
- Throwable
- Timestamp
- transient
- try
- UDP
- UPDATE
- URI
- URL
- WHERE
- Writer
- Xerces
- XML
- ZIP
- クエリー
- クライアント
- クライアントサーバーシステム
- コネクション
- コミット
- サーバー
- ステートレス
- ソケット
- テキストファイル
- テーブル
- データベース
- トランザクション
- ドメイン名
- バイト入力ストリーム
- バイト出力ストリーム
- バイナリーファイル
- フラッシュ
- ブロックします
- プリペアードステートメント
- ホスト
- ポート番号
- リクエスト
- リクエストパラメーター
- リクエストヘッダー
- レコード
- レスポンス
- レスポンスヘッダー
- ロールバック
- 主キー
- 列
- 制約
- 投げられる
- 改行文字
- 文字入力ストリーム
- 文字出力ストリーム
- 直列化
- 行