ทั้งหมดรหัส Java ทำงานในบริบทของการเป็นด้าย JavaDoc ที่เชื่อมโยงอธิบายถึงข้อผิดพลาดในการจัดการและเกณฑ์การออก แต่นี่คือส่วนสำคัญของมัน:
- JVM หมุนตัวเองขึ้นและเตรียมสภาพแวดล้อมการดำเนินการ
- JVM สร้างเธรดซึ่งจะรัน
main()
เมธอดโดยใช้พารามิเตอร์บรรทัดคำสั่งใด ๆ ที่เกี่ยวข้อง
- JVM ตั้งค่าตัวจัดการข้อยกเว้นที่ไม่ได้ตรวจสอบค่าดีฟอลต์ซึ่งพิมพ์ข้อยกเว้นเป็นข้อผิดพลาดมาตรฐานและยกเลิก
- JVM ดำเนินการเธรด
ในกรณีที่มีข้อยกเว้นที่ไม่ได้ตรวจสอบโปรแกรมจะตายอย่างมีประสิทธิภาพต่อรายการที่สามด้านบน พฤติกรรมนี้มีการระบุเพิ่มเติมในJava Language Specification, มาตรา 11.3
ข้อมูลเพิ่มเติม
คนอื่น ๆ ได้พูดถึงบล็อกแบบคงที่และวิธีการดำเนินการก่อนหน้าmain()
นี้ อย่างไรก็ตามสิ่งนี้ต้องการคำอธิบายเพิ่มเติมเล็กน้อยเพื่อทำความเข้าใจอย่างถูกต้อง
เมื่อโหลดคลาสตัวโหลดคลาสต้องเริ่มต้นstatic final
สถานะทั้งหมดและรันstatic
บล็อกทั้งหมดก่อนที่คลาสจะสามารถใช้เพื่อรวมอินสแตนซ์ของอินสแตนซ์ของคลาส (ด้านข้าง: สร้างคลาส Java ที่ค่าคงที่ของคลาสถูกเริ่มต้นในบล็อกแบบคงที่หลังจากสร้าง อินสแตนซ์ของคลาสและตัวสร้างอ้างอิงค่าคงที่ Boom!) อย่างไรก็ตามทั้งหมดนี้เกิดขึ้นในโลจิกคลาสโหลดเดอร์ก่อนที่โค้ดใด ๆ สามารถอ้างอิงคลาสได้ นอกจากนี้คลาสจะถูกโหลดในสิ่งที่เธรดอ้างถึงคลาส
สิ่งนี้หมายความว่าถ้าคลาสที่มีmain()
การอ้างอิงคลาสอื่น (เช่นค่าคงที่คลาส) จากนั้นคลาสนั้นจะต้องโหลดก่อนที่จะmain()
ดำเนินการเพื่อรวมบล็อกแบบคงที่ มิฉะนั้นบล็อกแบบคงที่จะดำเนินการดังกล่าวข้างต้น หากคลาสไม่สามารถโหลดได้คลาสจะมีอยู่main()
จะไม่สามารถโหลดได้และโปรแกรมจะยุติการทำงาน
FYI อื่น: บล็อกคงสามารถโยน Errors
ถูกโยนตามที่เป็นอยู่ Exceptions
เป็นสิ่งต้องห้าม (ข้อผิดพลาดในการรวบรวมเวลา) RuntimeExceptions
ถูกห่อในExceptionInInitializerError เหล่านี้ได้รับการจัดการต่อจัดการข้อยกเว้น uncaught ซึ่งโดยทั่วไปจะฆ่าด้ายหรือโปรแกรมประยุกต์ (หัวข้อหลัก) จนกว่าคุณจะระมัดระวังห่ออ้างอิงชั้น (และโหลด) ใน-try
catch