java java.lang.NoClassDefFoundError 的解决办法
以简单而经典的 “HelloWorld.java” 为例
不含包层次的HelloWorld.Java
  public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
  保存在E:\java\src下,命令行下,改变当前路径到:E:\java\src,使用javac命令编译:
  E:\java\src>javac HelloWorld.java
  运行:
  E:\java\src>JavaHelloWorld
  屏幕打印出:
  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 void main(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中,具体为什么会提示wrong name,有兴趣的朋友参见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类库里面的类也可以这样写:java.util.List  类的全名就是这样的,我们如果在 import 语句里写上 import java.util.List;
那么,就不用写全名了,直接写 List list = new ...;java 编译器就可以知道是 List 什么类.但是,由于,java.util 这个包 和 java.sql 这个包都有一个 Date 类,所以,如果 同时导入这两个包,那么会
导致java 编译器不知道引用那个类,有两种解决办法:
a. 用全名来引用类:java.util.Date date1 = ...;java.sql.Date date2 = ...;
b. 不要导入整个包,只导入所需要的类,如果你同时需要这两个 Date 类,那么只能写全名了,如果
你不是同时需要这两个类,你可以只导入需要的包:
比如:import java.util.List; import java.sql.Date;这样就不会冲突,因为编译器可以十分清楚的区分
这个 Date 类是 java.sql 包中的, java.util 包中的 Date 类根本就没有导入进来。
这一点,可以按照常理来理解,还是比较好理解的。
  2. 使用 -d <directory>编译选项
  是不是觉得上面的编译方法有点麻烦,能不能自动在当前路径(或任意指定的路径)下生成包层次呢?有!使用-d <directory>编译选项就能做到。
  E:\java\src >javac
(其中的点表示当前目录。d 和 . 之间有空格, .和后面的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
java java.lang.NoClassDefFoundError 的解决办法的更多相关文章
- eclipse android 不会自动生成R.java文件和包的解决办法
		
eclipse下编写android程序突然不会自动生成R.java文件和包的解决办法 我的eclipse原来是好好的,什么问题都没有的,结果今天一打开新建一个android程序,发现工程里不会自动 ...
 - java   无法找到main类解决办法
		
java 无法找到main类解决办法 如果Java类有包名,你必须建相应的包文件夹并把文件编译或拷贝到到相应的文件夹下: 如下: 1.源文件文件: E:\test\src\tes ...
 - JAVA联调接口跨域解决办法
		
JAVA联调接口跨域解决办法 第一种代码: HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus. ...
 - Eclipse 在启动发生错误异常:An internal error occurred during: "Initializing Java Tooling". java.lang.NullPointerException的解决办法
		
异常现象: 打开Eclipse,出现 An internal error occurred during: "Initializing Java Tooling". java.la ...
 - Android ADT插件更新后程序运行时抛出java.lang.VerifyError异常解决办法
		
当我把Eclipse中的 Android ADT插件从21.1.0更新到22.0.1之后,安装后运行程序抛出java.lang.VerifyError异常. 经过调查,终于找到了一个有效的解决办法: ...
 - (转)Android工程出现 java.lang.NoClassDefFoundError错误解决方法
		
在Eclipse中,导入Android工程,工程没有报错,运行时,出现 java.lang.NoClassDefFoundError类没有找到的错误.从问题上可以看出是导入包出错的原因.遂百度加谷歌. ...
 - 基于Web的Kafka管理器工具之Kafka-manager启动时出现Exception in thread "main" java.lang.UnsupportedClassVersionError错误解决办法(图文详解)
		
不多说,直接上干货! 前期博客 基于Web的Kafka管理器工具之Kafka-manager的编译部署详细安装 (支持kafka0.8.0.9和0.10以后版本)(图文详解) 问题详情 我在Kaf ...
 - Eclipse下执行main函数报java.lang.NoClassDefFoundError的解决
		
今天执行eclipse下的一个java类,无论run还是debug,都报java.lang.NoClassDefFoundError.而且把main中函数都注释掉,执行还是报一样的错. 检查了一下这个 ...
 - java.lang.NoClassDefFoundError   错误解决思路
		
Process: com.oppo.reader, PID: 20472 java.lang.NoClassDefFoundError: com.zhangyue.iReader.PDF2.ui.PD ...
 
随机推荐
- 【Javascript】重新绑定默认事件
			
更多内容,请移步 JSCON-简时空 在有一种场景下,你想先屏蔽掉默认的系统事件,而在特定条件下又重新绑定回去. [场景]H5页面,动画欢迎界面,共6帧:想在前5帧中屏蔽掉默认的touchmove事件 ...
 - php时间设置为本地
			
PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to ...
 - MySQL数据库的备份与还原
			
http://www.cnblogs.com/lql123/p/6090681.html //安装WordPress 1.备份 密码为:AAAzzz//123 mysqldump -uroot ...
 - Python:函数
			
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 定义和调用 >>> def add(x,y): ... print('x=',x) #Python3必须加&quo ...
 - MVC5+EF6 入门完整教程四
			
上篇文章主要讲了如何配置EF, 我们回顾下主要过程: 创建Data Model à 创建Database Context à创建databaseInitializerà配置entityFramewor ...
 - SwitchHosts—hosts管理利器
			
SwitchHosts是一个管理.快速切换Hosts小工具,开源软件,一键切换Hosts配置,非常实用,高效.开发Web过程成,部署有多套环境,网址域名都相同,部署在不同的服务器上,有开发环境.测试环 ...
 - hibernate入门实例
			
1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate OR ...
 - [css]水平垂直居中的方法
			
1.top:cale(50% - 2rem); left:cale(50% - 2rem);
 - 1627. Join
			
http://acm.timus.ru/problem.aspx?space=1&num=1627 给一个无向图,问可以有多少生成树 参照 周冬<生成树的计数及其应用> 代 ...
 - μC/OS-Ⅲ系统的任务挂起表
			
在μC/OS-Ⅲ系统中任务挂起表与任务就续表十分相似,只不过任务就续表记录就绪状态的任务,任务挂起表记录等待某个内核对象的任务.任务挂起表是一个类型为OS_PEND_LIST的数据结构,包含三个成员: ...