-
Рӯйхати усулҳои синф
Object
equals()
hashCode()
toString()
getClass()
notify()
notifyAll()
wait()
wait(long timeOut)
wait(long timeOut, int nanos)
-
equals
Чаро ва усулҳо лозимандhashCode
?Барои муқоисаи an objectҳо истифода мешавад.
Мақсади усул
equals
муайян кардани он аст, ки оё an objectҳо бо роҳи муқоисаи мундариҷаи дохorи an objectҳо якхелаанд. Инequals
оҳиста кор мекунад, аввал codeҳои хэши an objectҳо муқоиса карда мешаванд ва агар 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ро дуруст клон кардан мумкин аст?
Ду намуди клонкунӣ.
Барои клон кардани 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()
ноустувор кор мекунад.Ин усул ба интизориҳои дар он гузошташуда мувофиқат намекунад. Мошини Java метавонад нобудшавии an object ва инчунин даъвати усулро
finalize
то даме, ки ба он маъқул аст, таъхир кунад. Гузашта аз ин, он кафолат намедиҳад, ки ин усул умуман даъват карда мешавад. Дар бисёр ҳолатҳо, ба хотири "оптимизатсия" он даъват карда намешавад. -
В чем отличие
final
,finally
,finalize
?final
— модификатор- Поля не могут быть изменены, методы переопределены
- Классы нельзя наследовать
- Этот модификатор применяется только к классам, методам и переменным (также и к локальным переменным)
- Аргументы методов, обозначенные How
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