-
แสดงรายการวิธีการเรียน
Objectequals()hashCode()toString()getClass()notify()notifyAll()wait()wait(long timeOut)wait(long timeOut, int nanos)
-
equalsเหตุใดจึงมี & วิธีการhashCode?ใช้เพื่อเปรียบเทียบวัตถุ
วัตถุประสงค์ของวิธีการนี้
equalsคือเพื่อตรวจสอบว่าวัตถุภายในเหมือนกันหรือไม่โดยการเปรียบเทียบเนื้อหาภายในของวัตถุ สิ่งนี้equalsทำงานช้า ก่อนอื่นจะมีการเปรียบเทียบรหัสแฮชของออบเจ็กต์ และหากรหัสแฮชเท่ากัน จะมีการตรวจสอบกับequals -
จะเกิดอะไรขึ้นถ้าคุณแทนที่เท่ากับแต่ไม่แทนที่
hashCode?เริ่มแรก
hashCodeจะเป็นตัวเลขสุ่มequalsคอลเลกชันใน Java จะค้นหา/เปรียบเทียบโดยใช้วิธีการเสมอก่อนที่จะเปรียบเทียบวัตถุโดยใช้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()ทำงานไม่เสถียรวิธีนี้ไม่เป็นไปตามความคาดหวังที่ตั้งไว้ เครื่อง Java สามารถชะลอการทำลายอ็อบเจ็กต์ เช่นเดียวกับการเรียกเมธอด ได้
finalizeนานเท่าที่ต้องการ นอกจากนี้ยังไม่รับประกันว่าจะมีการเรียกใช้วิธีนี้เลย ในหลาย ๆ สถานการณ์ มันไม่ได้ถูกเรียกว่าเพื่อ "การเพิ่มประสิทธิภาพ" -
อะไรคือความแตกต่าง
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 в котором выполнится независимо от того вылетело ли исключение в блокеtryor нет. Используется для освобождения ресурсов.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.
zor07
ระดับ
GO TO FULL VERSION