JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #93 คลาส String ทำงานอย่างไรใน Java เรียนรู้วิ...

คอฟฟี่เบรค #93 คลาส String ทำงานอย่างไรใน Java เรียนรู้วิธีใช้งานเว็บอินเตอร์เฟสใน Java

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

คลาส String ทำงานอย่างไรใน Java

ที่มา: DZone ฉันเพิ่งเจอคำถามต่อไปนี้ในฟอรัม: “ มีการสร้างออบเจ็กต์ String กี่รายการที่ นี่ หนึ่งหรือสอง?".
String langName = new String("Java");
ฉันอยากรู้ว่าคนอื่นตอบอย่างไร เพราะรู้ว่ามันเป็นคำถามที่ซับซ้อน โดยเฉพาะอย่างยิ่งหากไม่มีใครมีความรู้เกี่ยวกับวิธี การทำงานของคลาส Stringใน Java มากนัก ดังนั้นฉันจึงเข้าไปที่ส่วนความคิดเห็น คอฟฟี่เบรค #93  คลาส String ทำงานอย่างไรใน Java  เรียนรู้วิธีใช้งานเว็บอินเตอร์เฟสใน Java - 1ฉันแปลกใจมากที่ในบรรดาผู้แสดงความคิดเห็น มีคนเลือก "หนึ่ง" เป็นคำตอบที่ถูกต้อง แต่มีอีกหลายคนตอบว่า "สอง" วินาทีนั้น ฉันเริ่มสงสัยในความรู้ของฉันเกี่ยวกับStrings คำตอบที่ถูกต้องคือทุกอย่างขึ้นอยู่กับสถานการณ์ คำถามไม่ชัดเจนเพียงพอและเหลือพื้นที่ให้อภิปราย ฉันจะเรียบเรียงใหม่เช่นนี้:

1. มีการสร้างอ็อบเจ็กต์ Java String ในหน่วยความจำจำนวนเท่าใดเมื่อมีการดำเนินการคำสั่งนี้

มีคำตอบเดียวเท่านั้น

มีออบเจ็กต์ Java String จำนวนเท่าใดที่จะยังคงอยู่ในหน่วยความจำหลังจากดำเนินการคำสั่งนี้

คำตอบคือสอง หวังว่าความไม่แน่นอนจะหายไปเมื่อฉันตรวจสอบการถ่ายโอนข้อมูลหน่วยความจำของโปรแกรมด้วยคำสั่งเหมือนตัวอย่างด้านบน คอฟฟี่เบรค #93  คลาส String ทำงานอย่างไรใน Java  เรียนรู้วิธีใช้งานเว็บอินเตอร์เฟสใน Java - 2ดัมพ์หน่วยความจำของโปรแกรมในภาพด้านบนแสดงการมีอยู่ของ ออบเจ็กต์ String สองตัว ที่มีเนื้อหาเดียวกัน สิ่งนี้พิสูจน์ว่าการเรียก ตัวสร้างคลาส Stringและส่งผ่านตัวอักษรสตริงเป็นอาร์กิวเมนต์ส่งผลให้มีการเพิ่มอ็อบเจ็กต์สองตัวในฮีปหน่วยความจำ: อันหนึ่งอยู่ในหน่วยความจำปกติ (ไม่ใช่พูล) และอีกอันใน String Constant Pool (SCP) พื้นที่ในหน่วยความจำที่เป็นส่วนหนึ่งของฮีปด้วย ความยากลำบากเริ่มต้นหลังจากการเพิ่ม การเรียก Constructor จะส่งผลให้มีการวาง Object ใหม่ในพื้นที่ที่ไม่ใช่ Pool เสมอ แต่อาร์กิวเมนต์ตัวสร้างซึ่งเป็นสตริงลิเทอรัล ก็เป็นอ็อบเจ็กต์เช่นกัน และมันถูกสร้างและเก็บไว้ใน SCP ระหว่างการโหลดคลาส โดยมีเงื่อนไขว่าพูลสตริงไม่มีสตริงที่มีเนื้อหาเหมือนกัน ข้อมูลจำเพาะภาษา Javaระบุว่า "ตัวอักษรสตริง - หรือโดยทั่วไปคือสตริงที่เป็นค่าของนิพจน์คงที่ (§15.28) - เป็น "interned" เพื่อแบ่งปันอินสแตนซ์ที่ไม่ซ้ำกันโดยใช้วิธี String . intern " เนื่องจากสตริงใน Java นั้นเป็นตัวอักษรและดังนั้นจึงแสดงถึงค่าของนิพจน์คงที่ สตริงนั้นจึงถูกรวมเข้าด้วยกัน เพื่อให้ชัดเจนยิ่งขึ้น เราจะเขียนโค้ดที่นำเสนอในตอนต้นของบทความใหม่ดังนี้:
String java = "Java";
String langName = new String(java);
ตอนนี้เรากลับมาที่คำถามหลักกัน คำสั่งต่อไปนี้จะสร้าง วัตถุ String หนึ่งหรือสองวัตถุ :
String langName = new String("Java");
เพื่อตอบคำถามนี้และขจัดข้อสงสัยใดๆ ให้ดูที่รหัสไบต์ของวิธีการหลัก:
public static main([Ljava/lang/String;)V
   L0
    LINENUMBER 11 L0
    NEW java/lang/String
    DUP
    LDC "Java"
    INVOKESPECIAL java/lang/String. (Ljava/lang/String;)V
    ASTORE 1

   L1
    LINENUMBER 14 L1
   FRAME APPEND [java/lang/String]
    GOTO L1

   L2
    LOCALVARIABLE args [Ljava/lang/String; L0 L2 0
    LOCALVARIABLE langName Ljava/lang/String; L1 L2 1
    MAXSTACK = 3
    MAXLOCALS = 2
ในบรรทัดที่ 6 คุณสามารถดูคำสั่ง LDC (Load Constant) มันโหลดองค์ประกอบจากพูลคงที่สตริงลงบนสแต็ก ซึ่งหมายความว่า ณ เวลาที่เรียกใช้ Constructor นั้น Java literal ซึ่งเป็นอ็อบเจ็กต์ก็ถูกเพิ่มเข้าในพูลแล้ว สิ่งนี้เกิดขึ้นขณะโหลดชั้นเรียน ดังนั้นการเรียก ตัวสร้างคลาส Stringด้วยตัวอักษรสตริงจะสร้างวัตถุเดียวเท่านั้นและวางไว้ในตำแหน่งหน่วยความจำที่ไม่ได้พูล

เรียนรู้วิธีใช้งานเว็บอินเตอร์เฟสใน Java

ที่มา: Dev.to โลกของ JavaScript นำเสนอเฟรมเวิร์กเว็บที่มีประโยชน์และสนุกสนาน ไม่ต้องสงสัยเลย มีทางเลือกที่น่าสนใจสำหรับนักพัฒนา Java นั่นคือเฟรม เวิร์ก Vaadin แบบ โอเพ่นซอร์ส ด้วยเครื่องมือนี้ คุณจะสามารถใช้อินเทอร์เฟซผู้ใช้แบบกราฟิก (GUI) สำหรับเว็บได้อย่างง่ายดายโดยใช้เฉพาะภาษาโปรแกรม Java เท่านั้น และไม่มีอะไรอื่นอีก คุณไม่จำเป็นต้องเขียน HTML หรือ JavaScript แม้แต่บรรทัดเดียว ภาพที่มีค่าพันคำ: คอฟฟี่เบรค #93  คลาส String ทำงานอย่างไรใน Java  เรียนรู้วิธีใช้งานเว็บอินเตอร์เฟสใน Java - 3

วาดินออกฤทธิ์อย่างไร?

ทางด้านซ้ายของภาพหน้าจอ คุณจะเห็นคลาส Java โค้ดนี้ทำงานบนเซิร์ฟเวอร์ เช่น Apache Tomcat, Eclipse Jetty หรือคอนเทนเนอร์เซิร์ฟเล็ตอื่นๆ คุณสามารถใช้ API ที่ได้รับจากแพลตฟอร์มเพื่อสร้างส่วนประกอบ อินเทอร์เฟซผู้ใช้ (UI) เช่น ช่องข้อความ กล่องคำสั่งผสม ตารางข้อมูล ตัวเลือกวันที่ ช่องอัพโหลด และอื่นๆ อีกมากมาย คุณสามารถรวมส่วนประกอบเหล่านี้เพื่อสร้างมุมมอง (หรือที่เรียกว่าเพจหรือ UI) โดยใช้เค้าโครงเพื่อจัดเรียงส่วนประกอบอินเทอร์เฟซผู้ใช้ (UI) ในแนวตั้ง แนวนอน หรือวิธีอื่นใดโดยใช้ CSS ในตัวอย่างก่อนหน้านี้ เราได้สร้างTextField และ Button โดยการเพิ่มลงในVerticalLayout เมื่อมุมมองพร้อมแล้ว คุณสามารถเปิดผ่าน URL โดยใช้ คำ อธิบาย ประกอบ @Route ในตัวอย่างนี้ เราทำให้สามารถใช้งานได้ที่ http://localhost:8080/hello โดยใช้@Route ("hello") แอปพลิเคชัน Vaadin เป็นเว็บแอปพลิเคชันในภาษา Java เฟรมเวิร์กจัดเตรียมการใช้งาน Servlet ( VaadinServlet ) ที่จัดการคำขอ HTTP และการตอบกลับสำหรับคุณ เซิร์ฟเล็ตนี้จะสแกนคลาส Java ที่ทำเครื่องหมายด้วย คำอธิบายประกอบ @Routeเพื่อแสดงมุมมองที่ถูกต้องในเบราว์เซอร์ เมื่อมีการร้องขอแอปพลิเคชัน Vaadin เป็นครั้งแรก Vaadin จะตอบกลับด้วยไฟล์ JavaScript แบบมีน้ำหนักเบาซึ่งทำหน้าที่เป็นกลไกไคลเอนต์ เอ็นจิ้นนี้ดูแลการประมวลผลเหตุการณ์ในเบราว์เซอร์และส่งไปยังเซิร์ฟเวอร์เป็นข้อความ JSON อ็อบเจ็กต์VaadinServletประมวลผลคำขอและส่งคืนการตอบสนอง JSON ไปยังเอ็นจิ้นฝั่งไคลเอ็นต์ในทำนองเดียวกัน กลไกใช้ข้อความนี้เพื่ออัปเดตองค์ประกอบบนหน้าที่จำเป็นต้องอัปเดต ถ้ามี Vaadin ใช้เซสชัน HTTP เพื่อจัดเก็บแผนผังส่วนประกอบที่มีสถานะของอินเทอร์เฟซผู้ใช้ สิ่งต่างๆ เช่น ส่วนประกอบสร้างการแสดงและสถานะของส่วนประกอบ (เปิดใช้งาน/ปิดใช้งาน คำอธิบายภาพ ค่า ฯลฯ) ทั้งหมดนี้ให้ระดับความปลอดภัยที่ควรค่าแก่การกล่าวขวัญ เนื่องจากลอจิกอินเทอร์เฟซผู้ใช้อยู่บนเซิร์ฟเวอร์ ผู้โจมตีจึงไม่สามารถเข้าถึงได้ การตรวจสอบจะดำเนินการบนเซิร์ฟเวอร์ ตัวอย่างเช่น หากปุ่มถูกปิดใช้งานโดยใช้setEnabled(false)นี่ไม่ได้เป็นเพียงคุณลักษณะที่สวยงามในเบราว์เซอร์ เซิร์ฟเวอร์จะไม่เรียกใช้ตรรกะใด ๆ ใน Listener คลิกที่เพิ่มลงในปุ่มปิดใช้งาน เพื่อป้องกันไม่ให้ผู้โจมตีใช้ประโยชน์จากเครื่องมือของนักพัฒนาในเบราว์เซอร์ เพื่อเปลี่ยนสถานะที่เปิดใช้งานหรือเรียกVaadinServletเพื่อจำลองการคลิกเมาส์ (คลิกเหตุการณ์)

Vaadin ใช้งานได้ฟรีหรือไม่?

ใช่. Vaadin เป็นเฟรมเวิร์กโอเพ่นซอร์สที่เผยแพร่ภายใต้ Apache License 2.0 คุณไม่จำเป็นต้องซื้ออะไรเพื่อสร้างแอปพลิเคชันเว็บที่มีคุณสมบัติครบถ้วน มีส่วนประกอบเชิงพาณิชย์ที่ช่วยปรับปรุงประสิทธิภาพ แต่ก็ไม่จำเป็น ตัวอย่างเช่น มีนักออกแบบภาพและส่วนประกอบ CRUD เพื่อช่วยให้คุณสร้างมุมมองได้เร็วยิ่งขึ้น คุณสามารถทดลองใช้ส่วนประกอบเหล่านี้ได้ฟรีก่อนสมัครสมาชิก

Vaadin เป็นสิ่งทดแทน JSP และ JSF หรือไม่

ใช่. สามารถใช้แทนเฟรมเวิร์ก JSP, JSF และแม้แต่ JavaScript เช่น Angular ลูกค้า Vaadin จำนวนมากย้ายจากเทคโนโลยีเหล่านี้มาสู่ Vaadin ได้สำเร็จ

Vaadin รองรับ Spring และ Jakarta EE หรือไม่

ใช่. Vaadin มีการบูรณาการอย่างเป็นทางการกับ Spring และ Jakarta EE (เดิมชื่อ Java EE) คุณสามารถเพิ่ม Vaadin เป็นการพึ่งพาเมื่อสร้างโปรเจ็กต์ Spring Boot ใหม่โดยใช้ Spring Initializr สำหรับ Jakarta EE คุณสามารถดาวน์โหลดตัวอย่าง Hello, World แบบง่ายๆ ที่ใช้ Jakarta EE ในขณะที่เขียนบทความนี้ รองรับเฉพาะ Jakarta EE เวอร์ชัน 8 เท่านั้น

ใครใช้ Vaadin บ้าง?

บริษัทใน Fortune 500 หลายแห่งใช้ Vaadin รวมถึงบริษัทสตาร์ทอัพที่ประสบความสำเร็จและนักพัฒนากว่า 200,000 รายทั่วโลก ดูคู่มือเริ่มต้นใช้งานฉบับย่อ และ เอกสาร Vaadin อื่นๆ
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION