-
列出類別方法
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
為什麼需要
equals
方法hashCode
?用於比較物件。
此方法的目的
equals
是透過比較物件的內部內容來判斷物件內部是否相同。這個equals
工作很慢,首先比較物件的雜湊碼,如果雜湊碼相等,則進行檢查equals
-
如果您覆蓋 equals 但不覆蓋,會發生什麼
hashCode
?最初
hashCode
是一個隨機數。Java 中的集合在使用 比較物件之前
equals
總是使用方法來尋找/比較它們hashCode()
。如果相同的物件有不同hashCode
,那麼這些物件將被認為是不同的 - 根本不可能使用它們進行比較equals
。 -
為什麼這些方法是
wait
,notify
?notifyAll
有時程式可能會出現這樣的情況:執行緒進入了程式碼區塊
synchronized
,阻塞了監視器,無法進一步工作,因為 一些資料仍然丟失:例如,它應該處理的文件尚未加載或類似的東西。為了解決這個問題,發明了一個方法wait()
。呼叫此方法會導致執行緒釋放監視器並“暫停”。要取消暫停,需要使用方法
notify
。notifyAll
該方法notify
“解凍”一個隨機線程,該方法notifyAll
- 給定監視器的所有“凍結”線程。 -
如何正確克隆一個物件?
兩種類型的克隆。
克隆預設物件:
Cloneable
在您的類別中新增一個接口- 重寫該方法
clone
並呼叫其中的基本實作:
class Point implements Cloneable { int x; int y; public Object clone() { return super.clone(); } }
clone
或者你可以自己編寫該方法的實作:class Point { int x; int y; public Object clone() { Point point = new Point(); point.x = this.x; point.y = this.y; return point; } }
-
為什麼需要該方法
finalize()
以及它是如何運作的?如果您還記得的話,這
finalize()
是一個特殊的方法,在垃圾收集器銷毀物件之前會在物件上呼叫該方法。此方法的主要目的是釋放使用的外部非Java資源:關閉檔案、I/O流等。
finalize()
工作不穩定。這種方法並沒有達到人們對其的期望。
finalize
Java 機器可以根據需要延遲物件的銷毀以及方法的呼叫。而且,它根本不保證這個方法會被呼叫。在很多情況下,為了“最佳化”,它不會被呼叫。 -
有什麼不同
final
,finally
,finalize
?final
- 修改器- 字段無法更改,方法被覆蓋
- 類別不能被繼承
- 此修飾符僅適用於類別、方法和變數(也是局部變數)
- 標記為
final
唯讀的方法參數;嘗試更改它們將導致編譯錯誤。 - Переменные
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