exception in thread main java.lang.noclassdeffounderror wrong name

来源:互联网 发布:php curl get 图片 编辑:程序博客网 时间:2024/05/14 07:30

不含包层次的HelloWorld.java

  public class HelloWorld{ public static void main(String[] args) { System.out.println("Hello World!"); }}

  保存在E:/java/src下,使用javac命令编译:

  E:/java/src>javac HelloWorld.java

  运行:

  E:/java/src>java HelloWorld

  屏幕打印出:

  Hello World!

  初学者常犯的错误

  1. 运行时,带了.class后缀

  如果你试图使用如下命令:

  E:/java/src>java HelloWorld.class

  系统会误认为你运行的是HelloWorld包下的名为class的类文件,会到系统的CLASSPATH下(一般都包括当前目录)企图寻找HelloWorld.class.class这样的类,这样的类当然不存在了;并且也不可能存在,因为class是关键字,不能作为一个类的名字。所以会报如下错误信息:

  Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class

  2. 文件名大小写错误

  对于像Windows这样的系统,编译时可以不关心大小写。比如编译HelloWorld.java时,也可以使用:

  E:/java/src>javac helloworld.java

  也可以编译通过,但产生的类文件仍然是和源文件相符的:HelloWorld.class。

  但在运行时一定要注意大小写,比如试图使用如下命令运行:

  E:/java/src>java helloworld

  将报类似于1中的错误:

  Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)

  包含包层次的HelloWorld.java

  比如上面的HelloWorld.java修改如下:

  package org.javaresearch;public class HelloWorld{ public static voidmain(String[] args) { System.out.println("Hello World!"); }}

  编译时有两种方法

  1. 直接编译

  E:/java/src>javac HelloWorld.java

  此时在当前目录下输出HelloWorld.class。此时,运行不能使用上面相同的方法,使用:

  E:/java/src>java HelloWorld

  运行时,出现如下错误:

  Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/javaresearch/HelloWorld)

  从上述错误信息你也可以看到,系统可以找到HelloWorld类(因为当前路径包含在CLASSPATH中,具体为什么会提示wrongname,有兴趣的朋友参见Java语言规范),但这个类属于org.javaresearch包。所以,你要做的就是按照上述包层次,相应的创建目录层次,把上面生成的HelloWorld.class放到E:/java/src/org/javaresearch/目录下。运行:

  E:/java/src >java org.javaresearch.HelloWorld

  系统打印出:

  Hello World!

  这儿要注意的是,不能使用java org/javaresearch/HelloWorld来运行,此时同样会出现如下错误:

  Exception in thread "main" java.lang.NoClassDefFoundErrorrg/javaresearch/HelloWorld (wrong name: org/javaresearch/HelloWorld)

  哈哈,是不是有点怪怪的,那没办法。以后对Java的包有更深的认识时,就会明白了。

  2. 使用 -d <directory>编译选项

  是不是觉得上面的编译方法有点麻烦,能不能自动在当前路径(或任意指定的路径)下生成包层次呢?有!使用-d <directory>编译选项就能做到。

  E:/java/src >javac -d . HelloWorld.java

  此时,在当前目录下就生成了一个org/javaresearch目录,并且输出的.class文件也在里面。运行:

  E:/java/src >java org.javaresearch.HelloWorld

  系统打印:Hello World!

  如果你想把生成的类文件集中存放在一个目录中,比如:E:/java/classes下,那么你首先创建这个目录,然后编译时:

  E:/java/src >javac -d E:/java/classes HelloWorld.java

  就可以把生成的类文件放到E:/java/classes目录下,并且按照包层次相应的创建目录路径。你可以在E:/java/classes/org/javaresearch下找到HelloWorld.class文件。此时使用如下命令可以正确运行(注意如果要用到其它类,请在CLASSPATH中设好):

  E:/java/classes >java org.javaresearch.HelloWorld

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 6s开机密码忘了怎么办 苹果手机忘记解锁密码怎么办 忘记苹果触控id怎么办 苹果6app被锁了怎么办 捡的苹果id锁了怎么办 苹果手机id密码锁了怎么办 美版5s刷机后激活怎么办 vivo手机图案解锁忘记了怎么办 苹果5sid锁死了怎么办 苹果id账号被锁怎么办 苹果6s忘了ld怎么办 小米忘记图形解锁怎么办呢 索尼手机忘记解锁图案怎么办 oppoa37忘记锁屏密码怎么办 oppoa37锁屏密码忘了怎么办 oppor9图案密码忘了怎么办 oppor忘记锁屏图案怎么办 oppor手机忘记解锁图案怎么办 oppor手机忘记图案了怎么办 oppo手机屏幕锁忘了怎么办 三星手机屏幕锁忘了怎么办 手机主菜单坏了怎么办 索尼手机密码忘了怎么办 索尼笔记本密码忘了怎么办 索尼手机解锁密码忘了怎么办 索尼记录仪密码忘了怎么办 索尼z3手机忘记开机密码怎么办 索尼忘记锁屏密码怎么办 索尼手机忘记锁屏密码怎么办 忘了手机解锁图案怎么办 索尼手机忘记开机密码怎么办 索尼笔记本开机密码忘了怎么办 手机的开机密码忘了怎么办 联想手机开机密码忘了怎么办 红米note3忘记开机密码怎么办 小米2忘了密码怎么办 小米笔记本电脑忘记开机密码怎么办 小米笔记本忘记开机密码怎么办 小米手机儿童模式忘记密码怎么办 小米应用锁密码忘了怎么办 小米air密码忘了怎么办