ทั้งหมดรหัส 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 ซึ่งโดยทั่วไปจะฆ่าด้ายหรือโปรแกรมประยุกต์ (หัวข้อหลัก) จนกว่าคุณจะระมัดระวังห่ออ้างอิงชั้น (และโหลด) ใน-trycatch