使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析

有时候我们需要直接用jdk提供的java命令来执行class文件让软件运行起来,特别是很多初学者,但经常会发现如下提示:

用eclipse或用ant则没有问题。

其实原因很简单,我们忽略了2个细节。

1.java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。

2.我们忽略了package的影响。

第一个问题好解决:

我们直接在CLASSPATH环境变量中加入“.;”即可。“.”的意思是搜索当前目录

第二个问题看下面分析:

看下面两个类

类A 类B

类A和类B的唯一差别就是没有定义包名。

我们的工程路径是D:HelloWorld,在HelloWorld文件夹中建立一个src文件夹,类B的源代码文件就放在src中。用javac编译完以后

会在src文件夹中生成NewsManager.class,如下

执行如下:

现在我们再把源代码换成类A

为什么加入了package后就不对了呢?

类A中package的路径是org.will.app.main。按照java规定,我们应该按照package定义的路径来存放源文件,类A应该放入:

srcorgwillappmain下,如下:

然后我们编译执行:

依然有问题,为什么,其实大家再回去看看java的书籍就会发现,一个类的全名应该是包名+类名。类A的全名:org.will.app.main.NewsManager

好的,再试试:

还是不对。为什么?

仔细看上面的图,我们在main目录下让java命令去执行org.will.app.main.NewsManager,其实它会以为类的路径是:

D:HelloWorldsrcorgwillappmainorgwillappmainNewsManager,大家看到了吧,路径重复了。

所以,我们应该这样执行:

成功!

总结:

一、java执行class文件是根据CLASSPATH指定的地方来找,不是我们理解当前目录。如果希望它查询当前目录,需要在CLASSPATH中加入“.;”,代表当前目录。

二、java执行class文件对package的路径是强依赖的。它在执行的时候会严格以当前用户路径为基础,按照package指定的包路径转化为文件路径去搜索class文件。各位同学以后注意就OK啦。至于网上说的要在CLASSPATH要加各种包等等都是泛泛而谈,真正静下心分析这个问题的资料不多。很多都没有说到点子上,会误导人的。

使用java命令运行class相关推荐

  1. java 运行scala_使用java命令运行scala代码

    Scala是运行在JVM上的语言,跑在标准的Java平台上,可以与所有的Java库实现无缝交互. 下面运行一个小程序来看看在JVM上如何使用java命令来运行Scala程序. 在编写代码之前,我们首先 ...

  2. 使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析

    有时候我们需要直接用jdk提供的java命令来执行class文件让软件运行起来,特别是很多初学者,但经常会发现如下提示: 用eclipse或用ant则没有问题. 其实原因很简单,我们忽略了2个细节. ...

  3. java命令运行jar包出现返回值的乱码问题,设置启动编码方式

    启动jar 包带上 -Dfile.encoding=utf-8  设置utf-8编码 此处需要添加一个代码 chcp 65001 java -Dfile.encoding=utf-8 -jar xxx ...

  4. JAVA命令运行cmd命令得到的结果乱码Runtime.getRuntime().exec();

    Process process = Runtime.getRuntime().exec("cmd /c dir c:"); BufferedReader bufferedReade ...

  5. java命令运行class文件提示错误:找不到或无法加载主类

    原址: https://www.huaweicloud.com/articles/8357620.html

  6. java命令行编译命令_Java使用命令行编译运行程序

    一.摘要 使用javac命令来编译java文件生成.class文件 使用java命令+类名来运行编译好的class文件 二.编译不含包名的程序 假设HelloJava.java代码文件如下 Java ...

  7. sqlite命令行查看数据显示列头、java访问sqlite、java命令指定classpath

    sqlite3附加数据库:attach database; 看一下表的数据: 查看表架构:.schema tablename:以前这命令都没问题,能显示表结构,但这次显示不出,也没提示出错: 使用 s ...

  8. java导入包写在第二行的吗_使用Java命令行方式导入第三方jar包来运行Java程序的命令...

    1.首先使用命令行进入到a.java所在的文件夹:(比如我的在D:\javaeeworkspace\SharedPS_WS\src\com\dyf\main 这样一个路径下,) d: 回车, cd D ...

  9. (005) java后台开发之Mac终端命令运行java

    Mac终端命令运行java 由于mac已经装好java环境,所以直接课运行java命令,很方便. 1.编译一个java文件: javac /Users/用户名/Desktop/HelloWorld.j ...

最新文章

  1. 职业梦想是计算机的英语作文,我的梦想职业英语作文
  2. Citrix XenDesktop 7.X 视频播放优化
  3. 深度学习核心技术精讲100篇(三十九)-医疗健康领域的短文本理解
  4. 子进程 post-installation script 返回了错误号 解决方法
  5. redis(10)--RDB持久化
  6. mysql 7天自动拒单功能,mysql查询最近7天的数据,没有数据自动补0
  7. Hutool 工具类
  8. 怎么访问二级服务器未响应,windows+访问服务器未响应
  9. 2018蓝桥杯B组:第几个幸运数字(JAVA/C++)
  10. PyTorch学习—3.pytorch实现线性回归
  11. Linux中如何判断一个另外进程是否活着
  12. oracle安装教程以及使用注意事项
  13. 大一Java课设,五子棋小游戏
  14. hdu题目分类--第二版
  15. 区块链开发教程系列【加精】
  16. 全国各省电信、联通、网通、铁通DNS列表
  17. java isprime函数_Java8函数式编程入门
  18. Matlab 绘制 - 点和向量:向量加减的方法和源码
  19. 在软件测试面试过程中如何进行自我介绍?
  20. 同翔网浅析RoCE网络技术

热门文章

  1. java-php-net-python-校园跑腿网站计算机毕业设计程序
  2. Mysql 多行显示在一行详解 group_concat()
  3. 离散数学图论相关考点
  4. c语言中运算符的读音是什么,操作符、运算符,operator,音标,读音,翻译,英文例句,英语词典...
  5. java基础知识【第22期】-- DAO模式和分层
  6. STIPC_编程挑战系列赛第一场(小郭的故事)_A.小郭最爱签到题
  7. vue通过传递参数动态展示图片
  8. 手动安装k8s,但kubelet.service 启动失败
  9. [书目20091005]易经回答人生的64个感悟
  10. 互联网思维(二)——流量时代,私域为王