เมธอดคลาสอ็อบเจกต์ทั้งหมด รวมถึงเมธอด toString() เพิ่มเติม - 1

“สวัสดี อามีโก้!”

"สวัสดี!"

"วันนี้เราจะมาศึกษาคลาส Object กัน
คุณเคยพบมาแล้วและรู้ว่า Object เป็นคลาสพื้นฐานสำหรับทุกคลาส แทบไม่มีข้อมูลเลย แต่ก็มีหลายวิธี"

"เหตุใดจึงต้องใช้เมธอด มีใครสร้างอินสแตนซ์ของคลาสออบเจกต์จริงๆ ไหม"

"ลองดูวิธีนี้: เมธอดในคลาสอ็อบเจกต์นั้นเหมือนกันในทุกคลาส กล่าวอีกนัยหนึ่ง ผู้สร้าง Java ได้ระบุเมธอดต่างๆ ที่ตามความเห็นของพวกเขา ทุกคลาสควรมี และเพิ่มเข้าไปในคลาสอ็อบเจกต์"

"และเมื่อรวมเข้ากับ polymorphism (ความสามารถในการแทนที่เมธอดของคลาส Object ในคลาสที่ได้รับ) สิ่งนี้จะกลายเป็นเครื่องมือที่ทรงพลังมาก"

"มาดูกันว่าวิธีการเหล่านี้คืออะไร:"

วิธี คำอธิบาย
public String toString()
ส่งกลับการแสดงสตริงของวัตถุ
public native int hashCode()
public boolean equals(Object obj)
วิธีการคู่ที่ใช้ในการเปรียบเทียบวัตถุ
public final native Class getClass()
ส่งกลับวัตถุพิเศษที่อธิบายคลาสปัจจุบัน
public final native void notify()
public final native void notifyAll()
public final native void wait(long timeout)
public final void wait(long timeout, intnanos)
public final void wait()
วิธีการควบคุมการเข้าถึงวัตถุจากเธรดต่างๆ สำหรับการซิงโครไนซ์เธรด
protected void finalize()
วิธีนี้ช่วยให้คุณปล่อยรีซอร์สเนทีฟที่ไม่ใช่ Java: ปิดไฟล์ สตรีม ฯลฯ
protected native Object clone()
วิธีนี้ทำให้คุณสามารถโคลนวัตถุ: สร้างสำเนาของวัตถุ

"วิธีการเหล่านี้สามารถแบ่งออกเป็น 6 กลุ่ม คุณคุ้นเคยกับบางวิธีแล้ว และเราจะทำความคุ้นเคยกับส่วนที่เหลือในบทเรียนต่อๆ ไป"

"ด้วยเหตุผลบางอย่าง ฉันไม่เห็นอะไรที่เป็นประโยชน์ที่นี่"

"อามิโก! ถ้าวิธีการเหล่านี้ไม่สำคัญ พวกมันคงไม่เพิ่มเข้าไปในทุก ๆ วัตถุ! ดังนั้น ฉันขอแนะนำให้คุณพิจารณาให้ละเอียดยิ่งขึ้นว่าสิ่งเหล่านี้คืออะไรและทำไมจึงจำเป็น หากพวกเขาดูเหมือนไม่สำคัญสำหรับคุณ แล้วคุณไม่เข้าใจบางอย่างหรือไม่เข้าใจบางอย่างอย่างถูกต้อง"

“ตกลง ฉันจะตั้งใจฟัง”

"เรามาเริ่มกันที่ toString() วิธีการ

"เมธอดนี้ช่วยให้คุณได้รับคำอธิบายที่เป็นข้อความของวัตถุใด ๆ การใช้งานในคลาสวัตถุนั้นง่ายมาก:"

return getClass().getName() + "@" + Integer.toHexString(hashCode());

"getClass() และ hashCode() เป็นเมธอดของคลาสอ็อบเจกต์ด้วย
การเรียกใช้เมธอดนี้มักจะให้ผลลัพธ์ดังนี้:"

java.lang.Object@12F456

"คำอธิบายเช่นนี้มีประโยชน์อย่างไร"

"คำอธิบายนี้ช่วยให้คุณทราบคลาสของวัตถุที่เรียกใช้เมธอด คุณยังสามารถแยกความแตกต่างระหว่างวัตถุได้ โดยวัตถุต่างๆ จะมีตัวเลขต่างกันตามหลังสัญลักษณ์ @"

"แต่มูลค่าที่แท้จริงของเมธอดนี้อยู่ที่อื่น เมธอดนี้สามารถเขียนทับในคลาสใดก็ได้เพื่อส่งคืนคำอธิบายวัตถุที่มีรายละเอียดมากขึ้นหรือเหมาะสม"

"แต่ยังมีมากกว่านั้น เนื่องจากคุณสามารถรับการแสดงข้อความของแต่ละวัตถุได้ Java จึงทำให้คุณสามารถใช้การสนับสนุนสำหรับ 'เพิ่ม' สตริงให้กับวัตถุได้ ลองดูสิ
:"

รหัส เกิดอะไรขึ้นจริงๆ
int age = 18;
System.out.println("Age is " + age);
String s = String.valueOf(18);
String result = "Age is " + s;
System.out.println(result);
Student st = new Student("Vincent");
System.out.println("Student is " + st);
Student st = new Student("Vincent");
String result = "Student is " + st.toString();
System.out.println(result);
Car car = new Porsche();
System.out.println("My car is " + car);
Car car = new Porsche();
String result = "My car is " + car.toString();
System.out.println(result);

"ใช่ ฉันใช้มันเป็นประจำ โดยเฉพาะอย่างยิ่งเมื่อฉันเขียนโปรแกรมหรือมองหาจุดบกพร่อง มันเป็นการดำเนินการที่มีประโยชน์"