public class RandomAccessFile
extends Object
implements DataOutput, DataInput, Closeable
java.lang.Object | |
↳ | java.io.RandomAccessFile |
此类的实例支持读取和写入随机访问文件。 随机访问文件的行为与存储在文件系统中的大量字节相同。 有一种游标或指向隐含数组的索引,称为文件指针 ; 输入操作从文件指针开始读取字节,并使文件指针超过读取的字节。 如果随机访问文件是以读/写模式创建的,则输出操作也可用; 输出操作从文件指针开始写入字节,并使文件指针超过写入的字节。 写入隐含数组的当前末尾的输出操作会导致数组扩展。 文件指针可以通过读取getFilePointer
方法和由设置seek
方法。
在这个类中的所有阅读例程中,如果在读取所需的字节数之前达到文件结束,则会EOFException
(这是一种IOException
)。 如果由于除文件结束之外的任何原因而无法读取任何字节,则会抛出除EOFException
IOException
其他EOFException
。 特别是,如果流已关闭, IOException
可能会抛出IOException
。
Public constructors |
|
---|---|
RandomAccessFile(String name, String mode) 创建一个随机访问文件流,以便从指定名称的文件中读取文件并可选择写入该文件。 |
|
RandomAccessFile(File file, String mode) 创建一个随机访问文件流以读取和写入由 |
Public methods |
|
---|---|
void |
close() 关闭此随机访问文件流并释放与该流关联的所有系统资源。 |
final FileChannel |
getChannel() 返回与此文件关联的唯一 |
final FileDescriptor |
getFD() 返回与此流关联的不透明文件描述符对象。 |
long |
getFilePointer() 返回此文件中的当前偏移量。 |
long |
length() 返回此文件的长度。 |
int |
read() 从该文件读取一个字节的数据。 |
int |
read(byte[] b) 最多可将 |
int |
read(byte[] b, int off, int len) 从该文件读取多达 |
final boolean |
readBoolean() 从此文件读取 |
final byte |
readByte() 从该文件读取一个有符号的八位值。 |
final char |
readChar() 从该文件读取一个字符。 |
final double |
readDouble() 从该文件读取 |
final float |
readFloat() 从此文件读取 |
final void |
readFully(byte[] b) 从该文件读取 |
final void |
readFully(byte[] b, int off, int len) 从当前文件指针开始,从该文件中正好读取 |
final int |
readInt() 从该文件读取一个有符号的32位整数。 |
final String |
readLine() 从该文件读取下一行文本。 |
final long |
readLong() 从该文件读取一个有符号的64位整数。 |
final short |
readShort() 从该文件读取一个有符号的16位数字。 |
final String |
readUTF() 从该文件读取一个字符串。 |
final int |
readUnsignedByte() 从该文件读取一个无符号的八位数字。 |
final int |
readUnsignedShort() 从该文件读取一个无符号的16位数字。 |
void |
seek(long offset) 设置文件指针偏移量,从该文件的开始处开始测量,下一次读取或写入发生。 |
void |
setLength(long newLength) 设置此文件的长度。 |
int |
skipBytes(int n) 尝试跳过 |
void |
write(byte[] b) 将 |
void |
write(byte[] b, int off, int len) 将 |
void |
write(int b) 将指定的字节写入此文件。 |
final void |
writeBoolean(boolean v) 将一个 |
final void |
writeByte(int v) 将 |
final void |
writeBytes(String s) 将字符串作为字节序列写入文件。 |
final void |
writeChar(int v) 将一个 |
final void |
writeChars(String s) 将字符串作为字符序列写入文件。 |
final void |
writeDouble(double v) 使用类 |
final void |
writeFloat(float v) 浮子参数的转换 |
final void |
writeInt(int v) 写入 |
final void |
writeLong(long v) 写入一个 |
final void |
writeShort(int v) 将两个字节(高字节在前)写入 |
final void |
writeUTF(String str) 以与机器无关的方式使用 modified UTF-8编码将一个字符串写入文件。 |
Protected methods |
|
---|---|
void |
finalize() 当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.io.DataOutput
|
|
From interface java.io.DataInput
|
|
From interface java.io.Closeable
|
|
From interface java.lang.AutoCloseable
|
RandomAccessFile (String name, String mode)
创建一个随机访问文件流,以便从指定名称的文件中读取文件并可选择写入该文件。 将创建一个新的FileDescriptor
对象以表示与该文件的连接。
mode参数指定要打开文件的访问模式。 允许的值及其含义与构造函数RandomAccessFile(File,String)的规定相同 。
如果存在安全管理器,则使用name
参数作为参数调用其checkRead
方法,以查看是否允许对该文件进行读取访问。 如果模式允许写入,则也会使用name
参数作为其参数调用安全管理器的checkWrite
方法,以查看是否允许对该文件执行写入访问。
Parameters | |
---|---|
name |
String : the system-dependent filename |
mode |
String : the access mode |
Throws | |
---|---|
IllegalArgumentException |
if the mode argument is not equal to one of "r", "rw", "rws", or "rwd" |
FileNotFoundException |
if the mode is "r" but the given string does not denote an existing regular file, or if the mode begins with "rw" but the given string does not denote an existing, writable regular file and a new regular file of that name cannot be created, or if some other error occurs while opening or creating the file |
SecurityException |
if a security manager exists and its checkRead method denies read access to the file or the mode is "rw" and the security manager's checkWrite method denies write access to the file |
RandomAccessFile (File file, String mode)
创建一个随机访问文件流,以便从File
参数指定的文件中进行读取和写入(可选)。 将创建一个新的FileDescriptor
对象来表示此文件连接。
The "rws" and "rwd" modes work much like the
值
含义
"r" Open for reading only. Invoking any of the write methods of the resulting object will cause an IOException
to be thrown."rw" Open for reading and writing. If the file does not already exist then an attempt will be made to create it. "rws" Open for reading and writing, as with "rw", and also require that every update to the file's content or metadata be written synchronously to the underlying storage device. "rwd" Open for reading and writing, as with "rw", and also require that every update to the file's content be written synchronously to the underlying storage device.
force(boolean)
method of the
FileChannel
class, passing arguments of
true and
false, respectively, except that they always apply to every I/O operation and are therefore often more efficient. If the file resides on a local storage device then when an invocation of a method of this class returns it is guaranteed that all changes made to the file by that invocation will have been written to that device. This is useful for ensuring that critical information is not lost in the event of a system crash. If the file does not reside on a local device then no such guarantee is made.
"rwd"模式可用于减少执行的I / O操作的数量。 使用"rwd"只需要更新要写入存储的文件内容; 使用"rws"需要更新文件内容及其要写入的元数据,这通常需要至少一个低级I / O操作。
如果有安全管理器,则使用file
参数的路径名作为其参数来调用其checkRead
方法,以查看是否允许对该文件进行读取访问。 如果模式允许写入,则安全管理器的checkWrite
方法也会使用path参数调用,以查看是否允许对该文件进行写入访问。
Parameters | |
---|---|
file |
File : the file object |
mode |
String : the access mode, as described above |
Throws | |
---|---|
IllegalArgumentException |
if the mode argument is not equal to one of "r", "rw", "rws", or "rwd" |
FileNotFoundException |
if the mode is "r" but the given file object does not denote an existing regular file, or if the mode begins with "rw" but the given file object does not denote an existing, writable regular file and a new regular file of that name cannot be created, or if some other error occurs while opening or creating the file |
SecurityException |
if a security manager exists and its checkRead method denies read access to the file or the mode is "rw" and the security manager's checkWrite method denies write access to the file |
void close ()
关闭此随机访问文件流并释放与该流关联的所有系统资源。 封闭的随机访问文件不能执行输入或输出操作,也不能重新打开。
如果此文件具有关联的频道,则该频道也会关闭。
Throws | |
---|---|
IOException |
if an I/O error occurs. |
FileChannel getChannel ()
返回与此文件关联的唯一 FileChannel
对象。
返回通道的 position
将始终等于
getFilePointer
方法返回的此对象的文件指针偏移量。 改变这个对象的文件指针偏移量,无论是明确的还是通过读取或写入字节,都会改变通道的位置,反之亦然。 通过此对象更改文件的长度将改变通过文件通道看到的长度,反之亦然。
Returns | |
---|---|
FileChannel |
the file channel associated with this file |
FileDescriptor getFD ()
返回与此流关联的不透明文件描述符对象。
Returns | |
---|---|
FileDescriptor |
the file descriptor object associated with this stream. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
也可以看看:
long getFilePointer ()
返回此文件中的当前偏移量。
Returns | |
---|---|
long |
the offset from the beginning of the file, in bytes, at which the next read or write occurs. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
long length ()
返回此文件的长度。
Returns | |
---|---|
long |
the length of this file, measured in bytes. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
int read ()
从该文件读取一个字节的数据。 该字节以整数形式返回,范围为0到255( 0x00-0x0ff
)。 如果没有输入可用,此方法会阻止。
尽管 RandomAccessFile
不是 RandomAccessFile
的子类, InputStream
此方法的行为方式与 read()
方法 InputStream
。
Returns | |
---|---|
int |
the next byte of data, or -1 if the end of the file has been reached. |
Throws | |
---|---|
IOException |
if an I/O error occurs. Not thrown if end-of-file has been reached. |
int read (byte[] b)
从该文件读取多达b.length
个字节的数据到一个字节数组中。 此方法阻塞,直到至少有一个输入字节可用。
尽管 RandomAccessFile
不是 RandomAccessFile
的子类, InputStream
此方法的行为方式与 read(byte[])
方法 InputStream
。
Parameters | |
---|---|
b |
byte : the buffer into which the data is read. |
Returns | |
---|---|
int |
the total number of bytes read into the buffer, or -1 if there is no more data because the end of this file has been reached. |
Throws | |
---|---|
IOException |
If the first byte cannot be read for any reason other than end of file, or if the random access file has been closed, or if some other I/O error occurs. |
NullPointerException |
If b is null . |
int read (byte[] b, int off, int len)
从该文件读取最多len
个字节的数据到字节数组中。 此方法阻塞,直到至少有一个输入字节可用。
尽管 RandomAccessFile
不是 RandomAccessFile
的子类, InputStream
此方法的行为方式与 read(byte[], int, int)
方法 InputStream
。
Parameters | |
---|---|
b |
byte : the buffer into which the data is read. |
off |
int : the start offset in array b at which the data is written. |
len |
int : the maximum number of bytes read. |
Returns | |
---|---|
int |
the total number of bytes read into the buffer, or -1 if there is no more data because the end of the file has been reached. |
Throws | |
---|---|
IOException |
If the first byte cannot be read for any reason other than end of file, or if the random access file has been closed, or if some other I/O error occurs. |
NullPointerException |
If b is null . |
IndexOutOfBoundsException |
If off is negative, len is negative, or len is greater than b.length - off |
boolean readBoolean ()
从此文件读取boolean
。 该方法从当前文件指针处开始从文件读取单个字节。 值为0
表示false
。 任何其他值代表true
。 此方法阻塞,直到读取字节,检测到流的结束,或抛出异常。
Returns | |
---|---|
boolean |
the boolean value read. |
Throws | |
---|---|
EOFException |
if this file has reached the end. |
IOException |
if an I/O error occurs. |
byte readByte ()
从该文件读取一个有符号的八位值。 该方法从当前文件指针开始从文件读取一个字节。 如果读取的字节是b
,那么0 <= b <= 255
,那么结果是:
(byte)(b)
此方法阻塞,直到读取字节,检测到流的结束,或抛出异常。
Returns | |
---|---|
byte |
the next byte of this file as a signed eight-bit byte . |
Throws | |
---|---|
EOFException |
if this file has reached the end. |
IOException |
if an I/O error occurs. |
char readChar ()
从该文件读取一个字符。 该方法从文件中读取两个字节,从当前文件指针开始。 如果依次读取的字节数为b1
和b2
,其中0 <= b1, b2 <= 255
,则结果等于:
(char)((b1 << 8) | b2)
此方法阻塞,直到读取两个字节,检测到流的结尾或引发异常。
Returns | |
---|---|
char |
the next two bytes of this file, interpreted as a char . |
Throws | |
---|---|
EOFException |
if this file reaches the end before reading two bytes. |
IOException |
if an I/O error occurs. |
double readDouble ()
从该文件读取double
。 此方法读取一个long
值,并从当前文件指针,就好像由readLong
方法,然后转换该long
为double
使用longBitsToDouble
在类方法Double
。
该方法阻塞直到读取了八个字节,检测到流的结束,或者引发异常。
Returns | |
---|---|
double |
the next eight bytes of this file, interpreted as a double . |
Throws | |
---|---|
EOFException |
if this file reaches the end before reading eight bytes. |
IOException |
if an I/O error occurs. |
也可以看看:
float readFloat ()
从此文件读取float
。 此方法读取一个int
值,并从当前文件指针,就好像由readInt
方法,然后转换该int
为float
使用intBitsToFloat
在类方法Float
。
此方法阻塞,直到读取四个字节,检测到流的结束,或抛出异常。
Returns | |
---|---|
float |
the next four bytes of this file, interpreted as a float . |
Throws | |
---|---|
EOFException |
if this file reaches the end before reading four bytes. |
IOException |
if an I/O error occurs. |
也可以看看:
void readFully (byte[] b)
从该文件读取b.length
个字节到字节数组中,从当前文件指针开始。 该方法从文件中重复读取,直到读取请求的字节数。 此方法阻塞,直到读取所请求的字节数,检测到流的结尾或抛出异常。
Parameters | |
---|---|
b |
byte : the buffer into which the data is read. |
Throws | |
---|---|
EOFException |
if this file reaches the end before reading all the bytes. |
IOException |
if an I/O error occurs. |
void readFully (byte[] b, int off, int len)
从当前文件指针开始,从该文件中正好读取len
个字节到字节数组中。 该方法从文件中重复读取,直到读取请求的字节数。 此方法阻塞,直到读取所请求的字节数,检测到流的结尾或抛出异常。
Parameters | |
---|---|
b |
byte : the buffer into which the data is read. |
off |
int : the start offset of the data. |
len |
int : the number of bytes to read. |
Throws | |
---|---|
EOFException |
if this file reaches the end before reading all the bytes. |
IOException |
if an I/O error occurs. |
int readInt ()
从该文件读取一个有符号的32位整数。 该方法从文件读取4个字节,从当前文件指针开始。 如果读取的字节依次是b1
, b2
, b3
,和b4
,其中0 <= b1, b2, b3, b4 <= 255
,则结果等于:
(b1 << 24) | (b2 << 16) + (b3 << 8) + b4
此方法阻塞,直到读取四个字节,检测到流的结束,或抛出异常。
Returns | |
---|---|
int |
the next four bytes of this file, interpreted as an int . |
Throws | |
---|---|
EOFException |
if this file reaches the end before reading four bytes. |
IOException |
if an I/O error occurs. |
String readLine ()
从该文件读取下一行文本。 此方法从文件中连续读取文件中的字节,从当前文件指针开始,直到达到行终止符或文件末尾。 通过取字符的低8位的字节值并将字符的高8位设置为零来将每个字节转换为字符。 因此,此方法不支持完整的Unicode字符集。
一行文本由一个回车符( '\r'
),一个换行符( '\n'
),一个紧接着换行符的回车符或文件末尾结束。 行终止字符被丢弃,不作为返回字符串的一部分包含在内。
此方法阻塞,直到读取换行符,回车并读取其后的字节(以查看它是否为换行符),到达文件末尾或引发异常。
Returns | |
---|---|
String |
the next line of text from this file, or null if end of file is encountered before even one byte is read. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
long readLong ()
从该文件读取一个有符号的64位整数。 该方法从文件中读取八个字节,从当前文件指针开始。 如果读取的字节依次是b1
, b2
, b3
, b4
, b5
, b6
, b7
,并b8,
其中:
0 <= b1, b2, b3, b4, b5, b6, b7, b8 <=255,
那么结果等于:
((long)b1 << 56) + ((long)b2 << 48) + ((long)b3 << 40) + ((long)b4 << 32) + ((long)b5 << 24) + ((long)b6 << 16) + ((long)b7 << 8) + b8
该方法阻塞直到读取了八个字节,检测到流的结束,或者引发异常。
Returns | |
---|---|
long |
the next eight bytes of this file, interpreted as a long . |
Throws | |
---|---|
EOFException |
if this file reaches the end before reading eight bytes. |
IOException |
if an I/O error occurs. |
short readShort ()
从该文件读取一个有符号的16位数字。 该方法从该文件中读取两个字节,从当前文件指针开始。 如果两个字节的顺序是b1
和b2
,其中两个值中的每一个都在0
和255
之间(包括0
和255
),则结果等于:
(short)((b1 << 8) | b2)
此方法阻塞,直到读取两个字节,检测到流的结尾或引发异常。
Returns | |
---|---|
short |
the next two bytes of this file, interpreted as a signed 16-bit number. |
Throws | |
---|---|
EOFException |
if this file reaches the end before reading two bytes. |
IOException |
if an I/O error occurs. |
String readUTF ()
从该文件读取一个字符串。 该字符串已使用modified UTF-8格式进行编码。
读取前两个字节,从当前文件指针开始,就像readUnsignedShort
。 该值给出了编码字符串中后续字节的数量,而不是结果字符串的长度。 接下来的字节将被解释为字节编码UTF-8格式的字符并转换为字符。
此方法阻塞直到读取所有字节,检测到流结束或抛出异常。
Returns | |
---|---|
String |
a Unicode string. |
Throws | |
---|---|
EOFException |
if this file reaches the end before reading all the bytes. |
IOException |
if an I/O error occurs. |
UTFDataFormatException |
if the bytes do not represent valid modified UTF-8 encoding of a Unicode string. |
也可以看看:
int readUnsignedByte ()
从该文件读取一个无符号的八位数字。 该方法从该文件中读取一个字节,从当前文件指针开始,然后返回该字节。
此方法阻塞,直到读取字节,检测到流的结束,或抛出异常。
Returns | |
---|---|
int |
the next byte of this file, interpreted as an unsigned eight-bit number. |
Throws | |
---|---|
EOFException |
if this file has reached the end. |
IOException |
if an I/O error occurs. |
int readUnsignedShort ()
从该文件读取一个无符号的16位数字。 该方法从文件中读取两个字节,从当前文件指针开始。 如果按顺序读取的字节数分别为b1
和b2
,其中0 <= b1, b2 <= 255
,则结果等于:
(b1 << 8) | b2
此方法阻塞,直到读取两个字节,检测到流的结尾或引发异常。
Returns | |
---|---|
int |
the next two bytes of this file, interpreted as an unsigned 16-bit integer. |
Throws | |
---|---|
EOFException |
if this file reaches the end before reading two bytes. |
IOException |
if an I/O error occurs. |
void seek (long offset)
设置文件指针偏移量,从该文件的开始处开始测量,下一次读取或写入发生。 偏移量可以设置在文件末尾以外。 设置超出文件末尾的偏移量不会改变文件长度。 文件长度只有在文件末尾设置了偏移量后才会改变。
Parameters | |
---|---|
offset |
long : the offset position, measured in bytes from the beginning of the file, at which to set the file pointer. |
Throws | |
---|---|
IOException |
if pos is less than 0 or if an I/O error occurs. |
void setLength (long newLength)
设置此文件的长度。
如果length
方法返回的文件当前长度大于newLength
参数,则该文件将被截断。 在这种情况下,如果getFilePointer
方法返回的文件偏移量大于newLength
则在此方法返回后,偏移量将等于newLength
。
如果length
方法返回的文件的当前长度小于newLength
参数,则文件将被扩展。 在这种情况下,文件扩展部分的内容未定义。
Parameters | |
---|---|
newLength |
long : The desired length of the file |
Throws | |
---|---|
IOException |
If an I/O error occurs |
int skipBytes (int n)
尝试跳过 n
个字节的输入,丢弃跳过的字节。
该方法可能跳过一些较小的字节数,可能为零。 这可能是由于任何一种情况造成的。 在n
字节被跳过之前达到文件n
只是一种可能性。 该方法从不抛出EOFException
。 返回跳过的实际字节数。 如果n
为负数,则不跳过字节。
Parameters | |
---|---|
n |
int : the number of bytes to be skipped. |
Returns | |
---|---|
int |
the actual number of bytes skipped. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void write (byte[] b)
将 b.length
字节从指定的字节数组写入此文件,从当前文件指针开始。
Parameters | |
---|---|
b |
byte : the data. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void write (byte[] b, int off, int len)
将从指定字节数组开始的 len
个字节写入此文件,偏移量从 off
开始。
Parameters | |
---|---|
b |
byte : the data. |
off |
int : the start offset in the data. |
len |
int : the number of bytes to write. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void write (int b)
将指定的字节写入此文件。 写入从当前文件指针开始。
Parameters | |
---|---|
b |
int : the byte to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void writeBoolean (boolean v)
将boolean
作为单字节值写入文件。 价值true
被写出价值(byte)1
; 值false
被写为值(byte)0
。 写入从文件指针的当前位置开始。
Parameters | |
---|---|
v |
boolean : a boolean value to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void writeByte (int v)
将byte
作为单字节值写入文件。 写入从文件指针的当前位置开始。
Parameters | |
---|---|
v |
int : a byte value to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void writeBytes (String s)
将字符串作为字节序列写入文件。 字符串中的每个字符通过丢弃其高八位而依次写出。 写入从文件指针的当前位置开始。
Parameters | |
---|---|
s |
String : a string of bytes to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void writeChar (int v)
将一个char
作为一个双字节值写入文件,先写入高字节。 写入从文件指针的当前位置开始。
Parameters | |
---|---|
v |
int : a char value to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void writeChars (String s)
将字符串作为字符序列写入文件。 每个字符都写入数据输出流,就像通过writeChar
方法一样。 写入从文件指针的当前位置开始。
Parameters | |
---|---|
s |
String : a String value to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
也可以看看:
void writeDouble (double v)
使用doubleToLongBits
类中的doubleToLongBits
方法将双long
参数转换为Double
,然后将该long
值作为八字节数量写入文件,高字节在前。 写入从文件指针的当前位置开始。
Parameters | |
---|---|
v |
double : a double value to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
也可以看看:
void writeFloat (float v)
浮子参数的转换int
使用floatToIntBits
方法在类Float
,然后写入该int
值到该文件作为一个四字节数量,高字节。 写入从文件指针的当前位置开始。
Parameters | |
---|---|
v |
float : a float value to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
也可以看看:
void writeInt (int v)
写入一个int
作为四个字节的文件,高字节在前。 写入从文件指针的当前位置开始。
Parameters | |
---|---|
v |
int : an int to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void writeLong (long v)
写入long
作为八个字节的文件,首先是高字节。 写入从文件指针的当前位置开始。
Parameters | |
---|---|
v |
long : a long to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void writeShort (int v)
将两个字节写入文件short
先写入高字节。 写入从文件指针的当前位置开始。
Parameters | |
---|---|
v |
int : a short to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void writeUTF (String str)
以与机器无关的方式使用 modified UTF-8编码将一个字符串写入文件。
首先,从当前文件指针开始,将两个字节写入文件,就像通过writeShort
方法给出要跟随的字节数一样。 该值是实际写出的字节数,而不是字符串的长度。 在长度之后,字符串的每个字符按顺序输出,每个字符使用修改后的UTF-8编码。
Parameters | |
---|---|
str |
String : a string to be written. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void finalize ()
当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 子类会覆盖finalize
方法以处置系统资源或执行其他清理。
的常规协定finalize
是,它被调用,如果当在Java TM虚拟机已确定不再有由该目的可以通过还没有死亡,除了作为一个动作的结果的任何线程访问的任何手段取决于某些其他可以完成的对象或类别的最终定稿。 finalize
方法可以采取任何行动,包括使该对象再次可用于其他线程; 然而, finalize
的通常目的是在对象被不可撤销地丢弃之前执行清理操作。 例如,表示输入/输出连接的对象的finalize方法可能会执行显式I / O事务,以在永久丢弃该对象之前中断连接。
类Object
的finalize
方法Object
执行特殊操作; 它只是正常返回。 Object
子类可能会覆盖此定义。
Java编程语言不保证哪个线程将为任何给定对象调用finalize
方法。 但是,保证调用finalize的线程在调用finalize时不会保留任何用户可见的同步锁。 如果finalize方法引发未捕获的异常,则忽略该异常,并终止该对象的终止。
在为一个对象调用了 finalize
方法之后,在Java虚拟机再次确定没有任何方法可以通过任何尚未死亡的线程访问该对象之前,不会采取进一步的操作,包括可能的操作通过准备完成的其他对象或类别,此时该对象可能被丢弃。
对于任何给定的对象,Java虚拟机永远不会多次调用 finalize
方法。
finalize
方法引发的任何异常 finalize
导致终止此对象的终止,但会被忽略。
Throws | |
---|---|
Throwable |