安装JDK7, C:\Program Files\Java\jdk1.7.0_80 为JDK的安装路径。
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_80
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
Path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;D:\instantclient_11_2;C:\stra
wberry\c\bin;C:\strawberry\perl\bin;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
然后javac测试,java -version 查看版本。OK啦!
但,突然我想切换到以前的JDK6版本。很简单,我就把JAVA_HOME变更为JDK6的安装地址 ,JAVA_HOME=C:\Program Files\Java\jdk1.6.0_43
然后在cmd中javac测试,java -version查看版本。发现:
C:\Users\Administrator>java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
咦怎么还是JDK7??!
后来发现,在C:\Windows\System32路径下,有三个java可执行程序:
发现因为JDK7是时间偏后安装的,所以在C:\Windows\System32路径下,三个java可执行程序的安装时间和JDK7一致。哦,我们发现原来JDK安装时,它们会复制三个java可执行程序到C:\Windows\System32系统文件下。
那为什么会优先读取到系统文件夹下的java.exe呢,明明我们配置了Path路径啊?
接下来我们看,这是我们的Path路径:
Path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;D:\instantclient_11_2;C:\stra
wberry\c\bin;C:\strawberry\perl\bin;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
我们去cmd看下具体路径信息:
C:\Users\Administrator>Path
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32
\WindowsPowerShell\v1.0\;D:\instantclient_11_2;C:\strawberry\c\bin;C:\strawberry
\perl\bin;C:\Program Files\Java\jdk1.6.0_43\bin;C:\Program Files\Java\jdk1.6.0_4
3\jre\bin;
哦,原来啊 %SystemRoot%\system32 == C:\Windows\System32 那不就是系统文件夹下java.exe的路径吗,Path第一时间就读取到它了!
那怎办呢?那就对症下药!你看:
Path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\Windows
PowerShell\v1.0\;D:\instantclient_11_2;C:\strawberry\c\bin;C:\strawberry\perl\bin;
我们把路径放在最前面不就OK啦!再去cmd中试下:
C:\Users\Administrator>java -version
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)
没问题了,搞定啦!