1. 程式人生 > >java.lang.UnsupportedClassVersionError: *** : Unsupported major.minor version 51.0

java.lang.UnsupportedClassVersionError: *** : Unsupported major.minor version 51.0

今天寫程式碼時碰見一個這樣的錯誤:

java.lang.UnsupportedClassVersionError: com/ui/Test : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
Exception in thread "main" 

它的意思是說,程式編譯的時候用了一個較高版本的JDK,但是在程式執行的時候卻用了一個較低版本的jdk。事實上,我也確實是這麼做的,我在eclipse裡面先用jdk1.7將程式跑了一遍,然後用jdk1.6跑程式就會出現上述的錯誤,原因就是在用jdk1.7跑了程式沒有問題,這時候在工程的bin目錄下面就產生了相應於jdk1.7的class檔案,下次再用jdk1.6跑這個工程,由於class檔案是有jdk1.7產生的,所以程式跑不通也不足為奇!   解決的方法就是在第一次跑這個工程的時候用用較低版本的jdk,然後再用較高版本的jdk跑或者是一直用較高版本的jdk跑。也就是JDK較高版本相容較低版本、但是較低版本卻是無法完成較高版本的功能。這也是符合邏輯的。