-
Lista metod klas
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
equals
Dlaczego & metody są potrzebnehashCode
?Służy do porównywania obiektów.
Celem tej metody
equals
jest określenie, czy obiekty są wewnętrznie identyczne, poprzez porównanie wewnętrznej zawartości obiektów. Działa toequals
powoli, najpierw porównuje się kody mieszające obiektów, a jeśli kody mieszające są równe, sprawdza się, czyequals
-
Co się stanie, jeśli zastąpisz równa się, ale nie zastąpisz
hashCode
?Początkowo
hashCode
liczba losowa.equals
Kolekcje w Javie zawsze wyszukują/porównują je przy użyciu metody przed porównaniem obiektów przy użyciu metodyhashCode()
. A jeśli identyczne obiekty mają różne cechyhashCode
, wówczas obiekty te zostaną uznane za różne – po prostu nie będzie możliwe porównanie przy ich użyciuequals
. -
Dlaczego są to metody
wait
,notify
,notifyAll
?Czasami w programie może wystąpić sytuacja, w której wątek wprowadził blok kodu
synchronized
, zablokował monitor i nie może dalej pracować, ponieważ nadal brakuje niektórych danych: na przykład plik, który powinien przetworzyć, nie został jeszcze załadowany lub coś w tym rodzaju. Wynaleziono metodę rozwiązania tego problemuwait()
. Wywołanie tej metody powoduje, że wątek zwalnia monitor i „wstrzymuje”.Aby wznowić, stosuje się metody
notify
.notifyAll
Metodanotify
„odmraża” jeden losowy wątek, metodanotifyAll
– wszystkie „zamrożone” wątki danego monitora. -
Jak poprawnie sklonować obiekt?
Dwa rodzaje klonowania.
Aby sklonować obiekt domyślny:
- Dodaj interfejs
Cloneable
do swojej klasy - Zastąp metodę
clone
i wywołaj w niej podstawową implementację:
class Point implements Cloneable { int x; int y; public Object clone() { return super.clone(); } }
clone
Możesz też sam napisać implementację metody :class Point { int x; int y; public Object clone() { Point point = new Point(); point.x = this.x; point.y = this.y; return point; } }
- Dodaj interfejs
-
Dlaczego ta metoda jest potrzebna
finalize()
i jak działa?Jeśli pamiętasz,
finalize()
jest to specjalna metoda wywoływana na obiekcie, zanim moduł zbierający elementy bezużyteczne go zniszczy.Głównym celem tej metody jest zwolnienie używanych zewnętrznych zasobów innych niż Java: plików zamykających, strumieni we/wy itp.
finalize()
działa niestabilnie.Metoda ta nie spełnia pokładanych w niej oczekiwań. Maszyna Java może opóźniać zniszczenie obiektu, a także wywołanie metody,
finalize
tak długo, jak chce. Co więcej, nie gwarantuje to, że metoda ta w ogóle zostanie wywołana. W wielu sytuacjach w imię „optymalizacji” nie jest to wywoływane. -
Jaka jest różnica
final
,finally
,finalize
?final
- modyfikator- Pola nie mogą być zmieniane, metody są nadpisywane
- Klasy nie mogą być dziedziczone
- Ten modyfikator dotyczy tylko klas, metod i zmiennych (także zmiennych lokalnych)
- Argumenty metod oznaczone jako
final
tylko do odczytu; próba ich zmiany zakończy się błędem kompilacji. - Переменные
final
не инициализируются по умолчанию, им необходимо явно присвоить oznaczający при объявлении Lub в конструкторе, иначе – ошибка компиляции - Если final переменная содержит ссылку на obiekt, obiekt может быть изменен, но переменная всегда будет ссылаться на тот же самый obiekt
- Также это справедливо и для массивов, потому что массивы являются obiektами, – массив может быть изменен, а переменная всегда будет ссылаться на тот же самый массив
- Если класс объявлен
final
иabstract
(взаимоисключающие понятия), произойдет ошибка компиляции - Так Jak
final
класс не может наследоваться, его методы никогда не могут быть переопределены
finally
— блок в связкеtry-catch-finally
, kod в котором выполнится независимо от того вылетело ли исключение в блокеtry
Lub нет. Используется для освобождения ресурсов.finalize
— метод в классеObject
см 6. -
Co такое
try-with-resources
?Это специальная конструкция
try
, называемаяtry-with-resources
, в которой Обрати внимание – послеtry
следуют круглые скобки, где объявляются переменные и создаются obiektы. Эти obiektы можно использовать внутри блокаtry
, обозначенного скобками{}
. Когда выполнение команд блокаtry
закончится, независимо от того – нормально оно закончилось Lub было исключение, для obiektа, созданного внутри круглых скобок()
, будет вызван методclose()
; -
Чем отличаются методы
wait(1000)
иsleep(1000)
?sleep()
приостанавливает поток на указанное. состояние меняется на TIMED_WAITING, по истечению — RUNNABLEwait()
меняет состояние потока на WAITINGможет быть вызвано только у obiektа владеющего блокировкой, в противном случае выкинется исключение IllegalMonitorStateException. при срабатывании метода блокировка отпускается, что позволяет продолжить работу другим потокам ожидающим захватить ту же самую блокировку . в случае
wait(int)
с аргументом состояние будет TIMED_WAITING -
В чем отличие
i++
и++i
?++i
,i
сначала увеличивается на 1, затем участвует в выражении.i++
,i
сначала участвует в выражении, затем увеличивается на 1.
GO TO FULL VERSION