คำถามติดแท็ก static-initializer

8
ความแตกต่างระหว่างบล็อกรหัสเริ่มต้นคงที่และไม่คงที่คืออะไร
คำถามของฉันเกี่ยวกับการใช้คำหลักคงที่หนึ่งรายการ เป็นไปได้ที่จะใช้staticคีย์เวิร์ดเพื่อปกปิด code block ภายในคลาสที่ไม่ได้เป็นของฟังก์ชันใด ๆ ตัวอย่างเช่นการรวบรวมรหัสต่อไปนี้: public class Test { private static final int a; static { a = 5; doSomething(a); } private static int doSomething(int x) { return (x+5); } } หากคุณลบstaticคำหลักมันบ่นเพราะตัวแปรคือa finalอย่างไรก็ตามมันเป็นไปได้ที่จะลบทั้งสองfinalและstaticคำหลักและทำให้มันรวบรวม มันทำให้ฉันสับสนทั้งสองทาง ฉันควรจะมีส่วนรหัสที่ไม่ได้เป็นของวิธีการใด ๆ ? เป็นไปได้อย่างไรที่จะเรียกใช้มันได้? โดยทั่วไปแล้วจุดประสงค์ของการใช้งานนี้คืออะไร? หรือดีกว่าฉันจะหาเอกสารเกี่ยวกับเรื่องนี้ได้จากที่ไหน

6
เธรด Java Static initializers ปลอดภัยหรือไม่
ฉันใช้บล็อกรหัสคงที่เพื่อเริ่มต้นตัวควบคุมบางตัวในรีจิสทรีที่ฉันมี ดังนั้นคำถามของฉันคือฉันสามารถรับประกันได้หรือไม่ว่าบล็อกรหัสคงที่นี้จะถูกเรียกใช้เพียงครั้งเดียวเมื่อโหลดคลาสครั้งแรก ฉันเข้าใจว่าฉันไม่สามารถรับประกันได้ว่าจะเรียกบล็อกโค้ดนี้เมื่อใดฉันคาดเดาว่าเมื่อใดที่ Classloader โหลดครั้งแรก ฉันรู้ว่าฉันสามารถซิงโครไนซ์กับคลาสในบล็อกโค้ดแบบคงที่ได้ แต่ฉันเดาว่านี่คือสิ่งที่เกิดขึ้นจริงหรือ? ตัวอย่างโค้ดง่ายๆจะเป็น; class FooRegistry { static { //this code must only ever be called once addController(new FooControllerImpl()); } private static void addController(IFooController controller) { // ... } } หรือฉันควรทำเช่นนี้ class FooRegistry { static { synchronized(FooRegistry.class) { addController(new FooControllerImpl()); } } private static void addController(IFooController …

8
เหตุใด Java จึงไม่อนุญาตให้โยนข้อยกเว้นที่ตรวจสอบจากบล็อกการเริ่มต้นแบบคงที่
เหตุใด Java จึงไม่อนุญาตให้โยนข้อยกเว้นที่ตรวจสอบแล้วจากบล็อกการเริ่มต้นแบบคงที่ อะไรคือเหตุผลที่อยู่เบื้องหลังการตัดสินใจออกแบบนี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.