网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  浅析java语言中两种异常在使用时的差别     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:72次  录入:管理员--2007-11-16  
 

java提供了两类主要的异常:runtime exception和checked exception。所有的checked exception是从java.lang.exception类衍生出来的,而runtime exception则是从java.lang.runtimeexception或java.lang.error类衍生出来的。

它们的不同之处表现在两方面:机制上和逻辑上。

一、机制上

它们在机制上的不同表现在两点:1.如何定义方法;2. 如何处理抛出的异常。请看下面checkedexception的定义:


public class checkedexception extends exception
{
 public checkedexception() {}
 public checkedexception( string message )
 {
  super( message );
 }
}




以及一个使用exception的例子:


public class exceptionalclass
{
 public void method1()
  throws checkedexception
  {
   // ... throw new checkedexception( "...出错了" );
  }
 public void method2( string arg )
  {
   if( arg == null )
   {
    throw new nullpointerexception( "method2的参数arg是null!" );
   }
  }
 public void method3() throws checkedexception
  {
   method1();
  }
}




你可能已经注意到了,两个方法method1()和method2()都会抛出exception,可是只有method1()做了声明。另外,method3()本身并不会抛出exception,可是它却声明会抛出checkedexception。在向你解释之前,让我们先来看看这个类的main()方法:


public static void main( string[] args )
{
 exceptionalclass example = new exceptionalclass();
 try
 {
  example.method1();
  example.method3();
 }
 catch( checkedexception ex ) { } example.method2( null );
}




在main()方法中,如果要调用method1(),你必须把这个调用放在try/catch程序块当中,因为它会抛出checked exception。

相比之下,当你调用method2()时,则不需要把它放在try/catch程序块当中,因为它会抛出的exception不是checked exception,而是runtime exception。会抛出runtime exception的方法在定义时不必声明它会抛出exception。

现在,让我们再来看看method3()。它调用了method1()却没有把这个调用放在try/catch程序块当中。它是通过声明它会抛出method1()会抛出的exception来避免这样做的。它没有捕获这个exception,而是把它传递下去。实际上main()方法也可以这样做,通过声明它会抛出checked exception来避免使用try/catch程序块(当然我们反对这种做法)。

小结一下:

* runtime exceptions:

在定义方法时不需要声明会抛出runtime exception;

在调用这个方法时不需要捕获这个runtime exception;

runtime exception是从java.lang.runtimeexception或java.lang.error类衍生出来的。

* checked exceptions:

定义方法时必须声明所有可能会抛出的checked exception;

在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;

checked exception是从java.lang.exception类衍生出来的


 
 
上一篇: java实用技巧:定时执行任务的三种方法    下一篇: 成学人生:java开发真的需要那么复杂吗?
  相关文档
java访问在接口中定义的常量 11-17
http断点续传简单实现 11-17
windows98下安装和配置jdk 11-16
java bean 生成器 11-17
hibernate中的middlegen入门指南 11-17
常见java开发工具的特点比较(1) 11-16
使用jsf(java server faces)开发(一) 11-17
实 现java 的 动 态 类 载 入 机 制 11-17
nokia发布snap,辅助j2me网络游戏开发 11-17
我们组的web应用开发方式 11-17
web框架wings发布 2.0 版本 11-17
java的一些编码基础 11-16
dx图形流程(基于mesh静态模型绘制----托管代码) 11-17
类装入问题解密,第 1 部分: 类装入和调试工具介绍 11-17
用java的jwindow运行出的splash画面 11-17
java中常用修饰词使用方法的介绍 11-17
在java2环境中应用ip地址封装对象 11-17
apache服务器配置全攻略 11-17
jsr 224-java ee 5 最终草案发布 11-17
spring中的template和callback模式 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息