• 今天遇到一件开心事,在eclipse编写的代码在命令窗口中编译后无法运行,提示 “错误: 找不到或无法加载主类”


    java中带package和不带package的编译运行方式是不同的。

    首先来了解一下package的概念:简单定义为,package是一个为了方便管理组织java文件的目录结构,并防止不同java文件之间发生命名冲突而存在的一个java特性。不同package中的类的名字可以相同,只是在使用时要带上package的名称加以区分

    package debug;
    
    class Demo {
    

      

    1、带package运行方法

    我的代码目录结构为:D:WorkSpace-Javajava_excisesrcdebugHelloWorld.java

    1 package debug;
    2 
    3 class HelloWorld {
    4     public static void main(String[] args){
    5         System.out.println("hi");
    6     }
    7 }

    在eclipse中运行能正常打印出内容,此时我想在命令窗口中去重新编辑并运行该文件时,即提示错误 找不到或无法加载主类

    操作步骤如下:

    1、win + R 调出运行窗口并输入 cmd 打开命令窗口

    2、切换盘符 输入: e:  然后回车

    3、进入到代码目录: cd D:WorkSpace-Javajava_excisesrcdebug

    4、编译文件: javac HelloWorld.java

    5、运行该文件: java HelloWorld,报错了,如下图:

    原因:报这个错原因是在当前目录下,然后根据代码文件中引用的包名会在当前debug目录下再去找debug目录(这个目录肯定不存在,如果你想验证是不是这样,可以手动在当前debug目录下再新建一个debug目录,然后把HelloWorld.class文件拷过去重新运行),所以就会报找不到或者无法加载主类,那么要如何才能正常运行呢,想到了这个代码执行的流程要先找到该debug路径,那是不是我只要返回到当前debug目录的上一级目录,然后重新执行该java文件不就可以找得到debug目录了,话不多说直接上验证截图,从图中可以看到执行成功了:

    2、不带package运行方法

    1 //package debug;
    2 
    3 class HelloWorld {
    4     public static void main(String[] args){
    5         System.out.println("hi");
    6     }
    7 }

    操作步骤如下:

    1、win + R 调出运行窗口并输入 cmd 打开命令窗口

    2、切换盘符 输入: e:  然后回车

    3、进入到代码目录: cd D:WorkSpace-Javajava_excisesrcdebug

    4、编译文件: javac HelloWorld.java

    5、运行该文件: java HelloWorld,直接就得出正确的结果了,如下截图:

     总结:

    1、一般通过IDE开发的代码,在新建class文件时,会默认在文件首行产生一个 package xxx;的代码,这样的代码是可以直接在IDE进行编译并正常运行的(前提是代码无基本的语法错误),如果想要在DOS命令窗口中编译并运行的话,此时就需要将文件目录切换至代码所在目录的上一级目录,然后用 java xxx进行执行,否则会报错,简单做法为:编译文件时javac xxx.java在当前代码路径下,运行文件时需要返回到代码所在目录上一级目录执行,执行时同时要带上包名 java xx.xxx (xx代表包名,xxx代表java类名)。

    2、如果是通过Notepad++创建的java文件,一般首行都不会带上package,这样在命令窗口中编译和执行就不需要额外去切换目录了,可以在当前目录直接执行。

  • 相关阅读:
    CF528D Fuzzy Search
    P3489 付公主的背包
    有标号的DAG计数
    P4609 [FJOI2016]建筑师
    mds/journal.cc: 2929: FAILED assert解决
    Ceph根据Crush位置读取数据
    关于backfill参数建议
    rados put striper功能的调试
    Cephfs的文件存到哪里了
    为什么删除的Ceph对象还能get
  • 原文地址:https://www.cnblogs.com/aziji/p/9988752.html
Copyright © 2020-2023  润新知