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

2023-05-16

目录

  • 前言
  • javac xxx.java 编译需要相对物理路径
  • java xxx 执行需要虚拟路径
  • 总结

前言

一般情况下,我们都使用工具进行代码的编辑和调试,例如eclipse 、Manven、Android Studio、sublime、vim、notepad、记事本等。
当我们用eclipse android studio等创建的project和java类文件,都是有包名的,用工具正常编译和运行,但此时切换到命令行执行的时候:
javac xxx.java
java xxx
的时候 极有可能出现找不到或无法加载主类

当我们在初学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 编译需要相对物理路径

在这里插入图片描述

如上图,以Android studio 为例说明
1、工程目录下有src目录,但这里包含整个app的文件,不是代码的"src"目录;eclipse的话,src目录就是代码目录。
2、这才是代码的"src"目录,且目录下有我们和我们包名一一对应的"目录" com/eagle/app

要编译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

注意:不要带.class (java com.eagle.app.MainJava.class是不对的),也不要试图更改到其他目录用相对目录执行,因为java命令就认后面的参数为包名。
如下均是错误的

F:\GSProject\javatest\build\classes\java\main>java com.eagle.app.MainJava.class
错误: 找不到或无法加载主类 com.eagle.app.MainJava.class

F:\GSProject\javatest\build\classes\java>java main\com.eagle.app.MainJava
错误: 找不到或无法加载主类 main\com.eagle.app.MainJava

好,现在我们将上图中的1所圈的目录移位到javatest目录,我们在javatest目录中执行java com.eagle.app.MainJava
在这里插入图片描述
在这里插入图片描述

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

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

1中的目录构成就是package com.eagle.app;一定弄清楚javac 文件路径是**/xxx/xxx/xxx/Name.java**,
java 文件路径是xxx.xx.x.Name,不要带class。

总结

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

  1. javac
    javac java代码的相对路径(以\分隔,且要带.java)
  2. java
    java 包名的虚拟路径(以.分隔,不带.class)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java错误:找不到或无法加载主类 的相关文章

随机推荐

  • 张筱雨的个人简历

    生平介绍 xff1a 2000年张筱雨9月 2003年7月吉林市实验中学2003年9月 人体艺术2007年7月华北大学 ent大胆er 张筱雨 凡本网注明 来源 xff1a 华龙网 的作品 xff0c 系由本网自行采人体艺术编 xff0c
  • CentOS 基础命令 III

    软件包管理 为了满足应用的需求 xff0c 我们通常会在系统上安装各种相应的软件 xff0c 并在维护中会对软件进行升级和删除 xff0c 甚至是退回到旧的版本 CentOS 中主要有三种类型的软件管理方式 xff0c 分别为源代码编译 R
  • 机会都是留给有准备的人,你在准备什么?| 每天成就更大成功

    最近养成一个习惯 xff0c 就是每晚抄书 xff0c 大概200字左右 xff0c 在抄书的过程中反思了一个问题 xff1a 因为字写的不漂亮 xff0c 于是就在抄书的时候就有意的去练字 xff0c 这样抄书的精力就被分散了一部分出去
  • Android Studio修改应用名称及应用图标

    一 修改应用名称 找到src main AndroidManifest xml文件 xff1a android label后面配置的就是应用名称配置路径或应用名称 方式1 xff1a android label 61 34 xxx应用 34
  • yum配置代理proxy

    yum代理proxy xff1a Linux CentOS设置全局代理 xff08 http xff09 说明 xff1a 为什么说是http代理 xff0c 其实这个还不能说是全称走代理 xff0c 罪名写的区别就是ICMP协议这个设置就
  • 002 如何将date命令显示的中文时间改为显示英文时间?

    本来执行date命令显示中文时间 date 2017年 11月 25日 星期六 15 39 49 CST lancer 64 ubuntu locale LANG 61 en US UTF 8 LANGUAGE 61 LC CTYPE 61
  • github pages 用法详解

    github pages 基础用法 1 URL 规则 假设你的 github 帐号为 mygithub xff0c 需要发布的仓库名为 myrepo xff0c 那么 pages 的 URL 为 xff1a https mygithub g
  • 文章标题

    刷leetcode的时候总是喜欢把别人家的C 43 43 和JAVA翻译成Python表达 xff0c 然后看自己代码能够短多少 所谓Pythonic啊 xff0c 真是个好东西 xff0c 但是未必能够让算法时间复杂度减低 xff0c 就
  • ld: error: undefined symbol: did you mean: extern “C“

    碰到个问题 xff0c 先看报错 xff1a FAILURE Build completed with 2 failures 1 Task failed with an exception What went wrong Execution
  • git 出现fatal: not a git repository (or any of the parent directories): .git 问题解决

    今天在一个新的磁盘上 xff0c 新建了一个目录 xff0c 打算把gitlab上的一个项目临时本地改一下 xff0c 结果本地执行git clone项目 xff0c 可以成功 xff0c 能把项目从gitlab上把代码同步下来 xff0c
  • Ring Buffer (circular Buffer)环形缓冲区简介

    关于环形缓冲区的知识 xff0c 请看这里 http en wikipedia org wiki Circular buffer 上面这个网址已经介绍得非常详细了 下面这个网址有 RingBuffer的C代码实现 xff0c 其实是一个C的
  • iOS——MRC和ARC实现原理

    Objective C提供了两种内存管理机制MRC xff08 Mannul Reference Counting xff09 和ARC xff08 Automatic Reference Counting xff09 xff0c 为Obj
  • [Python实战项目] - xpath 爬虫实战,获取纵横小说网连载小说最新章节(一)

    本教程可以一键获取连载小说最新章节 xff0c 只需要运行一下代码 xff0c 直接打开浏览器看小说未看的最新章节 开发环境 Python版本 xff1a python3 6Python第三方库 xff1a requests lxml we
  • 计算机组成原理选择题题库

    目录 第一套 第二套 第三套 第四套 第五套 第六套 第七套 第八套 第九套 第十套 第一套 一 选择题 xff08 每小题1分 xff0c 共15分 xff09 1 从器件角度看 xff0c 计算机经历了五代变化 但从系统结构看 xff0
  • 【面试必备】面向Android开发者的复习指南!最全的BAT大厂面试题整理

    近日一好友去阿里面试 xff0c 面试失败了 xff0c 分享了一个他最不擅长的算法面试题 题目是这样的 题目 xff1a 给定一个二叉搜索树 BST xff0c 找到树中第 K 小的节点 出题人 xff1a 阿里巴巴出题专家 xff1a
  • 文件选择器DocumentUI显示apk文件图标

    1 定位代码与调试 Hierarchy Viewer分析界面工具 xff0c uiautomatorviewer自动化查看器 xff0c 定位组件 添加调试信息 xff0c 调试定位代码 2 搜索获取apk文件图标 lt uses perm
  • Android adb 启动APP

    目录 启动命令一 常规命令 43 包名 activity二 常规命令 43 包名命令关闭App 获取包名和activity的路径代码获取1 命令获取 需要app运行在前台 xff0c 停留在启动界面 2命令获取 先执行命令 xff0c 再点
  • Android日志[基础篇]Android Log日志输出

    Android日志 基础篇 二 Android Studio修改LogCat日志的颜色 android util Log输出日志的常用方法如下 xff1a Log v String tag String msg Log d String t
  • Android WebView https白屏、Http和Https混合问题、证书配置和使用

    目录 前言启用https后白屏 xff08 证书错误 xff09 修改处理WebView中Http和Https混合问题处理办法Webview的几种内容加载模式 证书配置或处理https请求的证书okhttp进行请求 xff1a HttpsU
  • Java错误:找不到或无法加载主类

    目录 前言javac xxx java 编译需要相对物理路径java xxx 执行需要虚拟路径总结 前言 一般情况下 xff0c 我们都使用工具进行代码的编辑和调试 xff0c 例如eclipse Manven Android Studio