我们知道Object基类有如下的方法:
问题一:
为什么唯独clone方法,在源码中要定义成protected呢?其他定义成public的呢?
问题二:
finalize()这个方法好像在项目中很少被用到,但是它能够被定义到基类当中,说明其重要性是很高的,那么这个具体如何使用?在什么情况下,必须使用,非用不可呢??
// 对象相关
getClass()
clone() - protected
toString()
equals(Object)
hashCode()
// 线程相关
notify()
notifyAll()
wait([long[, int]])
// GC相关
finalize()
Ini untuk mengelakkan panggilan terus dari luar kelas.
Oleh kerana kaedah
clone
mesti melaksanakan antara mukaCloneable
dahulu dan kemudian menulis semula kaedah klon().Anda tidak kerap menggunakan fungsi ini tetapi anda mungkin tidak mempunyai pengalaman projek yang mencukupi
Jika anda mempunyai pengalaman pengaturcaraan peringkat rendah (seperti bahasa C), anda mungkin memberi lebih perhatian kepada pelepasan memori, kemudian pelepasan sumber, dsb. Permohonan dan pelepasan mesti berlaku secara berpasangan. Walau bagaimanapun, disebabkan mesin maya di Jawa, terdapat mekanisme pengumpulan sampah, dan anda mungkin tidak pernah memberi perhatian kepada isu pelepasan memori. Sebenarnya, anda tidak perlu memberi perhatian kepada perkara ini.
Jadi, walaupun ramai yang tahu
构造函数
, mereka lupa析构函数
yang sepadan. (Seperti yang dinyatakan di atas, Java akan melepaskan memori secara automatik.)Tetapi:
java
mengeluarkan memori yang diminta olehjava
.Jika anda menggunakan java untuk memanggil c, C++ atau windows api, ini sebenarnya dipanggil
JNI(Java Native Interface)
Java tidak boleh melepaskan memori yang digunakan di sini secara automatik, jadi anda mungkin perlu menggunakanfinalize
Pelepasan selari.Ringkasnya, ia berfungsi seperti pemusnah.