a137705801 2013-04-25 11:10
浏览 488
已采纳

带包名的.class文件为何不能在.class文件所在目录运行

大家好,我的问题是这样的,我在G:/javaTest文件下建立的Hello.java,源码如下:

package gdgz.lwj;
public class Hello{
 
 public static void say(){
  System.out.println("hello,java!");
  }
  public static void main(String args[]){
   Hello.say();
   }
 }

当我在G:/javaTest 目录下执行 javac -d . Hello.java文件后,再执行 java gdgz.lwj.Hello 执行成功,但是当我进入G:/javaTest /gdgz/lwj目录(也就是Hello.class文件所在目录) 执行 java Hello时就G:/javaTest 出错了,具体如下

G:\javaTest>java gdgz.lwj.Hello
hello,java!

G:\javaTest>cd gdgz

G:\javaTest\gdgz>cd lwj

G:\javaTest\gdgz\lwj>java Hello
Exception in thread "main" java.lang.NoClassDefFoundError: Hello (wrong name: gdgz/lwj/Hello)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
4)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: Hello.  Program will exit.

我们知道如果刚才的Hello.java文件没有带包名,也就是package内容,我们是可以在.class文件所在目录去运行的,我不明白的就是为什么带了包名后了就不能在.class文件所在的目录下去运行,请大家指教。

  • 写回答

5条回答 默认 最新

  • iteye_9831 2013-04-25 13:12
    关注

    新手最容易犯的错误。

    可以在任意目录下执行Java命令。但需要注意:

    1、Java命令的参数是“类的完整类名”,而不是“文件名”。
    所以,不管在任何目录下运行gdgz.lwj.Hello类,都不能简单写作java Hello,
    而需要写成下面形式:

    2、如果类路径不在当前目录下,就需要自己设置classpath参数。

    例如:
    G:\javaTest>java gdgz.lwj.Hello
    或者
    G:\javaTest\gdgz\lwj>java -cp G:\javaTest gdgz.lwj.Hello
    或者
    任意目录下>java -cp G:\javaTest gdgz.lwj.Hello

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证