รายการเวอร์ชันหลักของรูปแบบไฟล์คลาส Java?


174

ฉันเห็นรายการหมายเลขเวอร์ชันหลักสำหรับ Java ในโพสต์อื่น:

  • Java 1.2 ใช้รุ่นหลัก 46
  • Java 1.3 ใช้รุ่นหลัก 47
  • Java 1.4 ใช้รุ่นหลัก 48
  • Java 5 ใช้รุ่นหลัก 49
  • Java 6 ใช้รุ่นหลัก 50
  • Java 7 ใช้รุ่นหลัก 51
  • Java 8 ใช้รุ่นหลัก 52
  • Java 9 ใช้เวอร์ชันหลัก 53
  • Java 10 ใช้รุ่นหลัก 54
  • Java 11 ใช้รุ่นหลัก 55
  • Java 12 ใช้รุ่นหลัก 56
  • Java 13 ใช้รุ่นหลัก 57
  • Java 14 ใช้รุ่นหลัก 58

อ้างอิง:

https://blogs.oracle.com/darcy/entry/source_target_class_file_version https://en.wikipedia.org/wiki/Java_class_file#General_layout

คำตอบ:


46

สิ่งเหล่านี้มาจากเวอร์ชันของคลาส หากคุณพยายามโหลดบางสิ่งที่คอมไพล์สำหรับจาวา 6 ในรันไทม์จาวา 5 คุณจะได้รับข้อผิดพลาด, รุ่นคลาสที่เข้ากันไม่ได้, มี 50, คาดว่าจะ 49, หรืออะไรทำนองนั้น

ดูที่นี่ในไบต์ชดเชย 7 สำหรับข้อมูลเพิ่มเติม

ข้อมูลเพิ่มเติมยังสามารถพบได้ที่นี่


มีวิธีที่จะสะท้อนหมายเลขรุ่นหลัก (รุ่นคลาส) โดยตรงจากjavacโดยไม่ต้องใช้คลาสที่มีอยู่เช่นjavap -verbose MyClass?
samis

ไม่มีเลย
สตีเฟนซี


2

หากคุณมีปัญหาเกี่ยวกับ "ข้อผิดพลาดคอมไพเลอร์ของไฟล์คลาส" เป็นไปได้ที่จะแก้ไขปัญหานี้โดยการเปลี่ยน JRE ของโครงการเป็นผู้ติดต่อผ่าน Eclipse

  1. สร้างเส้นทาง
  2. กำหนดค่าเส้นทางการสร้าง
  3. เปลี่ยนไลบรารีเป็นผู้ติดต่อของตารางที่เพื่อนแสดงล่าสุด
  4. สร้าง "ไฟล์ jar" และรวบรวมและดำเนินการ

ฉันทำอย่างนั้นและมันก็ใช้ได้


0

หากคุณมีไฟล์คลาสที่build/com/foo/Hello.classคุณสามารถตรวจสอบได้ว่าเวอร์ชันจาวาใดที่คอมไพล์โดยใช้คำสั่ง:

javap -v build/com/foo/Hello.class | grep "major"

ตัวอย่างการใช้งาน:

$ javap -v build/classes/java/main/org/aguibert/liberty/Book.class | grep major
  major version: 57

ตามตารางใน OP เวอร์ชันหลัก 57 หมายถึงไฟล์คลาสที่คอมไพล์เป็นระดับ JDK 13 bytecode

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