写了一个小程序,Javac命令能通过,但在执行Java时却出现错误:
该是在运行阶段出现的问题,是为路径不正确导致,在Java中路径不正确通常有如下几个情况:
一. 环境变量配置不当
可能是classpath路径配置错误,而导致.class文件无法加载。那么此时你可以检查是否配置好classpath路径,一般来说classpath路径配置如下:
.;%java_home%\lib;%java_home%\lib\tools.jar; (注意前面的 . 以及 ; 缺一不可)
其中.表示当前路径,;表示分隔符。
二. 包路径导致
当环境变量配置正确,该问题仍然存在,则应考虑该问题是否由包的引用引起的,如下为我出错的测试代码段:
package object;
// 成员变量 & 局部变量测试
public class VariableTest {
//成员变量
public static String staticname = "类属性";
public String nostaticname = "实例属性";
//未初始化成员变量
public static String staticname1;
public String nostaticname1;
//定义一个方法
public void info(){
//方法中定义的变量是局部变量
/*--- Test 1.1 ---*/
// 测试未初始化直接输出局部变量
//int i;
//System.out.println(i);
//测试结果:编译出错,上述语句块编译时出现如下提示:
//VariableTest.java:21: 错误: 可能尚未初始化变量i
// System.out.println(i);
// ^
/*--- Test 1.2 ---*/
// 测试初始化局部变量并输出
int i = 10;
System.out.println(i);
//测试结果:编译通过
/*---- 结论: 局部变量一定要初始化后才能使用 ----*/
}
//定义一个静态方法
public static void infos(){
int i = 20;
System.out.println(i);
}
public static void main(String[] args){
/* 第一问:类属性和实例属性的范围一样吗?*/
//在没创建实例之前,可以调用类属性,但不能调用实例属性
//System.out.println(VariableTest.staticname);
//结果:类属性,可编译通过,但没实例化,运行时出错
//实例化对象
VariableTest vt = new VariableTest();
System.out.println(vt.staticname);
}
}
在代码中,我使用了包,解决方法如下:
1.去掉 ”package object;“ 重新用javac 编译VariableTest.java,再运行java VariableTest就可以了。
2.将VariableTest.java放在object文件夹下,然后在object文件夹的平级下,打开DOS命令窗口,运行javac object/VariableTest.java编译程序,运行java object/VariableTest(或者java object.VariableTest也可以),则可以运行含有包名的java程序。
注意:包名不要含有'.'(点),' '(空格)等特殊符号,这样的话命令行无法判断包名与java程序名的分割点在哪里,
从而还是找不到或者无法加载主类。
原理说明:
java程序运行class文件,对于有包名的类,java把包名当成文件夹处理."包名+类名"相当于"文件夹目录+类名"来寻找类。