-
Класстын ыкмаларын тизмектеңиз
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
equals
Эмне үчүн жана методдор керекhashCode
?Объекттерди салыштыруу үчүн колдонулат.
Методдун максаты
equals
- an objectтердин ички мазмунун салыштыруу аркылуу an objectилердин ички окшоштугун аныктоо. Булequals
жай иштейт, адегенде an objectтердин хэш codeдору салыштырылат жана хэш codeдору бирдей болсо, текшерүү жүргүзүлөт.equals
-
Эгер барабарларды жокко чыгарсаңыз, бирок жокко чыгарбасаңыз эмне болот
hashCode
?Башында
hashCode
, кокустук сан.Javaдагы коллекциялар ар дайым an objectтерди салыштыруудан мурун
equals
методду колдонуп издешет/салыштыратhashCode()
. Ал эми бирдей an objectилер ар кандай болсоhashCode
, анда an objectтер башка болуп эсептелет - аларды колдонуу менен салыштыруу мүмкүн эмесequals
. -
Эмне үчүн методдор
wait
,notify
,notifyAll
?Кээде программада жип code блогуна кирип
synchronized
, мониторду бөгөттөп, андан ары иштей албай турган жагдай болушу мүмкүн, анткени кээ бир маалыматтар дагы эле жок: мисалы, ал иштете турган файл али жүктөлө элек же ушуга окшош. Бул маселени чечүү үчүн бир ыкма ойлоп табылганwait()
. Бул ыкманы чакыруу жипти мониторду бошотууга жана "тынымга" алып келет.Тыныгуу үчүн ыкмалар колдонулат
notify
.notifyAll
Методnotify
бир кокус жипти "тоңдурат", методnotifyAll
- берилген монитордун бардык "тоңдурулган" жиптерин. -
Объектти кантип туура клондосо болот?
Клондоштуруунун эки түрү.
Демейки an objectти клондоо үчүн:
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()
таштанды жыйноочу аны жок кылганга чейин an objectке чакырылган атайын ыкма.Бул методдун негизги максаты колдонулган тышкы Java эмес ресурстарды чыгаруу: файлдарды жабуу, киргизүү/чыгаруу агымдары ж.б.
finalize()
туруксуз иштейт.Бул ыкма ага коюлган күтүүлөрдү актаbyte. Java машинасы an objectтин жок кылынышын, ошондой эле методдун чакырылышын
finalize
каалаганча кечиктире алат. Анын үстүнө, бул ыкма такыр чакырылат деп кепилдик бербейт. Көптөгөн жагдайларда, "оптималдаштыруу" үчүн ал чакырылbyte. -
Кандай айырма бар
final
,finally
,finalize
?final
- өзгөрткүч- Талааларды өзгөртүү мүмкүн эмес, ыкмалар жокко чыгарылды
- Класстарды мурастоого болбойт
- Бул өзгөрткүч класстарга, ыкмаларга жана өзгөрмөлөргө (ошондой эле жергorктүү өзгөрмөлөргө) тиешелүү.
- Метод аргументтери окуу үчүн гана деп белгиленген
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