cmd无法识别javac命令_java命令报错怎么办?

在学习java和算法过程中,有时需要使用java的编译和执行命令。但是有时总是会出现这种场景:javac命令编译成功了,但使用java命令执行二进制class文件时,报找不到或者无法加载主类的错误,如下图。谷歌百度了一把,发现网上说的那些都是扯淡的,没有一个说到点子上了。经过思考实践看书,总算知道原因了

83405ddad6ef3e713fb139013a959d29.png

5cc3d5697da25f1b06c00bcef61a166e.png

首先,我们先看下javac和java命令的区别,具体可以参考《java核心技术卷二》的4.7.3章节(将类放入包中)和4.8章节(类路径)。

1. javac命令,编译源文件.java,产生二进制.class文件。这个命令是有javac编译器实现的,执行时会去查找类。我们都会在环境变量中设置classpath,这个类路径就是javac命令查找文件的顺序。例如classpath设置为:.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar;, 那么javac命令时,首先查找当前目录,如果没有类文件,则查找第二个路径,以此类推知道找到,否则报编译错误。javac命令查找类路径是以文件分隔符””查找的。

2. java命令,执行二进制class文件。该命令是java解释器命令,执行java命令也是同样会去查找类路径。就拿这个例子来说,执行java Test命令的查找类的步骤为,首先查找当前目录下的包路径,查看是否有该类,如果没有查找%JAVA_HOME%lib包路径下有无该类,其次查找%JAVA_HOME%libtools.jar包路径下有无该类。java命令加载类路径(包路径)是通过“.”或者“”来作为分隔符的,

通过上面两个命令的区别,很容易看出来,上面截图中执行的java Test,会去该路径下执行Test.class:D:workspacepractice_JEEtest4srccomclqcollectionjavacorecomclqcollectionjavacorejavacore,显然该路径是不存在的,所以会报错。

同理,下面几个路径下执行命令的结果就很容易理解了。

b4313882a441e1bceaf0deffbab82651.png

2. 不同路径下的java命令执行结果

6ebbec1e9bc2691b26e4a2fa6d5cf028.png

由此问题可以引申,查阅java编译器、解释器相关内容,后续再学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值