-
Senaraikan kaedah kelas
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
equals
Mengapa & kaedah diperlukanhashCode
?Digunakan untuk membandingkan objek.
Tujuan kaedah ini
equals
adalah untuk menentukan sama ada objek secara dalaman adalah sama dengan membandingkan kandungan dalaman objek. Iniequals
berfungsi dengan perlahan, mula-mula kod cincang objek dibandingkan, dan jika kod cincang adalah sama, semakan dibuat terhadapequals
-
Apa yang berlaku jika anda mengatasi sama tetapi tidak mengatasi
hashCode
?Pada mulanya
hashCode
, nombor rawak.equals
Koleksi di Java sentiasa mencari/membandingkannya menggunakan kaedah sebelum membandingkan objek menggunakanhashCode()
. Dan jika objek yang sama mempunyai berbezahashCode
, maka objek itu akan dianggap berbeza - tidak mungkin untuk membandingkan menggunakannyaequals
. -
Kenapa kaedahnya
wait
,notify
,notifyAll
?Kadangkala program mungkin mempunyai situasi di mana benang telah memasuki blok kod
synchronized
, menyekat monitor dan tidak boleh berfungsi lebih jauh, kerana beberapa data masih tiada: contohnya, fail yang sepatutnya diproses belum dimuatkan atau sesuatu seperti itu. Satu kaedah telah dicipta untuk menyelesaikan masalah iniwait()
. Memanggil kaedah ini menyebabkan benang melepaskan monitor dan "jeda".Untuk menyahjeda, kaedah digunakan
notify
.notifyAll
Kaedahnotify
"menyahbeku" satu utas rawak, kaedahnotifyAll
- semua "beku" benang monitor yang diberikan. -
Bagaimana untuk mengklon objek dengan betul?
Dua jenis pengklonan.
Untuk mengklon objek lalai:
- Tambahkan antara muka
Cloneable
pada kelas anda - Gantikan kaedah
clone
dan panggil pelaksanaan asas di dalamnya:
class Point implements Cloneable { int x; int y; public Object clone() { return super.clone(); } }
Atau anda boleh menulis pelaksanaan kaedah itu
clone
sendiri:class Point { int x; int y; public Object clone() { Point point = new Point(); point.x = this.x; point.y = this.y; return point; } }
- Tambahkan antara muka
-
Mengapa kaedah itu diperlukan
finalize()
dan bagaimana ia berfungsi?Jika anda masih ingat, ini
finalize()
adalah kaedah khas yang dipanggil pada objek sebelum pemungut sampah memusnahkannya.Tujuan utama kaedah ini adalah untuk melepaskan sumber luar bukan Java yang digunakan: menutup fail, aliran I/O, dsb.
finalize()
berfungsi tidak stabil.Kaedah ini tidak memenuhi jangkaan yang diletakkan di atasnya. Mesin Java boleh menangguhkan pemusnahan objek, serta panggilan kaedah,
finalize
selama yang ia suka. Lebih-lebih lagi, ia tidak menjamin bahawa kaedah ini akan dipanggil sama sekali. Dalam banyak situasi, demi "pengoptimuman" ia tidak dipanggil. -
Apakah perbezaannya
final
,finally
,finalize
?final
- pengubahsuai- Medan tidak boleh ditukar, kaedah ditindih
- Kelas tidak boleh diwarisi
- Pengubah suai ini hanya digunakan pada kelas, kaedah dan pembolehubah (juga pembolehubah tempatan)
- Argumen kaedah ditandakan sebagai
final
baca sahaja; cuba mengubahnya akan mengakibatkan ralat penyusunan. - Переменные
final
не инициализируются по умолчанию, им необходимо явно присвоить meaning при объявлении or в конструкторе, иначе – ошибка компиляции - Если final переменная содержит ссылку на an object, an object может быть изменен, но переменная всегда будет ссылаться на тот же самый an object
- Также это справедливо и для массивов, потому что массивы являются an objectми, – массив может быть изменен, а переменная всегда будет ссылаться на тот же самый массив
- Если класс объявлен
final
иabstract
(взаимоисключающие понятия), произойдет ошибка компиляции - Так How
final
класс не может наследоваться, его методы никогда не могут быть переопределены
finally
— блок в связкеtry-catch-finally
, code в котором выполнится независимо от того вылетело ли исключение в блокеtry
or нет. Используется для освобождения ресурсов.finalize
— метод в классеObject
см 6. -
What такое
try-with-resources
?Это специальная конструкция
try
, называемаяtry-with-resources
, в которой Обрати внимание – послеtry
следуют круглые скобки, где объявляются переменные и создаются an objectы. Эти an objectы можно использовать внутри блокаtry
, обозначенного скобками{}
. Когда выполнение команд блокаtry
закончится, независимо от того – нормально оно закончилось or было исключение, для an object, созданного внутри круглых скобок()
, будет вызван методclose()
; -
Чем отличаются методы
wait(1000)
иsleep(1000)
?sleep()
приостанавливает поток на указанное. состояние меняется на TIMED_WAITING, по истечению — RUNNABLEwait()
меняет состояние потока на WAITINGможет быть вызвано только у an object владеющего блокировкой, в противном случае выкинется исключение IllegalMonitorStateException. при срабатывании метода блокировка отпускается, что позволяет продолжить работу другим потокам ожидающим захватить ту же самую блокировку . в случае
wait(int)
с аргументом состояние будет TIMED_WAITING -
В чем отличие
i++
и++i
?++i
,i
сначала увеличивается на 1, затем участвует в выражении.i++
,i
сначала участвует в выражении, затем увеличивается на 1.
GO TO FULL VERSION