JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #105. เหตุใด Strings จึงไม่เปลี่ยนรูปใน Java อ...

คอฟฟี่เบรค #105. เหตุใด Strings จึงไม่เปลี่ยนรูปใน Java อินเทอร์เฟซใน Java และการสืบทอดหลายรายการ

เผยแพร่ในกลุ่ม

เหตุใด Strings จึงไม่เปลี่ยนรูปใน Java

Source: Dev.to ก่อนที่จะทำความเข้าใจว่าทำไม Strings ถึงไม่เปลี่ยนรูปใน Java เราต้องคิดก่อนว่าทำไมเราถึงสร้างบางสิ่งที่ไม่เปลี่ยนรูป คอฟฟี่เบรค #105.  เหตุใด Strings จึงไม่เปลี่ยนรูปใน Java  อินเทอร์เฟซใน Java และการสืบทอดหลายรายการ - 1ไม่เปลี่ยนรูป หมายความว่า เมื่อสร้างขึ้นแล้ว เราไม่สามารถเปลี่ยนแปลงมันได้ เหตุผลเดียวที่เรานึกถึงการสร้างสิ่งที่ไม่เปลี่ยนรูปได้ก็เพื่อการซิงโครไนซ์เมื่อใช้ร่วมกัน นี่คือสาเหตุที่ทำให้สตริงไม่เปลี่ยนรูป ใน Java อ็อบเจ็กต์Stringจะถูกแชร์และแคชใน String Pool เป็นตำแหน่งเฉพาะบนฮีปที่เก็บสตริงและใช้ร่วมกันระหว่างหลายเธรดหากมีค่าเท่ากัน ตัวอย่างเช่น: ในพูลสตริง หากมีสตริงที่มีค่า "test" อยู่แล้ว และโปรแกรมต้องการสร้างออบเจ็กต์สตริงอื่นที่มีค่าเดียวกัน ก็จะได้รับการอ้างอิงเดียวกันแทนที่จะสร้างออบเจ็กต์สตริงใหม่ ตอนนี้เรารู้แล้วว่าสตริงถูกจัดเก็บบนฮีปอย่างไร มาดูกันว่าทำไมพวกเขาถึงไม่เปลี่ยนแปลง
  1. เหตุผลแรกของความไม่เปลี่ยนรูปคือความปลอดภัยของเธรด เนื่องจากแถวต่างๆ ถูกใช้ร่วมกันระหว่างหลายๆ เธรดในพูลแถว เราจึงต้องจำกัดเธรดแบบสุ่มใดๆ เพื่อเปลี่ยนแปลง การเปลี่ยนแปลงแถวอาจส่งผลต่อเธรดอื่นที่เข้าถึงแถวเดียวกัน หากเธรดต้องการอัพเดตค่าของแถว เธรดนั้นจำเป็นต้องสร้างแถวอื่นและอ้างอิงเธรดนั้น

  2. โดยปกติ แล้วเราใช้Stringเป็นกุญแจสำคัญในMap หากสตริงไม่แน่นอน ใครๆ ก็สามารถเปลี่ยนค่าของสตริงได้ และเราจะสูญเสียคีย์จริงไป

อินเทอร์เฟซใน Java และการสืบทอดหลายรายการ

ที่มา: Dev.to มาทำความเข้าใจกันว่า Multi Inheritance คืออะไร การสืบทอดหลายรายการเป็นคุณลักษณะของภาษาโปรแกรมเชิงวัตถุบางภาษา ซึ่งวัตถุหรือคลาสสามารถสืบทอดฟังก์ชันการทำงานจากวัตถุหลักหรือคลาสหลักมากกว่าหนึ่งรายการได้ คอฟฟี่เบรค #105.  เหตุใด Strings จึงไม่เปลี่ยนรูปใน Java  อินเทอร์เฟซใน Java และการสืบทอดหลายรายการ - 1ดังที่แสดงในภาพด้านบน คลาสลูกที่สืบทอดหลายคลาสสามารถมีคลาสพื้นฐานได้ตั้งแต่สองคลาสขึ้นไป แต่เพื่อให้บรรลุเป้าหมายนี้ เราจำเป็นต้องมีอินเทอร์เฟซ

อินเตอร์เฟซ

อินเทอร์เฟซใน Java คือพิมพ์เขียวของคลาส มีค่าคงที่คงที่และวิธีการเชิงนามธรรม นั่นคืออินเทอร์เฟซสามารถมีเมธอดและตัวแปรเชิงนามธรรมเท่านั้น ไม่สามารถมีเนื้อความของเมธอดได้ ไม่สามารถสร้างได้ในลักษณะเดียวกับคลาสนามธรรม

แล้วเราจะประกาศเนื้อหาของวิธีการเหล่านี้ที่ไหน?

เนื้อความของวิธีการถูกประกาศภายในคลาสที่ต้องการวิธีการตามความต้องการของโปรแกรมเมอร์

จะประกาศอินเทอร์เฟซได้อย่างไร?

สามารถประกาศอินเทอร์เฟซได้โดยใช้ คีย์เวิร์ด อินเทอร์เฟ ซ ไวยากรณ์:
interface interface_name {abstract methods}

บันทึก

เพื่อที่จะใช้อินเทอร์เฟ ซ ที่ประกาศไว้ในคลาส เราต้องใช้ คีย์เวิร์ด Implements

การนำไปปฏิบัติ?

อันดับแรก เราจะสร้างprint interface และภายในนั้น เราจะสร้าง abstract print() method ;
interface printgib{
void print();
}
ตอนนี้เรามีอินเทอร์เฟซที่พร้อมสำหรับคลาสที่จะใช้ ดังนั้นเรามาสร้างคลาสabcและgkและใช้งานอินเทอร์เฟซในคลาสเหล่านั้นกันดีกว่า
public class abc implements printgib{
public void print(){                     //1st implementation of print
System.out.println("I love you 3000");
}
public static void main(String[] args){
abc obj = new abc();
gk obj1 = new gk();
obj.print();
obj1.print();
}
}

class gk implements printgib{
public void print(){                   //2nd implementation of print
System.out.println("I am Gk");
}
}
ดังที่แสดงในโค้ดข้างต้น เราได้รับมรดกหลายรายการและใช้งานอินเทอร์เฟซ ตอนนี้เพื่อรันโค้ด บันทึกไฟล์และ...
javac file_name.java
java abc

ผลลัพธ์:

คอฟฟี่เบรค #105.  เหตุใด Strings จึงไม่เปลี่ยนรูปใน Java  อินเทอร์เฟซใน Java และการสืบทอดหลายรายการ - 2
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION