posts - 42,comments - 83,trackbacks - 0

        这2个东西应该是java里很常见,很简单,他们都和classpath设定有关,但区别在哪里呢? 我们都知道java里生成对象有如下两种方式:
        1:Object obj = new ClassName(); 直接new一个对象
        2:Class clazz = Class.forName(ClassName);
              Object obj = clazz.newInstance(); 通过class loader动态装载一个类,然后获取这个类的实例

        同样是生成对象,1在编译期间检查classpath, 如果没有类定义,编译没法通过。而2在编译期间是不会检查的,不过需要抛出或者自己catch ClassNotFoundException。 运行期间,如果1编译时依赖的类不在classpath中(导致classloader装载失败),此时抛出的异常就是NoClassDefFoundError。而如果2在运行期间需要装载的类不在classpath中,抛出的则是ClassNotFoundException。

posted on 2008-09-25 19:45 走走停停又三年 阅读(9645) 评论(5)  编辑  收藏 所属分类: Java Technology

FeedBack:
# re: java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError的区别
2008-09-26 09:53 |
学习
两个异常都是在类没找到的时候抛出,只是在Class.forName抛ClassNotFoundException,在new的时候抛NoClassDefFoundError
是这意思吗?  回复  更多评论
  
# re: java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError的区别
2008-09-26 09:57 | fjin
是啊,NoClassDefFoundError是编译期间能找到,但runtime找不到。而ClassNotFoundException则是说runtime找不到,因为编译期间是不做检查的。  回复  更多评论
  
# re: java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError的区别
2008-09-26 10:05 | 舞命小丢
学习了!不错!  回复  更多评论
  
# re: java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError的区别
2008-09-26 11:01 |
哦,NoClassDefFoundError
不是Exception是Error
  回复  更多评论
  
# 怎样解决以下错误,请高手帮忙[未登录]
2009-06-18 17:40 | 你好
严重: Exception starting filter AuthFilter
java.lang.ClassNotFoundException: com.alt.common.filter.AuthFilter
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:249)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4363)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
2009-6-18 17:34:09 org.apache.catalina.core.StandardContext start
严重: Error filterStart
2009-6-18 17:34:09 org.apache.catalina.core.StandardContext start
严重: Context [/marry] startup failed due to previous errors  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: