close
日本語 | 閉じる |
英語 | close |
ふりがな | くろーず |
フリガナ | クローズ |
「閉じる」という一般的な英単語。
狭義においては「close()メソッド」を指す。
ストリームクラス等、多くのクラスにおいて「終了処理」を行うためのメソッドとして定義されている。
ファイルやネットワーク等、処理の終了時に「終了処理」が必要な処理は多い。
だが、Javaではガベージコレクションの関係で、その終了処理を自動的に呼ぶことができない。
Javaのインスタンスの寿命は、ガベージコレクションが消した時に訪れ、それはいつ行われるのか決まっていない。
プログラム上は、そのインスタンスを参照する参照型変数がスコープから外れて寿命が来ることでインスタンスの参照が失われ、インスタンスを操作できなくなるが、インスタンスそのものは依然残っている。
参照型変数が消える際「何らかのメソッドを自動的に呼ぶ」という機能はJavaにはない。あったとしても、ひとつのインスタンスを複数の参照型変数が参照できるため、その参照が消えた時にそのメソッドが呼ばれるのか明確には分からないという問題がある。
よって、Javaでは「変数やインスタンスが消えたときにメソッドが呼ばれる」という機能は存在しない。そのため、終了処理は必ず使用した側が行う必要があり、明示的にclose()メソッドを呼ぶ必要があるわけである。
close()メソッドは多くの場合「必ず呼び出さなければならない」ため、通常はfinallyブロック内で行う。
また、close()メソッドを呼び出すための参照型変数はスコープの関係上tryブロックの外で宣言する必要があり、close()メソッドは「参照型変数にnullが入っていない」時にのみ呼び出す必要がある。
また、close()メソッドによっては例外を投げるため、さらに例外処理を行う必要がある。
close()メソッドは上記のように使用が面倒だが、適切に行わない場合、致命的な問題を引き起こす可能性があるため必ず行うこと。
狭義においては「close()メソッド」を指す。
ストリームクラス等、多くのクラスにおいて「終了処理」を行うためのメソッドとして定義されている。
ファイルやネットワーク等、処理の終了時に「終了処理」が必要な処理は多い。
だが、Javaではガベージコレクションの関係で、その終了処理を自動的に呼ぶことができない。
Javaのインスタンスの寿命は、ガベージコレクションが消した時に訪れ、それはいつ行われるのか決まっていない。
プログラム上は、そのインスタンスを参照する参照型変数がスコープから外れて寿命が来ることでインスタンスの参照が失われ、インスタンスを操作できなくなるが、インスタンスそのものは依然残っている。
参照型変数が消える際「何らかのメソッドを自動的に呼ぶ」という機能はJavaにはない。あったとしても、ひとつのインスタンスを複数の参照型変数が参照できるため、その参照が消えた時にそのメソッドが呼ばれるのか明確には分からないという問題がある。
よって、Javaでは「変数やインスタンスが消えたときにメソッドが呼ばれる」という機能は存在しない。そのため、終了処理は必ず使用した側が行う必要があり、明示的にclose()メソッドを呼ぶ必要があるわけである。
close()メソッドは多くの場合「必ず呼び出さなければならない」ため、通常はfinallyブロック内で行う。
また、close()メソッドを呼び出すための参照型変数はスコープの関係上tryブロックの外で宣言する必要があり、close()メソッドは「参照型変数にnullが入っていない」時にのみ呼び出す必要がある。
また、close()メソッドによっては例外を投げるため、さらに例外処理を行う必要がある。
close()メソッドは上記のように使用が面倒だが、適切に行わない場合、致命的な問題を引き起こす可能性があるため必ず行うこと。
参考サイト
// Sample.java
import java.io.FileReader;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
// useFileReader()メソッドを呼び出します。
useFileReader();
// この時点で、useFileReader()メソッド内のfileReader変数は
// 寿命が来たためなくなっています。ですが、
// newした「FileReaderクラスのインスタンス」はなくならずに
// 残っています。fileReader変数はただの「参照の入れ物」で、
// 本体のインスタンスは残っているからです。このインスタンスは
// ガベージコレクションによって消されるまで残っています。
// つまり、インスタンスは「いつ消える」という寿命が
// 決まっていません。その結果、C++のデストラクタのような
// 「なくなったときに呼ばれるメソッド」というものを
// Javaでは持つことができませんでした。
// なので、Javaではclose()メソッドで明示的に終了処理をする必要があり、
// その終了処理を必ずするためにfinallyがあるわけです。
}
/**
* FileReaderクラスを使うメソッド。
* 寿命の話をするために、main()メソッドではなくこのメソッドで行います。
*/
private static void useFileReader()
{
// ファイル入力を行うクラスでclose()メソッドの使用例を見てみます。
// 他のクラスのclose()メソッドも似たようなものです。
// 入力ファイルの絶対パス。
String inputFilePath = "D:/from.txt";
// FileReaderクラスの参照型変数。
// ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
FileReader fileReader = null;
try
{
// FileReaderクラスを作って開きます。
fileReader = new FileReader( inputFilePath );
// それだけ。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
}
finally
{
// ファイルを扱ったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。そうすれば、上のIOException例外が
// 投げられてもclose()メソッドが呼ばれるからです。
try
{
if( fileReader != null )
{
fileReader.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
import java.io.FileReader;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
// useFileReader()メソッドを呼び出します。
useFileReader();
// この時点で、useFileReader()メソッド内のfileReader変数は
// 寿命が来たためなくなっています。ですが、
// newした「FileReaderクラスのインスタンス」はなくならずに
// 残っています。fileReader変数はただの「参照の入れ物」で、
// 本体のインスタンスは残っているからです。このインスタンスは
// ガベージコレクションによって消されるまで残っています。
// つまり、インスタンスは「いつ消える」という寿命が
// 決まっていません。その結果、C++のデストラクタのような
// 「なくなったときに呼ばれるメソッド」というものを
// Javaでは持つことができませんでした。
// なので、Javaではclose()メソッドで明示的に終了処理をする必要があり、
// その終了処理を必ずするためにfinallyがあるわけです。
}
/**
* FileReaderクラスを使うメソッド。
* 寿命の話をするために、main()メソッドではなくこのメソッドで行います。
*/
private static void useFileReader()
{
// ファイル入力を行うクラスでclose()メソッドの使用例を見てみます。
// 他のクラスのclose()メソッドも似たようなものです。
// 入力ファイルの絶対パス。
String inputFilePath = "D:/from.txt";
// FileReaderクラスの参照型変数。
// ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
FileReader fileReader = null;
try
{
// FileReaderクラスを作って開きます。
fileReader = new FileReader( inputFilePath );
// それだけ。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
}
finally
{
// ファイルを扱ったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。そうすれば、上のIOException例外が
// 投げられてもclose()メソッドが呼ばれるからです。
try
{
if( fileReader != null )
{
fileReader.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
// Sample.java import java.io.FileReader; import java.io.IOException; public class Sample { public static void main( String[] args ) { // useFileReader()メソッドを呼び出します。 useFileReader(); // この時点で、useFileReader()メソッド内のfileReader変数は // 寿命が来たためなくなっています。ですが、 // newした「FileReaderクラスのインスタンス」はなくならずに // 残っています。fileReader変数はただの「参照の入れ物」で、 // 本体のインスタンスは残っているからです。このインスタンスは // ガベージコレクションによって消されるまで残っています。 // つまり、インスタンスは「いつ消える」という寿命が // 決まっていません。その結果、C++のデストラクタのような // 「なくなったときに呼ばれるメソッド」というものを // Javaでは持つことができませんでした。 // なので、Javaではclose()メソッドで明示的に終了処理をする必要があり、 // その終了処理を必ずするためにfinallyがあるわけです。 } /** * FileReaderクラスを使うメソッド。 * 寿命の話をするために、main()メソッドではなくこのメソッドで行います。 */ private static void useFileReader() { // ファイル入力を行うクラスでclose()メソッドの使用例を見てみます。 // 他のクラスのclose()メソッドも似たようなものです。 // 入力ファイルの絶対パス。 String inputFilePath = "D:/from.txt"; // FileReaderクラスの参照型変数。 // ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。 FileReader fileReader = null; try { // FileReaderクラスを作って開きます。 fileReader = new FileReader( inputFilePath ); // それだけ。 } catch( IOException e ) { // ファイルが無かった場合等に、この // IOException例外が投げられます。 e.printStackTrace(); } finally { // ファイルを扱ったら、最後にclose()メソッドを呼んで // 後処理をします。また、これは必ず行うため、 // finally内で行います。そうすれば、上のIOException例外が // 投げられてもclose()メソッドが呼ばれるからです。 try { if( fileReader != null ) { fileReader.close(); } } catch( IOException e ) { // close()メソッドはIOExceptionがthrows指定されているので // 一応受け取ります。 e.printStackTrace(); } } } }
「みだし」に含まれているページ
「解説」に含まれているページ
- BufferedInputStream
- BufferedOutputStream
- BufferedReader
- BufferedWriter
- ByteArrayInputStream
- ByteArrayOutputStream
- CharArrayReader
- CharArrayWriter
- close
- DataInputStream
- DataOutputStream
- FileInputStream
- FileOutputStream
- FileReader
- FileWriter
- InputStream
- InputStreamReader
- LineNumberReader
- ObjectInputStream
- ObjectOutputStream
- OutOfMemoryError
- OutputStream
- OutputStreamWriter
- PipedInputStream
- PipedOutputStream
- PipedReader
- PipedWriter
- PreparedStatement
- PrintStream
- PrintWriter
- PushbackInputStream
- PushbackReader
- Reader
- ResultSet
- SequenceInputStream
- Statement
- StringReader
- StringWriter
- Writer
- クライアント
- サーバー
- ソケット
- トランザクション
- バイト入力ストリーム
- バイト出力ストリーム
- フラッシュ
- 文字入力ストリーム
- 文字出力ストリーム
「サンプルプログラムとか」に含まれているページ
- 127.0.0.1
- BufferedInputStream
- BufferedOutputStream
- BufferedReader
- BufferedWriter
- ByteArrayInputStream
- ByteArrayOutputStream
- CharArrayReader
- CharArrayWriter
- close
- Connection
- CREATE TABLE
- DataInputStream
- DataOutputStream
- DELETE
- DOM
- DTD
- EOF
- EOFException
- execute
- FileInputStream
- FileOutputStream
- FileReader
- FileWriter
- FilterInputStream
- FilterOutputStream
- FilterReader
- FilterWriter
- 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
- RSS
- Rss4j
- SELECT
- SequenceInputStream
- Serializable
- SQL
- SQLException
- SQLインジェクション
- Statement
- StringBufferInputStream
- StringReader
- StringWriter
- TCP
- Timestamp
- transient
- UDP
- UPDATE
- URI
- URL
- WHERE
- Writer
- Xerces
- XML
- ZIP
- クエリー
- クライアント
- クライアントサーバーシステム
- コネクション
- コミット
- サーバー
- ステートレス
- ソケット
- テキストファイル
- テーブル
- データベース
- トランザクション
- ドメイン名
- バイト入力ストリーム
- バイト出力ストリーム
- バイナリーファイル
- フラッシュ
- ブロックします
- プリペアードステートメント
- プロパティファイル
- ホスト
- ポート番号
- リクエスト
- リクエストパラメーター
- リクエストヘッダー
- レコード
- レスポンス
- レスポンスヘッダー
- ロールバック
- 主キー
- 列
- 制約
- 改行文字
- 文字入力ストリーム
- 文字出力ストリーム
- 直列化
- 行