Java Inner Inner Class <br /> การกำหนดคลาสด้านในเป็นคลาสคงที่นั้นเหมือนกับการกำหนดคลาสอื่น ๆ เป็นคลาสคงที่และกฎอ้างอิงนั้นเหมือนกัน อย่างไรก็ตามรายละเอียดยังคงแตกต่างกันมาก โดยเฉพาะส่วนใหญ่มีพื้นที่ต่อไปนี้เพื่อดึงดูดความสนใจของนักพัฒนาโปรแกรมทั้งหมด
(1) การพูดโดยทั่วไปหากคลาสภายในไม่ได้ถูกกำหนดเป็นคลาสภายในแบบคงที่จะไม่สามารถกำหนดเป็นตัวแปรสมาชิกแบบคงที่และวิธีการสมาชิกแบบคงที่เมื่อกำหนดตัวแปรสมาชิกหรือวิธีการสมาชิก นั่นคือสมาชิกคงที่ไม่สามารถประกาศในชั้นเรียนที่ไม่คงที่
(ii) โดยทั่วไปคลาสภายนอกที่ไม่คงที่สามารถเข้าถึงตัวแปรสมาชิกและวิธีการของคลาสภายนอกของพวกเขาที่จะ (รวมถึงวิธีการที่ประกาศว่าเป็นส่วนตัว) ข้อ จำกัด คลาสภายในแบบคงที่ไม่สามารถเข้าถึงตัวแปรสมาชิกที่ไม่คงที่และวิธีการของคลาสภายนอก
(3) เมื่อสร้างคลาสสมาชิกที่ไม่คงที่ในชั้นเรียนจะมีบทบัญญัติที่จำเป็นนั่นคืออินสแตนซ์ของคลาสภายในจะต้องผูกพันกับอินสแตนซ์ของคลาสภายนอก จากนั้นคุณต้องกำหนดคลาสภายในแบบคงที่ในคลาสภายนอกและคุณไม่จำเป็นต้องใช้คำหลักใหม่เพื่อสร้างอินสแตนซ์ของคลาสภายใน นั่นคือเมื่อสร้างวัตถุภายในของคลาสคงที่วัตถุของคลาสภายนอกนั้นไม่จำเป็น
Java ใช้คลาสภายในต่อไปนี้เมื่อใช้ LinkedList:
LinkedList คลาสสาธารณะ <E> ขยายบทคัดย่อ abstractequentialList <E> ใช้รายการ <e>, deque <e>, cloneable, java.io.serializable {............ คลาสคงที่ส่วนตัว en ลอง <e> {elements; ous ก่อนหน้า;}} รายการส่วนตัว <E> addbefore (e, รายการ <e> รายการ) {รายการ <e> newEntry = รายการใหม่ <E> (e, รายการ, รายการ. previous); ;
นี่คือการใช้งานทั่วไปของชั้นเรียนภายในแบบคงที่
คลาสเครื่องมือการซิงโครไนซ์ Java
/** * หลายเธรดจะต้องเริ่มต้นเพื่อนำเข้าข้อมูลอินเตอร์เฟสลงในเป้าหมายในแบทช์ ซึ่งเป็นสาระสำคัญของปัญหาของการซิงโครไนซ์ระหว่างเธรด ที่อนุญาตให้เสร็จสิ้นก่อนที่จะดำเนินการชุดของการดำเนินการ * ที่ดำเนินการในเธรดอื่น ๆ * เริ่มต้น Countdownlatch ด้วยจำนวนที่กำหนด เนื่องจากวิธีการนับถอยหลัง () ถูกเรียกใช้วิธีการรอ * จะถูกบล็อกจนกว่าจำนวนปัจจุบันจะถึงศูนย์ หลังจากนั้นเธรดที่รอคอยทั้งหมดจะได้รับการปล่อยตัวและการโทรที่ตามมาทั้งหมดจะรอจะถูกส่งคืนทันที * ปรากฏการณ์นี้เกิดขึ้นเพียงครั้งเดียว - การนับไม่สามารถรีเซ็ตได้ (นี่สำคัญมาก) หากคุณต้องการรีเซ็ตการนับให้พิจารณาใช้ CyclicBarrier * ต่อไปนี้เป็นตัวอย่างง่ายๆในการจำลองข้อกำหนดนี้ * คลาสเนื้อหาของมันค่อนข้างซับซ้อน* **/ นำเข้า Java.util.arrayList; <จำนวนเต็ม> strlist = null; int k = 0; } โมฆะคงที่สาธารณะ (สตริง args []) {บูลีน isend = true; )> :::::::::::::::::::::::: กระทาน ::::::::::::::::::::::::::::::::::::::::::: หัวโจก 0 && นับ <20) {CountDownLatch startIgnal = New Countdownlatch (1); ++ i) {เธรดใหม่ (D.New Worker (เริ่มต้น, donesignal, i)). start (); ) {สุ่ม r = new random (); (); เพิ่ม (i);}}}}}). start (); countdownlatch สุดท้าย donesignal; สำหรับเธรดหลักเพื่อดำเนินการนับถอยหลังเริ่มต้น AIT (); ) {int start = (i)*(50/5); strlist.get (i) + "---" + "ลบ");}}}}}