Static เป็นคำหลักที่สำคัญอีกคำหนึ่งใน Java มันสามารถปรับปรุงประสิทธิภาพการทำงานของโปรแกรมและเพิ่มประสิทธิภาพโครงสร้างของโปรแกรม แอปพลิเคชั่นหลักมีดังนี้:
1. ตัวแปรสมาชิกที่แก้ไขโดยสแตติกเรียกว่าตัวแปรคลาส/ตัวแปรคงที่เพื่อตระหนักถึงการแบ่งปันวัตถุทั้งหมดให้กับสมาชิกนั้น
2. วิธีการสมาชิกที่แก้ไขโดยคงที่เรียกว่าเมธอดคลาส/วิธีการคงที่สามารถเรียกได้โดยตรงผ่านชื่อคลาสโดยไม่ต้องสร้างวัตถุ
3. บล็อกรหัสแบบคงที่เพื่อเพิ่มประสิทธิภาพของโปรแกรม
4. แพ็คเกจตะกั่วแบบคงที่โดยทั่วไปจะนำเข้าคลาสคลาสโดยตรงไปยังคลาสปัจจุบันเพื่อให้สามารถเรียกใช้วิธีการคลาสโดยตรงโดยใช้ชื่อวิธีซึ่งสะดวกกว่า
5. แก้ไขคลาสด้านในและโทรไปที่คลาสด้านในโดยไม่ต้องทำอินสแตนซ์ชั้นนอก
คำอธิบายรหัสต่อไปนี้แนบ:
นักเรียนชั้นเรียนสาธารณะ {ชื่อสตริง; อายุ int คงที่; สตริงสาธารณะ toString () {return "ชื่อ:" + ชื่อ + ", อายุ:" + อายุ; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {นักเรียน s1 = นักเรียนใหม่ (); s1.name = "จางซาน"; s1.age = 20; นักเรียน S2 = นักเรียนใหม่ (); s2.name = "li si"; s2.age = 10; System.out.println (S1); System.out.println (S2); }}/** ชื่อผลลัพธ์: จางซานอายุ: 10Name: li si, อายุ: 10*/ดังที่ได้กล่าวไว้ข้างต้นวัตถุทั้งสอง S1 และ S2 ถูกเก็บไว้ในที่อยู่ต่าง ๆ ในพื้นที่ฮีปในหน่วยความจำดังนั้นพวกเขาจะไม่รบกวนกันและกัน อย่างไรก็ตามคำหลักคงที่จะปรับเปลี่ยนอายุตัวแปรของสมาชิกทำให้ชั้นเรียนเป็นของแทนที่จะเป็นวัตถุที่เป็นของมันและวัตถุใด ๆ ในอินสแตนซ์ของคลาสนั้นสามารถแบ่งปันและใช้งานได้ ดังนั้นอายุเอาท์พุททั้งหมดจะได้รับมอบหมายขั้นสุดท้ายให้กับ 10 หากคุณลบแบบคงที่เห็นได้ชัดว่าวัตถุจะไม่ส่งผลกระทบต่อกันและกันและเอาต์พุตมีดังนี้:
ชื่อ: จางซาน, อายุ: 20name: li si, อายุ: 10
ดังที่ได้กล่าวมาแล้วข้อผิดพลาดเกิดขึ้นเมื่อ Out1 โทรออก 2 จากรหัสนี้จะเห็นได้ว่าวิธีการคงที่ไม่สามารถเรียกตัวแปรสมาชิกที่ไม่คงที่และวิธีการสมาชิก วิธีที่ไม่คงที่สามารถเรียกตัวแปรสมาชิกแบบคงที่และวิธีการสมาชิก โปรดทราบว่าคงที่ไม่ส่งผลกระทบต่อสิทธิ์การเข้าถึงของสมาชิก คำหลักที่อาจส่งผลกระทบต่อสิทธิ์ในการเข้าถึงใน Java นั้นเป็นส่วนตัวสาธารณะได้รับการคุ้มครองและเริ่มต้น
การทดสอบระดับสาธารณะขยายฐาน {คงที่ {System.out.println ("บล็อกคงที่คงที่ 1"); } การทดสอบสาธารณะ () {System.out.println ("Test Constructor"); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {การทดสอบใหม่ (); }} คลาสฐาน {คงที่ {system.out.println ("บล็อกคงที่คงที่ 2"); } ฐานสาธารณะ () {system.out.println ("ตัวสร้างฐาน"); -ดังที่ได้กล่าวไว้ข้างต้นโปรดจำไว้ว่าสองประโยคบล็อกรหัสคงที่จะโหลดด้วยการโหลดของคลาส วิธีตัวแปรที่แก้ไขโดยสแตติกจะถูกโหลดก่อนและเพียงครั้งเดียวเพียงครั้งเดียวกว่าวิธีตัวแปรอื่น ๆ เมื่อโหลดคลาสย่อยคลาสพาเรนต์จะถูกโหลดก่อน จากนี้เราสามารถวิเคราะห์: ในตอนต้นของการดำเนินการก่อนอื่นเราต้องหาวิธีหลักเนื่องจากวิธีการหลักคือทางเข้าสู่โปรแกรม แต่ก่อนที่จะดำเนินการวิธีหลักเราต้องโหลดคลาสทดสอบก่อน เมื่อโหลดคลาสทดสอบเราพบว่าคลาสทดสอบที่สืบทอดมาจากคลาสฐานดังนั้นเราจะหันไปโหลดคลาสฐานก่อน เมื่อโหลดคลาสฐานเราพบว่ามีบล็อกคงที่จากนั้นเรียกใช้บล็อกคงที่ หลังจากโหลดคลาสฐานแล้วคลาสทดสอบจะยังคงโหลดและจากนั้นพบว่ามีบล็อกคงที่ในคลาสทดสอบดังนั้นบล็อกคงที่จะถูกดำเนินการ หลังจากโหลดคลาสที่ต้องการวิธีหลักจะเริ่มดำเนินการ เมื่อดำเนินการทดสอบใหม่ () ในวิธีการหลักตัวสร้างของคลาสแม่จะถูกเรียกว่าก่อนจากนั้นตัวสร้างของตัวเอง ดังนั้นผลการดำเนินการมีดังนี้:
บล็อกสแตติกแบบคงที่ 2 สแตติกบล็อก 1Base Constructor Test Constructor
/* ไฟล์ A.Java*/แพ็คเกจ com.dogo.test; คลาสสาธารณะ A {public Static Void Outword (Object O) {System.out.println (O); }}/*ไฟล์ b.java*/นำเข้า com.dogo.test.a.*; คลาสสาธารณะ b {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {outword ("Hello World!"); } /** ผลลัพธ์*Hello World! -ดังที่ได้กล่าวมาแล้ว A.Java มีวิธีการคงที่อย่างง่าย ใน B.Java เราใช้คำหลักคงที่เพื่อนำเข้าคลาส A ดังนั้นจึงไม่จำเป็นต้องใช้ "ชื่อคลาสชื่อวิธี" เพื่อเรียกวิธีการเรียน คุณสามารถใช้ "ชื่อวิธี" โดยตรงเพื่อเรียกวิธีการคลาสเช่นเดียวกับวิธีการของคลาสเอง
/*outer.java*/public คลาส Outer {Static {system.out.println ("บล็อกคงที่ด้านนอก"); } Public Outer () {System.out.println ("Outer Constructor"); } คลาสคงที่ภายใน {static {system.out.println ("Inner Static Block"); } public inner () {system.out.println ("Inner Constructor"); }}}/*test.java*/การทดสอบคลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {new outer.inner (); -ดังที่ได้กล่าวไว้ข้างต้นอย่าลืมปรับเปลี่ยนคลาสด้านในด้วยสแตติกคลาสด้านนอกสามารถเรียกคลาสชั้นในได้โดยตรงเนื่องจากคลาสด้านในที่แก้ไขโดยสแตติกจะโหลดในขณะที่โหลดคลาสด้านนอกดังนั้นคุณสามารถเรียกคลาสภายในแบบคงที่โดยไม่ต้องสแตนดิสคลาสด้านนอก ในตัวอย่างก่อนที่จะป้อนวิธีการทดสอบหลักให้โหลดคลาสทดสอบแล้วเรียกใช้งานใหม่ outer.inner (); หมายเหตุที่นี่: เนื่องจากด้านในเป็นแบบคงที่จึงไม่จำเป็นต้องโหลดคลาสภายนอกและสร้างอินสแตนซ์คลาสภายนอกที่นี่ ภายในสามารถโหลดและอินสแตนซ์โดยตรง ผลการดำเนินการมีดังนี้:
Inner Block Inner Constructor
Da Qiao หมายเหตุ: แอปพลิเคชั่นที่สำคัญมากของการคงที่คือการใช้รูปแบบการออกแบบซิงเกิล ลักษณะของรูปแบบดอกเบี้ยเดียวคือคลาสสามารถมีเพียงหนึ่งอินสแตนซ์ เพื่อที่จะตระหนักถึงฟังก์ชั่นนี้ตัวสร้างคลาสจะต้องถูกซ่อนไว้นั่นคือตัวสร้างจะถูกประกาศว่าเป็นส่วนตัวและให้วิธีการสร้างวัตถุ เนื่องจากตัวสร้างถูกประกาศว่าเป็นส่วนตัวโลกภายนอกจึงไม่สามารถสร้างวัตถุประเภทนี้ได้โดยตรงและสามารถรับวัตถุคลาสผ่านวิธีการที่คลาสได้รับเท่านั้น ดังนั้นวิธีการสร้างวัตถุสามารถประกาศได้ว่าเป็นแบบคงที่เท่านั้น ตัวอย่างโปรแกรมมีดังนี้:
Class Singledemo {Private Static Singledemo Ins = Null; Private Singledemo () {} สาธารณะ singledemo getins () {ถ้า (ins == null) {ins = new Singledemo (); } return ins; -