之前用Myeclipse編譯運行Java沒有問題
但是突然想用簡單點的NotePad++以及cmd直接編譯運行Java
這就讓我倒騰了一晚上
先說下問題的解決,再總結下查閱的一些知識。
1.進行win8下Java環境變量配置,在"系統變量"下進行如下配置:
(1)新建->變量名:JAVA_HOME變量值:C:\Program Files\Java\jdk1.8.0_05(這只是我的JDK安裝路徑)
(2)編輯->變量名:Path在變量值的后面加上:;%JAVA_HOME%\jre\bin;%JAVA_HOME%\bin;
(3)新建->變量名:CLASSPATH變量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar(注意最前面有個".")
2.測試下環境變量是否設置成功:按“WIN”鍵+R”鍵,分別輸入java,javac,java -version 命令
問題1:‘javac’不是內部命令或外部命令,也不是可運行的程序或批處理。
解決:ClASSPATH中,當前目錄“.”也必須加入到該變量中。"classpath",該變量的含義為java加載類(bin or lib)的路徑,要使用已經編寫好的類,前提當然是能夠找到它們了,JVM就是通過CLASSPTH來尋找類的,因此不能忘了"."。
注:如果將環境變量修改好了之后,仍出現上述問題,那么可能是cmd更新不一致的問題,在別處看到關閉Cmd窗口,重新打開就好了,但是我是再重啟一次電腦之后才好~~
問題2:解決了問題1之后,對與HelloWord.java 輸入javac HelloWorld之后出現 UnsupportedClassVersionError 錯誤:
HelloWorld Exception in thread "main" java.lang.UnsupportedClassVersionError:
HelloWorld : Unsupported major .minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
。。。。
這個很明顯是一個版本不支持的問題,經過搜索發現問題所在:
出現java.lang.UnsupportedClassVersionError 錯誤的原因,是因為我們使用高版本的JDK編譯的Java class文件試圖在較低版本的JVM上運行,所報的錯誤。
因為,高版本的JDK生成的class文件使用的格式,可能與低版本的JDK的.class文件格式不同。這樣,低版本的JVM無法解釋執行這個.class文件,會拋出java.lang.UnsupportedClassVersionError不支持的Class版本錯誤。
分別輸入java -version 和javac -version
果然,java版本是1.7而javac版本是1.8(o(╯□╰)o但是我的JDK明明是1.8的哇~~~~)
后面的搜索問題變成了,如何解決版本不一致問題:
在注冊表中修改:HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment 改為1.8
再次運行java -version
給跪了哇~~~至此終於搞定~~~~
有些原理的問題暫且還不懂
待以后開發~~~~!!!
總結幾個知識點吧~~
JDK、JRE有什么區別:
Jre 是java runtime environment的縮寫, 是java程序的運行環境。既然是運行,當然要包含jvm,也就是大家熟悉的虛擬機啦, 還有所有java類庫的class文件,都在lib目錄下打包成了jar。大家可以自己驗證。至於在windows上的虛擬機是哪個文件呢? Java\jdk\ jre\bin\client里面是不是有一個jvm.dll呢?那就是虛擬機。
Jdk 是java development kit,是java的開發工具包,里面包含了各種類庫和工具。當然也包括了另外一個Jre--------Java\jre. 那么為什么要包括另外一個Jre呢?而且jdk\jre\bin同時有client和server兩個文件夾下都包含一個jvm.dll。 說明是有兩個虛擬機的。
Java\jdk\bin這個bin下有各種java程序需要用到的命令,與Java\jdk\jre\bin或者Java\jre\bin的bin目錄最明顯的區別就是Java\jdk\bin下才有javac.exe,這一點很好理解,因為 jre只是一個運行環境而已。與開發無關,正因為如此,具備開發功能的jdk自己的jre下才會同時有client性質的jvm和server性質的 jvm, 而僅僅作為運行環境的jre下只需要client性質的jvm.dll就夠了。
我們用的java命令並不是 Java\jdk\bin目錄下的而是Java\jdk\jre\bin目錄下的。不信可以做一個實驗,大家可以把Java\jdk\bin目錄下的java.exe剪切到別的地方再運行 java程序,發現了什么?一切OK!
如果java為了提供給大多數人使用,他們是不需要jdk做開發的,只需要jre能讓java程序跑起來就可以了,那么每個客戶還需要手動去設置環境變量多麻煩啊?
所以安裝jre的時候安裝程序自動幫你把jre的java.exe添加到了系統變量中,因此去C:\Windows\system32下面去看看吧,發現有一個java.exe。