ภายใต้สถานการณ์ปกติไม่สามารถใช้คลาสการปรับเปลี่ยนแบบคงที่ หากคุณต้องใช้สแตติกเพื่อปรับเปลี่ยนคลาสคงที่มักจะปรับเปลี่ยนคลาสภายในที่ไม่ระบุชื่อ
สร้างคลาสอื่นในคลาสหนึ่งเรียกว่า Member Inner Class คลาสสมาชิกภายในนี้สามารถคงที่ (โดยใช้การปรับเปลี่ยนคำหลักคงที่) หรือไม่คงที่ เนื่องจากคลาสภายในแบบคงที่มีข้อ จำกัด ต่าง ๆ เมื่อกำหนดและใช้งาน ไม่มากนักในการทำงานจริง
ในระหว่างกระบวนการพัฒนาชั้นเรียนภายในที่พบมากที่สุดจะใช้ในคลาสภายในที่เป็นสมาชิกที่ไม่คงที่ อย่างไรก็ตามในบางกรณีชั้นเรียนชั้นในแบบคงที่ยังสามารถมีบทบาทที่เป็นเอกลักษณ์ได้
1. วัตถุประสงค์ของการใช้คลาสภายในแบบคงที่
เมื่อกำหนดชั้นเรียนภายในคุณสามารถนำหน้าด้วยการปรับเปลี่ยนแบบคงที่ ในเวลานี้คลาสภายในนี้จะกลายเป็นคลาสภายในแบบคงที่ อย่างไรก็ตามเนื่องจากเหตุผลต่าง ๆ เช่นข้อ จำกัด การใช้งานและปัจจัยอื่น ๆ (ข้อ จำกัด การใช้งานที่เฉพาะเจาะจงมีการอธิบายรายละเอียดในเนื้อหาต่อไปนี้) ไม่มีการใช้งานจริงในงานจริง แต่มันไม่ได้หมายความว่ามันไม่มีค่า ในบางกรณีพิเศษมันเป็นไปไม่ได้ที่จะขาดชั้นเรียนภายในแบบคงที่นี้ ตัวอย่างเช่นเมื่อทำการทดสอบโปรแกรมโค้ดหากมีการตั้งค่าวิธีหลักในไฟล์แหล่ง Java แต่ละไฟล์ (วิธีหลักคือทางเข้าสู่แอปพลิเคชันที่แน่นอนและต้องมี) แล้วรหัสพิเศษจำนวนมากจะปรากฏขึ้น และสิ่งที่สำคัญที่สุดคือรหัสของโปรแกรมหลักนี้เป็นเพียงรูปแบบสำหรับไฟล์ Java และไม่ต้องการวิธีการหลักนี้เอง แต่มันเป็นไปไม่ได้ที่จะทำโดยไม่มีวิธีการหลักนี้ ในกรณีนี้วิธีหลักสามารถเขียนลงในคลาสภายในแบบคงที่เพื่อไม่ต้องตั้งค่าวิธีหลักที่คล้ายกันสำหรับไฟล์ต้นฉบับ Java แต่ละไฟล์ สิ่งนี้มีประโยชน์มากสำหรับการทดสอบรหัส ในการพัฒนาแอพพลิเคชั่นขนาดกลางและขนาดใหญ่มันเป็นวิธีการทางเทคนิคที่ใช้กันทั่วไป ด้วยเหตุผลนี้แม้ว่าคลาสภายในแบบคงที่นี้จะไม่ได้ใช้งานบ่อยนัก แต่นักพัฒนาโปรแกรมก็ต้องเชี่ยวชาญด้วย บางทีในช่วงเวลาที่สำคัญบางอย่างก็ยังสามารถมีบทบาทอย่างมาก
คลาสสาธารณะ MaininStaticClass {คลาสคงที่หลัก {โมฆะคงที่หลัก () {// เขียนวิธีหลักไปยังชั้นเรียนภายในแบบคงที่ดังนั้นจึงไม่จำเป็นต้องมีวิธีหลักประเภทนี้สำหรับไฟล์ต้นฉบับแต่ละไฟล์ใหม่ maininstaticClass () พิมพ์ ();}} โมฆะสาธารณะ print () {system.out.println ("หลักในคลาสภายในคงที่");}} testmain คลาสสาธารณะ {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {// วิธีการที่สร้างอัตโนมัติโดยอัตโนมัติ stub // maininstaticclass (ใหม่); print ();2. ข้อ จำกัด เกี่ยวกับการใช้คลาสภายในแบบคงที่
การกำหนดคลาสชั้นในเป็นคลาสคงที่โดยทั่วไปเหมือนกับการกำหนดคลาสอื่น ๆ เป็นคลาสคงที่และกฎการอ้างอิงจะเหมือนกัน อย่างไรก็ตามรายละเอียดยังคงแตกต่างกันมาก โดยเฉพาะส่วนใหญ่มีพื้นที่ต่อไปนี้เพื่อดึงดูดความสนใจของนักพัฒนาโปรแกรมทั้งหมด
หนึ่งคือคำจำกัดความของสมาชิกคงที่ (รวมถึงตัวแปรคงที่และสมาชิกคงที่) โดยทั่วไปการพูดหากคลาสภายในไม่ได้ถูกกำหนดให้เป็นคลาสภายในแบบคงที่แสดงว่าไม่สามารถกำหนดเป็นตัวแปรสมาชิกแบบคงที่และวิธีการสมาชิกแบบคงที่เมื่อกำหนดตัวแปรสมาชิกหรือวิธีการสมาชิก นั่นคือสมาชิกคงที่ไม่สามารถประกาศในชั้นเรียนที่ไม่คงที่ ตัวอย่างเช่นอายุชั้นเรียนภายในถูกกำหนดไว้ในชั้นเรียนนักเรียน หากคลาสนี้ไม่ได้รับการแก้ไขด้วยคำหลักคงที่นั่นคือมันไม่ได้ถูกกำหนดให้เป็นคลาสแบบคงที่จะไม่ได้รับอนุญาตให้แก้ไขวิธีการสมาชิกหรือตัวแปรสมาชิกในคลาสภายในนี้ มันจะไม่สามารถผ่านได้เมื่อรวบรวม ดังนั้นนักพัฒนาโปรแกรมจำเป็นต้องทราบว่าโดยการปรับเปลี่ยนคลาสภายในเป็นคลาสแบบคงที่เท่านั้นที่สามารถกำหนดตัวแปรสมาชิกแบบคงที่และวิธีการสมาชิกที่กำหนดไว้ในคลาสนี้ นี่เป็นคุณสมบัติที่คลาสภายในแบบคงที่มี ด้วยเหตุผลนี้อย่างแม่นยำว่าบางครั้งงานหลายอย่างไม่สามารถทำให้เสร็จได้หากไม่มีคลาสภายในแบบคงที่นี้ หรือจำเป็นต้องเดินไปรอบ ๆ วงกลมขนาดใหญ่เพื่อให้บรรลุความต้องการของผู้ใช้บางราย นี่เป็นเหตุผลสำคัญที่ทำให้เกิดภายใน
ประการที่สองมีข้อ จำกัด ค่อนข้างใหญ่ในการอ้างอิงสมาชิก ชั้นเรียนภายในที่ไม่คงที่ทั่วไปสามารถเข้าถึงตัวแปรสมาชิกและวิธีการสมาชิกในคลาสภายนอกตามที่ต้องการ แม้ว่าวิธีการสมาชิกเหล่านี้จะถูกแก้ไขเป็นส่วนตัว (ตัวแปรสมาชิกส่วนตัวหรือวิธีการ) คลาสภายในที่ไม่คงที่ของพวกเขาสามารถเข้าถึงได้ตามต้องการ มันเป็นสิทธิพิเศษของชั้นเรียนภายในที่ไม่คงที่ เพราะในชั้นเรียนอื่นตัวแปรสมาชิกหรือวิธีการที่กำหนดเป็นส่วนตัวไม่สามารถเข้าถึงได้ อย่างไรก็ตามหากคลาสภายในถูกกำหนดเป็นแบบคงที่จะมีข้อ จำกัด มากมายเมื่อใช้วิธีการสมาชิกหรือตัวแปรสมาชิกของชั้นนอก ตัวอย่างเช่นสมาชิกที่ไม่คงที่ของคลาสภายนอก (รวมถึงตัวแปรสมาชิกและวิธีการสมาชิก) ไม่สามารถเข้าถึงได้จากวัตถุของชั้นเรียนชั้นในแบบคงที่ สิ่งนี้หมายความว่าอย่างไร? หากตัวแปรสองตัวถูกกำหนดไว้ในคลาสภายนอกตัวแปรหนึ่งเป็นตัวแปรที่ไม่คงที่และอีกตัวแปรเป็นตัวแปรคงที่ จากนั้นในชั้นเรียนภายในแบบคงที่ไม่ว่าจะอยู่ในวิธีการสมาชิกหรือที่อื่น ๆ มันสามารถอ้างอิงตัวแปรคงที่ในชั้นนอกเท่านั้นและไม่สามารถเข้าถึงตัวแปรที่ไม่คงที่ ในชั้นเรียนภายในแบบคงที่สามารถกำหนดวิธีการคงที่ (และเฉพาะวิธีการคงที่เท่านั้นที่สามารถกำหนดได้ในชั้นเรียนชั้นในแบบคงที่) และสมาชิกของคลาสภายนอกสามารถอ้างอิงได้ในวิธีการคงที่ อย่างไรก็ตามไม่ว่าจะมีการอ้างอิงคลาสภายในที่ใดมีสิ่งหนึ่งที่เหมือนกันนั่นคือมันสามารถอ้างอิงวิธีการสมาชิกแบบคงที่หรือตัวแปรสมาชิกในชั้นนอกเท่านั้น สำหรับตัวแปรสมาชิกที่ไม่คงที่และวิธีการสมาชิกพวกเขาไม่สามารถเข้าถึงได้ในชั้นเรียนชั้นในแบบคงที่ นี่คือขีด จำกัด การใช้งานสูงสุดสำหรับชั้นเรียนภายในแบบคงที่ ไม่มีข้อ จำกัด ดังกล่าวในชั้นเรียนภายในที่ไม่คงที่ มันเป็นเหตุผลนี้อย่างแม่นยำว่าคลาสภายในแบบคงที่ใช้ในบางโอกาสเท่านั้น ช่วงแอปพลิเคชันนั้นครอบคลุมน้อยกว่าชั้นเรียนภายในที่ไม่คงที่
ประการที่สามเมื่อสร้างคลาสภายในแบบคงที่ไม่จำเป็นต้องผูกอินสแตนซ์ของคลาสภายในแบบคงที่กับอินสแตนซ์ของคลาสภายนอก
โดยทั่วไปแล้วเมื่อสร้างคลาสสมาชิกภายในในชั้นเรียนจะมีบทบัญญัติที่จำเป็นนั่นคืออินสแตนซ์ของคลาสชั้นในจะต้องผูกพันกับอินสแตนซ์ของชั้นนอก กล่าวคือก่อนที่จะสร้างคลาสภายในคุณต้องใช้คำหลักใหม่ก่อนในคลาส Outer เพื่อสร้างวัตถุของคลาสภายในนี้ ในกรณีนี้หากวัตถุคลาสชั้นในเริ่มต้นจากคลาสภายนอกวัตถุคลาสชั้นในจะถูกผูกไว้กับวัตถุชั้นนอก กล่าวอีกนัยหนึ่งวัตถุของคลาสชั้นในที่ไม่คงที่ทั่วไปจะถูกแนบไปกับวัตถุภายนอก อย่างไรก็ตามหากนักพัฒนาสมาชิกสร้างชั้นเรียนภายในแบบคงที่นั่นเป็นอีกเรื่องหนึ่ง โดยทั่วไปเมื่อโปรแกรมเมอร์กำหนดคลาสภายในแบบคงที่เขาไม่จำเป็นต้องกำหนดอินสแตนซ์ของคลาสภายนอก กล่าวคือเพื่อกำหนดคลาสภายในแบบคงที่ในคลาสภายนอกไม่จำเป็นต้องใช้คำหลักใหม่เพื่อสร้างอินสแตนซ์ของคลาสภายใน นั่นคือเมื่อสร้างวัตถุภายในของคลาสคงที่วัตถุของคลาสภายนอกนั้นไม่จำเป็น
newMainInStaticClass.Main();
ด้วยเหตุผลเฉพาะผู้พัฒนาโปรแกรมโดยทั่วไปไม่จำเป็นต้องเข้าใจอย่างลึกซึ้งพวกเขาเพียงแค่ต้องจำไว้ว่ามีกฎนี้ เมื่อกำหนดชั้นเรียนภายในแบบคงที่อย่าทำผิดพลาดในการเพิ่มเงินพิเศษ
จากการวิเคราะห์ข้างต้นเราจะเห็นว่าชั้นเรียนด้านในแบบคงที่ยังคงแตกต่างจากชั้นเรียนภายในที่ไม่คงที่ โดยทั่วไปนักพัฒนาโปรแกรมสามารถเข้าใจได้ว่าวัตถุคลาสภายในที่ไม่คงที่บันทึกการอ้างอิงในคลาสด้านนอกโดยปริยายเพื่อชี้ไปที่วัตถุชั้นนอกที่สร้างขึ้น โดยไม่คำนึงถึงความเข้าใจนี้นักพัฒนาโปรแกรมจำเป็นต้องคำนึงถึงความแตกต่างระหว่างชั้นเรียนภายในแบบคงที่และชั้นเรียนภายในที่ไม่คงที่ ตัวอย่างเช่นวิธีการสมาชิกแบบคงที่และตัวแปรสมาชิกสามารถสร้างได้หรือไม่ (คลาสชั้นในแบบคงที่สามารถสร้างสมาชิกแบบคงที่แทนที่จะเป็นคลาสภายในไม่สามารถ) ข้อ จำกัด ในการเข้าถึงสมาชิกของชั้นเรียนภายนอก (คลาสภายในแบบคงที่สามารถเข้าถึงตัวแปรสมาชิกคงที่ ความแตกต่างทั้งสองนี้เป็นความแตกต่างที่ใหญ่ที่สุดระหว่างชั้นเรียนภายในแบบคงที่และชั้นนอกที่ไม่คงที่และยังเป็นเหตุผลว่าทำไมชั้นเรียนภายในแบบคงที่ หลังจากทำความเข้าใจกับความแตกต่างนี้นักพัฒนาโปรแกรมจำเป็นต้องรู้ภายใต้สถานการณ์ใดที่พวกเขาควรใช้ชั้นเรียนภายในแบบคงที่ ตัวอย่างเช่นในระหว่างการทดสอบโปรแกรมเพื่อหลีกเลี่ยงการเขียนรหัสวิธีหลักในแต่ละไฟล์แหล่ง Java วิธีการหลักสามารถเขียนลงในคลาสภายในแบบคงที่เพื่อลดจำนวนรหัสที่เขียนและทำให้รหัสกระชับมากขึ้น
ในระยะสั้นชั้นเรียนภายในแบบคงที่เป็นคลาสที่พิเศษมากในภาษา Java ซึ่งแตกต่างจากชั้นเรียนคงที่ทั่วไปและชั้นเรียนภายในที่ไม่คงที่ ในฐานะนักพัฒนาโปรแกรมมีความจำเป็นที่จะต้องทราบความแตกต่างระหว่างพวกเขาและนำคลาสที่เหมาะสมมาใช้ในการทำงานจริง อย่างไรก็ตามโดยทั่วไปความถี่ของชั้นเรียนภายในแบบคงที่ไม่สูงมาก อย่างไรก็ตามในบางโอกาสหากคลาสคงที่ภายในนี้ไม่สามารถใช้ได้อาจมีผลกระทบเชิงลบครึ่งหนึ่งของผลลัพธ์ด้วยความพยายามสองครั้ง
3. อินสแตนซ์
หลังจากอ่านเนื้อหาข้างต้นฉันทดสอบโดยรวม:
ก่อนอื่นทุกคนต้องเข้าใจว่าชั้นเรียนภายในแบบคงที่ไม่ได้ขึ้นอยู่กับคลาสภายนอกและตัวแปรและวิธีการภายในนั้นไม่จำเป็นต้องคงที่ พูดคุยเกี่ยวกับรหัสด้านล่าง:
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {myinnerstaticclass inner = new myinnerstaticclass (); inner.a = 10; inner.b = "abc"; system.out.println (inner.a+"" inner.b); การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {myinnerstaticclass inner = new myinnerstaticclass (); inner.a = 10; inner.b = "abc"; system.out.println (inner.a+"" inner.b);รหัสข้างต้นแสดงให้เห็นถึงคลาสที่ไม่ระบุชื่อแบบคงที่ด้วยใหม่ป้อน 10 ABC หลังจากทำงานถูกต้อง!
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของคลาสคงที่ใน Java ในบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!