----------------------ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
新手在入门java时,往往很难成功编译并运行一个java程序。即使程序代码没有问题,却仍出现许多莫名其妙的问题。其实大多数的问题都可以归结于path、classpath环境变量的设置上。
Path环境变量:作用是指定可执行文件的搜索路径。当运行一个可执行文件时,系统会先在当前目录搜索该文件,若找到则运行它;否则,根据Path所设置的路径,顺序逐条地到各目录中搜索该文件。
classpath: 作用是指定类的搜索路径。当要使用已编译好的类时,JVM根据classpath顺序逐条地到各目录中搜索该类。
下面通过实例来详解Path和classpath的概念及容易出现的误区。
(本文中JDK1.70,安装路径为D:\Program Files\Java\jdk1.7.0_13。搭配EditPlus工具,实现java程序的编译和运行)
例1:path的作用
在EditPlus中输入以下代码:
class Test
{
public static void main(String[] args)
{
System.out.println("Hello!");
}
}
保存为Test.java,并保存至D:\Test中。
在命令行中,执行命令
cd D:\Test
将当前路径转入D:\Test中。
执行命令
javac Test,java
出现了“'javac'不是内部或外部命令,也不是可运行的程序或批处理文件”的错误提示。因为此时系统在当期目录(D:\Test)及Path目录中无法找到javac.exe程序,自然无法执行javac Test.java命令。
解决方法:配置Path变量
1、右键“我的电脑”-“属性”-“高级系统设置”-“高级”-“环境变量”,进入环境变量设置页面。
2、在“系统变量”框中找到“Path”变量,并点击“编辑”按钮进行编辑。
3、将javac.exe、java.exe等程序所在的JDK路径(本文为D:\Program Files\Java\jdk1.7.0_13\bin)添加进"Path"中,以分号分隔。
重开一个命令行,重新执行
cd D:\Test
javac Test,java
无错误提示。再执行
java Test
显示“Hello!”。
注意:
1、地址之间用分号分隔;
2、可专门建一个“JAVA_HOME”变量,保存“D:\Program Files\Java\jdk1.7.0_13”。然后在"Path"中,添加“%JAVA_HOME%/bin;”,效果相同。
这样做可防止修改自己的地址时,误操作系统已有的地址。
至此成功编译并运行一个简单的java程序。其实,这涉及了两个重要问题:
1、系统是如何寻找“javac”、“java”等命令;
2、系统是如何寻找‘.java’及'.class'文件;
对于问题1,系统会现在当前目录寻找javac.exe、java.exe,若找不到则到"Path"变量设置的目录中寻找。因此需要将JDK的目录配置进“Path”中,这样即使在其他目录中,仍可以执行javac、java等命令。
对于问题2,此例无法表现。
例2:classpath的作用
同样是上述Test.java程序。
在命令行中,执行
cd C:
转入了C盘根目录,离开了存放源码的工作区。执行
javac Test.java
出现了“error: cannot read: Test.java”错误。说明系统可以执行javac命令,但找不到Test.java文件。
解决方法:指定路径,告诉它到d:\Test中找Test.java文件。
执行
javac “d:\Test\Test.java”
无错误提示。
继续执行
java “d:\Test\Test.class”
出现了“Exception in thread "main" java.lang.NoClassDefFoundError: D:/Test/Test.class”错误。这是因为.java文件可以通过直接指定路径找到,而.class文件只能通过配置classpath来找到。
解决方法:配置classpath
1、在环境变量中新建一个“classpath”变量,添加“d:\Test”。作用范围:所有java程序。
2、在命令行中,执行
set classpath=d:\Test 作用范围:本命令行窗口内。
按方法1或2设置后,再执行
java Test
显示“Hello!”。
3、在命令行中,直接执行
java -classpath “d:\Test” Test 作用范围:本条命令。
显示“Hello!”
注意:
1、set classpath时,多个地址之间用分号分隔;最后不要加分号,否则JVM会再去本地目录查找一次,而这不是我们希望的。
2、某些地址可以不加双引号,但一般来说,加双引号不易出错,也容易理解。
例3:java中使用了其他类的情况
在D:\Test中新建一个Person.java文件,代码如下:
public class Person
{
private String name;
public Person(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setName()
{
this.name=name;
}
}
然后,修改Test.java,代码如下:
class Test
{
public static void main(String[] args)
{
Person p=new Person("Jack");
System.out.println(p.getName());
}
}
在命令行中,执行
javac "d:\Test\Test.java"
出现
“d:/Test/Test.java:3: cannot find symbol symbol: class Person”错误。JDK提示找不到Person类。因此我们需要告诉JDK去哪里找到所用的类。
解决方法:
执行
set classpath=d:\Test
javac "d:\Test\Test.java"
无错误出现。执行
java Test
显示“Jack”。
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com