(转)找不到或无法加载主类(Could not find or load main class )

2023-10-31

原文:https://blog.csdn.net/shymi1991/article/details/50540214/ 

当我们试图在命令行编译运行一个简单的java程序HelloWorld.java,编译命令javac HelloWorld.java顺利通过,但是执行运行java HelloWorld却报出:“错误:找不到或无法加载主类 xxx(Error: Could not find or load main class )”,注:Java 1.7以下是这样的Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld.


       为了解决这个问题,就必须知道java是寻找和加载类的原理。首先有个环境变量叫做CLASSPATH,它包含所有Java类文件的目录。如果它找不到我们所运行程序的main方法就会抛出上面的错误。在Eclipse里面编译运行程序很简单,因为它把Classpath设置好了,但是在命令行,你就得自己处理了。CLASSPATH和PATH不同,PATH用于定位系统可执行文件或命令,在Windows系统是扩展名为 .exe, .dll的文件,在Linux系统是 .so文件。Path也用来定位java程序的本地库。CLASSPATH是用来定位类文件或JAR文件,java类加载器通过CLASSPATH来查找和加载类。

       下面用一个例子来演示如何在命令行执行java程序。

项目目录E:\Users\workspace,项目名hellojava,包名com.sommer.learn,类名HelloJava

package com.sommer.learn;
 
public class HelloJava {
    public static void main(String[] args) {
        System.out.println("Hello Java!");
    }
}

如果用Eclipse编译,它的.class文件在E:\Users\workspace\hellojava\bin\com\sommer\learn里面。命令行进入该路径,输入java HelloJava


提示出错,因为这个类的全名是com.sommer.learn.HelloJava,而不是HelloJava。重新输入命令 java com.sommer.learn.HelloJava

为什么还是出错呢?因为我们没有CLASSPATH环境变量,也没有用java命令的-classpath或-cp选项,所以Java默认在当前目录下寻找主类 com/sommer/learn/HelloJava.class,但是我们已经在com/sommer/learn目录里面了,所以找不到类。将目录切换到包的父路径,再来运行一遍

这回终于可以了!

如果想从任意路径来运行程序该怎么办呢?如上文提到的,使用java命令的-classpath或-cp选项,或设置CLASSPATH。先来看第一种

第二种设置CLASSPATH

windows+pause快捷键打开系统属性——高级系统设置——环境变量,在系统变量里新建CLASSPATH(不区分大小写),一般设变量值为 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar,注意最前面有个点号,表示当前路径。

可以在命令行输入echo %CLASSPATH%来查看变量值。如果将本项目E:\Users\workspace\hellojava\bin加在classpath变量值里(用分号跟其他的隔开),则可以在任意路径执行命令 java com.sommer.learn.HelloJava。

但是一般不建议这样设,如果把每个项目的类路径都添加到系统CLASSPATH会造成混乱,建议用java命令的 -classpath选项来指定。

如果在eclipse里运行一个java类时报出“错误:找不到或无法加载主类 xxx”这样的错,一般是项目没有编译,检查菜单栏的Project——Build Automaticlly有没有被勾上。

 

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

(转)找不到或无法加载主类(Could not find or load main class ) 的相关文章

  • JAVA学习笔记(1)与日期相关的类相关知识记录

    介绍Java涉及日期的类 Date类 获取日期对象 Calendar类 获取日期的特定部分 时分秒 Date类 构造函数 一共有两个构造函数Date 使用当前日期和时间初始化对象 Date long millisec 接受一个参数 该参数是
  • 面试题:String 和 StringBuilder、StringBuffer 的区别?

    Java 平台提供两种类型的字符串 String 和 StringBuffer StringBuilder 它们可以存储和操作字符串 其中String是只读字符串 也就意味着String 引用的字符串内容是不能被改变的 而StringBuf
  • 集合框架 — ConcurrentHashMap

    集合框架 ConcurrentHashMap 一 ConcurrentHashMap JDK1 7 1 实现结构 2 保证并发安全 分段锁技术 3 put 和 get 方法 二 ConcurrentHashMap JDK1 8 1 实现结构
  • Java中map的分类和常见的情况

    Java为数据结构中定义了一个接口Java util Map 它有四个实现类 分别是HashMap Hash table LinkedHashMap 和 TreeMap Map主要用于存储键值对 根据键得到值 因此不允许键重复 重复了覆盖了
  • 浅谈sleep、wait、yield、join区别

    sleep sleep 方法是属于 Thread 类中的 sleep 过程中线程不会释放锁 只会阻塞线程 让出cpu给其他线程 但是他的监控状态依然保持着 当指定的时间到了又会自动恢复运行状态 可中断 sleep 给其他线程运行机会时不考虑
  • 从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。(题目类型:没有明确循环次数)

    import java util Scanner 从键盘读入个数不确定的整数 并判断读入的正数和负数的个数 输入 为0时结束程序 public class ForWhileTest public static void main Strin
  • 什么是“堆”,"栈","堆栈","队列",它们的区别?

    一 堆 什么是堆 又该怎么理解呢 堆通常是一个可以被看做一棵树的数组对象 堆总是满足下列性质 堆中某个节点的值总是不大于或不小于其父节点的值 堆总是一棵完全二叉树 将根节点最大的堆叫做最大堆或大根堆 根节点最小的堆叫做最小堆或小根堆 常见的
  • JAVA异常处理(三种异常处理机制)

    目录 前言 一 异常体系 二 异常示例 1 运行时异常 2 编译时异常 三 异常处理 1 默认异常处理 2 异常处理1 throws 3 异常处理2 try catch 4 异常处理3 前面两者的结合 5 运行时异常的处理 四 自定义异常
  • BigDecimal中divide方法注意问题

    BigDecimal中divide方法抛异常 Non terminating decimal expansion no exact representable decimal result 在使用 BigDecimal rate new B
  • 计算阶乘的两种实现方式(Java)

    本文以计算5的阶乘为例 5 5 4 3 2 1 120 一 循环阶乘 1 While循环 public class TestWhileFactorial public static void main String args int res
  • JAVA中常用的Queue的介绍

    目录 1 java中队列的分类以及队列的介绍 2 PriorityQueue队列的介绍 2 1 PriorityQueue继承结构和方法解读 2 2 PriorityQueue的构造器的实现 3 Deque 双向队列 的简单介绍 3 1 A
  • &和&&的区别(单与和双与的区别)

    和 都可以用作逻辑与的运算符 为短路与 不是短路与 可以作为整数的位运算符 举两个例子 1 对于if str null str equals 这个表达式 当str null 时 后面的表达式就不会执行 也不会出现NullPointerExc
  • JAVA-程序的编译过程及运行过程

    目录 前言 一 Java程序的执行过程 1 编译期 2 运行期 二 小例子 1 进入cmd窗口 2 编译期 3 运行期 总结 前言 在之前我们做了第一个案例 Hello World 案例 也对其进行了详细的解析 HelloWorld案例 详
  • 向上转型和向下转型

    一 概念 向上转型是指将子类的实例赋值给父类类型的变量 向下转型是指将父类的实例赋值给子类类型的变量 二 向上转型 1 向上转型后父类的引用所指向的属性是父类的属性 2 如果子类重写了父类的方法 那么父类引用指向的或者调用的方法是子类的方法
  • 关于java中IO的个人理解

    一 什么是java的I O I O中的i为input即输入的意思 O为output输出的意思 所以io为java中数据的输入和输出 这里的数据即包括网络上的数据 socket 也包括本地的文件数据 IO使用流的概念来进行数据的输入和输出也就
  • 二进制、八进制、十进制、十六进制之间的相互转换

    一 二进制 八进制 十六进制转换为十进制 方法 位权求和法 二进制用符号 B 表示 十进制用符号 D 表示 八进制用符号 O 表示 十六进制用符号 H 表示 100101 10111 B 1 2 5 0 2 4 0 2 3 1 2 2 0
  • ⛳ 面试题-单例模式会存在线程安全问题吗?

    目录 面试题 单例模式会存在线程安全问题吗 一 单例模式 简介 二 饿汉式 三 懒汉式 3 1 懒汉式 在调用 getInstance 的时候才创建对象 线程不安全 3 2 改造1 对懒汉式进行加锁改造 线程安全 3 3 改造2 对懒汉式继
  • Java--集合知识再补充(Map集合)

    下面就是我整理的部分学习笔记 学无止境 加油 为方便对多个对象的操作 就对对象进行存储 集合就是存储对对象最常用的一种方式 数组长度是固定的 且可以存储基本数据类型 集合可变 集合只能存储对象 Collection 下有两个子接口 为Lis
  • JVM的构成 (类加载子系统、执行引擎、运行时数据区)

    目录 JVM由三部分组成 1 类加载子系统 可以根据指定的全限定名来载入类或接口 Java类加载机制 trigger333的博客 CSDN博客 java类加载的机制 2 执行引擎 负责执行那些包含在被载入类的方法中的指令 3 运行时数据区
  • Java中类和对象的区别

    一 类和对象 1 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型 类是具有相同属性和行为的一组对象的集合 简单理解 类就是对现实事物的一种描述 类的组成 属性 指事物的特征 例如 手机事物 品牌 价格

随机推荐

  • Composer警告Warning:This development build of composer is over 60 days old......

    今天查看了一下服务器安装的Composer版本 报了一个警告 意思是安装已经超过60天了 需要执行 usr bin composer self update 升级到最新版本 然后我就执行了 再次查看版本确实更新到官方最新的1 7 3版本 但
  • IDEA自动补全返回值的快捷键

    首先 将光标移至方法的末尾 然后 使用 ctrl alt v 示例 补全以前 discoveryClient getServices 补全以后 List
  • 模板方法(template method)c++版本

    大话设计模式中的template method c 版本 template method cpp Created on Jul 24 2017 Author clh01s 163 com 模板方法 include
  • C++基础知识 - deque容器概述

    deque容器概念 deque是 double ended queue 的缩写 和vector一样都是STL的容器 唯一不同的是 deque是双端数组 而vector是单端的 Deque 特点 deque在接口上和vector非常相似 在许
  • c语言输出中文为乱码_C语言输出乱码问题

    题目 要求输出国际象棋棋盘 include include conio h int main int i j for i 0 i lt 8 i for j 0 j lt 8 j if i j 2 0 printf c c 219 219 e
  • QT5.2中新建lib库,在引用时出现error LNK2019: 无法解析的外部符号错误

    1 由于在VS2010中新建QT的lib库时默认的是新建动态链接库 然后我在配置属性中改为lib库 结果生成的lib库在引用是出现error LNK2019 无法解析的外部符号错误 2 error LNK2019 无法解析的外部符号 dec
  • 超越Swin

    作者 科技猛兽 编辑 极市平台 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 目标检测 技术交流群 后台回复 transformer综述 获取2022最新ViT综述论文 导读 本文提出 FCM
  • Java方法和数组练习

    个人简介 作者简介 大家好 我是W chuanqi 一个编程爱好者 个人主页 W chaunqi 支持我 点赞 收藏 留言 愿你我共勉 没有什么比勇气更温文尔雅 没有什么比怯懦更冷酷无情 Java方法和数组练习 1 获取每月天数 根据输入的
  • el-upload 上传视频并回显

    el upload上传视频 并且显示上传的视频
  • python基础编程_25_拷贝函数,copy()

    import copy a 1 2 3 4 a b b a 引用 除非直接给a重新赋值 否则a变则b变 b变则a变 c copy copy a 浅复制 只会拷贝父对象 不会拷贝父对象中的子对象 所以若a的子对象变则c 变 但是父对象变c不会
  • C++利用Poco库实现QT的信号与槽效果

    C 利用Poco库实现QT的信号与槽效果 定义信号类 信号类的使用 定义类型Model main头文件引用 main定义信号发送类 main定义信号接收类 main主函数 引用的Poco库 参考资源 C 利用Poco库实现QT的信号与槽效果
  • Python3,使用Flask来实现接口请求

    Flask之实现接口请求 1 引言 2 Flask 2 1 flask 的环境安装 2 2 flask构建web框架 2 3 flask构建get请求 2 4 flask构建post请求 2 41 代码编写 2 4 2 安装RestClie
  • j2me总结(三)

    高级界面开发 二 本编介绍高级界面下的类 1 Form Form是高级界面中最重要的类 是一个典型的容器控件类 是一个包含多个UI组件的屏幕对象 故名思意 form为表单的意思 在form中可以包含Item类 Form上的每一个元素都会分配
  • vue .number修饰符

    项目中遇到这样一个问题 某个input框用来输入价格之类的数字 我想对input的取值区间做判断 但是发现输入后变成了String类型 所以用了vue中的 number修饰符 这样就可以获得Number类型了 很方便
  • Qt 5 帮助文档的使用

    Qt 5 帮助文档的使用 Qt 5 帮助文档的使用学习图形界面开发 肯定离不开帮助文档的使用 因为它不像 C 语言那样就那么几个函数接口 图形接口的接口可以用海量来形容 常用的我们可能能记住 其它的真的没有必要去记 用到什么就去帮助文档查看
  • C++ 读写CSV文件

    include
  • Java异常之自定义异常类详解和代码举例

    Java语言的异常 异常处理机制 Java中的异常概念 1 异常是程序在运行过程中由于算法问或软件设计等问题导致的程序异常事件 2 异常的前提是可以识别并被捕获的 3 Java以面向对象的方法来处理异常的 Java提供了各种类型的异常类 4
  • 数据结构day1(2023.7.13)

    一 Xmind整理 二 课上练习 练习1 static 全局变量 局部变量作用域 int a 0 全局变量 生命周期和作用于都是从定义开始到整个文件结束 void fun int b 0 局部变量 static int c 0 局部变量 作
  • 2018第一届世界区块链大会 区块链大咖畅谈区块链宏观经济

    2018年4月24日上午 第一届世界区块链大会 三点钟峰会 W B C 在中国澳门召开 以 技术重构世界 为主题 要 驱动幸福世界 链接美好未来 大会由世界区块链联合协会首倡 世界区块链大会组委会 三点钟 深创学院主办 深圳大学区块链研究院
  • (转)找不到或无法加载主类(Could not find or load main class )

    原文 https blog csdn net shymi1991 article details 50540214 当我们试图在命令行编译运行一个简单的java程序HelloWorld java 编译命令javac HelloWorld j