第一步:设置三个java环境变量,java_home,path,class(注意这三个参数大小写不区分)。其中java_home是你的java的安装路径,如我的系统的安装路径是”C:/Program Files/Java/jdk1.6.0_03” 。即找到系统下jdk所在的路径。
设置三个环境变量的值:
Java_home= C:/Program Files/Java/jdk1.6.0_03
Path=%java_home%/bin;%Path% //其中 “%变量%” 表示应用该环境变量的当前值
//可以在命令行模式下用echo %变量% 输出查看一下结果
classpath=./;%java_home%/lib/tools.jar;%java_home%/lib/dt.jar
到目前位置,所有环境变量都已经设置好了,可以使用java和javac命令了,在命令行模式下输入java 和javac查看一下结果。如果javac命令不可用,那么请确认在path环境变量中包含了%java_home%/bin;
第二步:编写一个java类Hello.java。比如把他放到D:/下 。
public class Hello
{
public static void main(String[] args){
System.out.println("Hello world!");
}
}
在命令行输入“javac D:/Hello.java” 得到一个Hello.class文件;再输入“ java –cp D:/ Hello ”得到运行结果Hello world!。
第三步:可能会遇到的问题,“Exception in thread "main" java.lang.NoClassDefFoundError”。产生该问题的原因有三个:
1. classpath 设置的不对(稍后在详细说明)
2. java hello (大小写敏感,应该是java Hello)
3. java Hello.class (寻找package Hello下面的 class.class 文件,当然找不到,同时java类也不能命名为 class.java (因为是java关键字),但可以是 Class.java (因为java大小写敏感))
下面详细说第一个问题类路径的设置。实际上 java 虚拟机是由 java luncher 初始化的, 也就是 java (或 java.exe) 这个程序来执行的。
虚拟机按以下顺序搜索并装载所有需要的类:
1, 引导类: 组成 java 平台的类, 包含 rt.jar类等 ,在目录 %java_home%/jre/lib/ 下
2, 扩展类: 使用java扩展机制的类, 都是位于扩展目录(%java_home%/jre/lib/ext) 中的 .jar档案包.
3, 用户类: 开发者定义的类或者没有使用java 扩展机制的第三方产品. 你必须在命令行中使用 -classpath 选项或者使用 CLASSPATH 环境变量来确定这些类的位置.我们在上面所说的用户自己的类就是特指这些类。用户只需指定用户类的位置, 引导类和扩展类是"自动"寻找的。用户类设置:
--- "." 即当前目录, 这个是缺省值.
--- CLASSPATH 环境变量, 一旦设置, 将缺省值覆盖.
--- 命令行参数 -cp 或者 -classpath, 一旦指定, 将上两者覆盖.
因此我们要运行Hello.class文件有三种方式:
1. 进入文件所在的目录(当前目录)运行 java Hello 。 (一定行)
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:/Documents and Settings/linxinzheng>java Hello
Exception in thread "main" java.lang.NoClassDefFoundError: Hello
Caused by: java.lang.ClassNotFoundException: Hello
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
C:/Documents and Settings/linxinzheng>D:
D:/>java Hello
Hello world!
D:/>
(注:如果结果还是Caused by: java.lang.ClassNotFoundException,是因为你没在环境变量中设置当前目录“.”
注意前面classpath= ./; %java_home%/lib/tools.jar;%java_home%/lib/dt.jar
)
2. 在环境变量中设置classpath,添加路径 “D:/” ,或在命令行中设置非永久性环境变量 set classpath=%classpath%;D:/ , 运行 java Hello 。
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:/Documents and Settings/linxinzheng>java Hello
Exception in thread "main" java.lang.NoClassDefFoundError: Hello
Caused by: java.lang.ClassNotFoundException: Hello
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
C:/Documents and Settings/linxinzheng>set classpath=%classpath%;D:/
C:/Documents and Settings/linxinzheng>java Hello
Hello world!
C:/Documents and Settings/linxinzheng>
3. 用 –cp或-classpath 参数 java –cp D:/ Hello
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:/Documents and Settings/linxinzheng>java Hello
Exception in thread "main" java.lang.NoClassDefFoundError: Hello
Caused by: java.lang.ClassNotFoundException: Hello
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
C:/Documents and Settings/linxinzheng>java -cp D:/ Hello
Hello world!
C:/Documents and Settings/linxinzheng>
第四步:高阶设置(待续)