-
Sinif metodlarını sadalayın
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
equals
Niyə və metodlara ehtiyac varhashCode
?Obyektləri müqayisə etmək üçün istifadə olunur.
Metodun məqsədi
equals
obyektlərin daxili məzmununu müqayisə edərək, obyektlərin daxili eyni olub olmadığını müəyyən etməkdir. Bu,equals
yavaş-yavaş işləyir, əvvəlcə obyektlərin hash kodları müqayisə edilir və hash kodları bərabərdirsə, yoxlama aparılır.equals
-
Bərabərləri ləğv etsəniz, lakin ləğv etməsəniz nə olar
hashCode
?Əvvəlcə
hashCode
təsadüfi bir nömrə.Java-dakı kolleksiyalar həmişə istifadə edərək obyektləri müqayisə etməzdən əvvəl
equals
metoddan istifadə edərək onları axtarır/müqayisə edirhashCode()
. Eyni obyektlər fərqlidirsəhashCode
, o zaman obyektlər fərqli hesab ediləcək - onlardan istifadə etməklə müqayisə etmək sadəcə mümkün olmayacaqequals
. -
Niyə üsullar
wait
,notify
,notifyAll
?Bəzən bir proqramda bir mövzunun kod blokuna daxil olduğu
synchronized
, monitoru blokladığı və daha çox işləyə bilməyəcəyi bir vəziyyət ola bilər, çünki bəzi məlumatlar hələ də yoxdur: məsələn, onun emal etməli olduğu fayl hələ yüklənməyib və ya buna bənzər bir şey. Bu problemi həll etmək üçün bir üsul icad edilmişdirwait()
. Bu metodun çağırılması mövzunun monitoru buraxmasına və "fasilə" verilməsinə səbəb olur.Fasiləni dayandırmaq üçün üsullardan istifadə olunur
notify
.notifyAll
Metodnotify
bir təsadüfi ipi "dondurur", metodnotifyAll
- müəyyən bir monitorun bütün "donmuş" iplərini. -
Bir obyekti necə düzgün klonlaşdırmaq olar?
İki növ klonlama.
Standart obyekti klonlaşdırmaq üçün:
Cloneable
Sinifinizə interfeys əlavə edin- Metodunu ləğv edin
clone
və onun içindəki əsas tətbiqi çağırın:
class Point implements Cloneable { int x; int y; public Object clone() { return super.clone(); } }
Və ya metodun həyata keçirilməsini
clone
özünüz yaza bilərsiniz:class Point { int x; int y; public Object clone() { Point point = new Point(); point.x = this.x; point.y = this.y; return point; } }
-
Metod nə üçün lazımdır
finalize()
və necə işləyir?Xatırlayırsınızsa, bu,
finalize()
zibil kollektoru onu məhv etməzdən əvvəl obyektə çağırılan xüsusi bir üsuldur.Bu metodun əsas məqsədi istifadə olunan xarici qeyri-Java resurslarını buraxmaqdır: faylları bağlamaq, giriş/çıxış axınları və s.
finalize()
qeyri-sabit işləyir.Bu üsul ona qoyulan gözləntiləri doğrultmur. Java maşını obyektin məhv edilməsini, eləcə də metodun çağırılmasını
finalize
istədiyi müddətə gecikdirə bilər. Üstəlik, bu metodun ümumiyyətlə çağırılacağına zəmanət vermir. Bir çox hallarda, "optimallaşdırma" üçün çağırılmır. -
Fərq nədir
final
,finally
,finalize
?final
- dəyişdirici- Sahələr dəyişdirilə bilməz, üsullar ləğv edilir
- Siniflər miras alına bilməz
- Bu dəyişdirici yalnız siniflərə, metodlara və dəyişənlərə (həmçinin yerli dəyişənlərə) aiddir.
- Metod arqumentləri yalnız oxunur
final
; onları dəyişməyə cəhd kompilyasiya xətası ilə nəticələnəcək. - Переменные
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