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解释器正确的找到该类。

在这里插入图片描述

 

posted @ 2021-07-19 13:15  BugMiaowu2021  阅读(760)  评论(0编辑  收藏  举报