zoukankan      html  css  js  c++  java
  • 今天遇到一件开心事,在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,这样在命令窗口中编译和执行就不需要额外去切换目录了,可以在当前目录直接执行。

  • 相关阅读:
    设计模式-抽象工厂模式
    装修预算-资料收集
    SQL中存储过程和函数的区别
    View
    数据表优化
    Entity Framework 基础
    html5标准
    JS整数验证
    vue 页面切换从右侧切入效果
    vue动态设置Iview的多个Input组件自动获取焦点
  • 原文地址:https://www.cnblogs.com/aziji/p/9988752.html
Copyright © 2011-2022 走看看