java编译通过,运行却提示找不到或无法加载主类
问题:
HelloWorld.java
1 package myP101; 2 3 public class HelloWorld { 4 public static void main(String[] args) { 5 System.out.println("HelloWorld!"); 6 System.out.println("请您计算一个数字的计算式:"); 7 System.out.println("计算式的结果是:" + 21 + 87 + 61 * 4 + 33); 8 System.out.println("计算式的结果是:" + (21 + 87 + 61 * 4 + 33)); 9 10 // 数据类型转换 11 int xx = 200, yy = 110, zz = 300; 12 Integer mm, nn = 91, tt; 13 float aa = 10, bb = 11.2f, cc = 21.98f; 14 double dd = 91, ee = 21.7, ff = 83E2; 15 String str = "The Result is:"; 16 String res = new String(); 17 18 mm = xx; 19 yy = nn; 20 tt = (int)bb; 21 ee = bb; 22 cc = (float)ff; 23 bb = yy; 24 res = mm.toString(); 25 String xls = String.valueOf(aa); 26 System.out.println(str + mm + yy +tt); 27 System.out.println(str + cc + bb); 28 System.out.println(res + xls); 29 } 30 31 }
Eclipse运行无误:
命令行执行报错:
EditPlus编译通过,运行报错:
解决方案:
文件路径:
解决办法:
- 在包下的类,在Java源文件的地方编译后,需要到最外层包的上一级目录下运行,而且类前面需要带包名,以.隔开。
EditPlus中的解决办法:
Editplus中配置java的(带包)编译(javac)和运行(java)的方法
- (CurSel).$(FileNameNoExt)(当前选中内容.不带后缀名文件名称)
要先选中包名再运行:
问题解决:
原因:
java编译器不检查类的目录结构,换句话说,即便你在源码的第一行声明了该类所在的包,在你对这个源码文件进行编译的时候,只要这个类不依赖于其他包,那么编译就不会报错。而java的解释器加载类,当需要解释运行类时,解释器会根据包结构寻找该类,所以运行该类的时候,必须在你声明的包的基目录下运行,才能够让java解释器正确的找到该类。