Java错误:找不到或无法加载主类

Java错误:找不到或无法加载主类目录前言 javacxxx java 编译需要相对物理路径 javaxxx 编译需要虚拟路径总结前言一般情况下 我们都使用工具进行代码的编辑和调试 例如 eclipse Manven AndroidStudi sublime vim notepad 记事本等 当我们用 eclipseandro 等创建的 project 和 java 类文件 都是有包名的 用工具正常编译和运行 但此时切换到命令行执行的时候 javacxxx javajavaxxx 的时候极有可能出现找不到或

前言

当我们在初学Java的是时候,类文件中是不设定包名(package)的,这种情况下注意classpath,基本上没有问题。但当我们用工具(eclipse,android studio)进行编写代码的时候,代码文件的位置是按包名分开的目录下,注意这里是相对物理目录(com/eagle/app),且代码中声明了包名(package),这里可以认为是虚拟目录(com.eagle.app)。 本文主要说明classpath和系统环境变量PATH都没问题的情况下出错原因和正确处理方法。
代码文件很简单如下:

package com.eagle.app; public class MainJava { 
    public static void main(String[] args) { 
    if (args != null) { 
    for (String arg : args) { 
    System.out.println("arg = " + arg); } System.out.println("arg = " + args); } else { 
    System.out.println("args = " + null); } } 

javac xxx.java 编译需要相对物理路径

在这里插入图片描述

要编译MainJava,使用:

//cd 到app目录 javac MainJava.java 

//cd 到eagle 目录 javac app/MainJava.java 

甚至

//cd 到main目录 javac java/com/eagle/app/MainJava.java 

都是可以的。当然还可以是任意位置+相对目录。

回头来解释:相对于当前执行的目录(如app 目录、eagle目录,main目录),物理路径是有效的计算机路径(xxx/xxx/xxx),所以起名相对物理路径。

java xxx 执行需要虚拟路径

这里就有点意思了,强调一下,包名虚拟路径:xxx.xxx.xxx,不是以“/”分隔的目录,因此叫虚拟路径。
在这里插入图片描述
上图中,2是java代码,1是工具编译生成的字节码文件,现在要执行MainJava.class,正确的命令:
//cd 到1中的main目录,不可再到com或更底下的目录






 F:\GSProject>cd javatest\build\classes\java\main F:\GSProject\javatest\build\classes\java\main>java com.eagle.app.MainJava 
F:\GSProject\javatest>java com.eagle.app.MainJava arg = [Ljava.lang.String;@75b84c92 

结果正常输出main函数的参数地址。由此可见,我们可以随意运行我们的字节码了,把它放到linux上或mac上,就可以愉快的做我们希望做的事情了。

总结

无论什么工具,只要我们掌握了java代码文件的路径和字节码的路径,那么可以欢快的玩耍。

  1. javac
    javac java代码的相对路径(以\分隔,且要带.java)

  2. java
    java 包名的虚拟路径(以.分隔,不带.class)

如果老铁有什么补充或没能解决的,评论区讨论或发信,相互学习。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217474.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:29
下一篇 2026年3月18日 上午9:29


相关推荐

  • getparameter()_eclipse如何自动生成get和set方法

    getparameter()_eclipse如何自动生成get和set方法以下是一个简单的jsp注册页面,从前端提交的数据<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.g…

    2025年9月16日
    9
  • webstorm 2022 激活码(注册激活)[通俗易懂]

    (webstorm 2022 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1PA3AFINM4-eyJsaWNlbnNlSW…

    2022年3月31日
    1.6K
  • 论坛发帖技巧_百度贴吧回复显示帖子审核中

    论坛发帖技巧_百度贴吧回复显示帖子审核中8)今天看到个帖子,想贴个回复,点个引用出来了小测验.开始的时候还没细看以为是调查,结果:cry:看表情应该知道,原来是有答案的,大部分答错,也没了逛论坛的心情.我很想知道,以最俗的免费公厕,要是说大家没用过,那我肯定不相信,一般的公厕都在入门的地方挂个牌牌,使用细则什么的,试问:有人上公厕之前认真细读过么?而…

    2026年4月13日
    6
  • OpenClaw扫描器:开源工具可检测自主AI Agent活动

    OpenClaw扫描器:开源工具可检测自主AI Agent活动

    2026年3月13日
    2
  • SQLyog安装_快影下载安装

    SQLyog安装_快影下载安装1、下载安装包SQLyog下载链接2、安装2.1、选择语言,默认即可2.2、下一步即可2.2、接受协议并下一步2.3、选择选项2.4、选定安装目录2.5、安装完成3、连接Mysql服务看到这个界面就连接成功了。…

    2025年11月30日
    8
  • 动态创建数组[通俗易懂]

    动态创建数组[通俗易懂]使用运算符new也可以创建数组类型的对象,这时需要给出数组的结构说明。用new运算符动态创建一维数组的语法形式为:new类型名【数组长度】;其中数组长度指出了数组元素的个数,它可以是任何能够得到正整数值的表达式。细节:用new动态创建一维数组时,在方括号后仍然可以加小括号“()”,但小括号内不能带任何参数。是否加“()”的区别在于,不加“()”,则对数组每个元素的初始化,与执行

    2022年5月2日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号