方法名() throws 所有潜在异常类型列表

  格式:方法名() throws 所有潜在异常类型列表

  异常说明将Java中的异常分为了两类,一类是被检查的异常,即Exception及所有继承自它的异常;另一类是不受检查的异常,即RuntimeException,即运行时异常。怎么理解呢?

  说白了就是,被检查的异常只要你在函数中要用到throw抛出异常或者说你调用的函数利用了throw抛出了异常,那么你就必须在函数后面加上throws关键字并在后面列出所有可能抛出的异常;而不受检查的异常就是你抛出它的时候不用做特别说明,就像上面除法的例子一样。

  这种自顶向下的约束,可以保证Java代码一定水平的异常正确性。但是这里是有争议的,有些人认为这样好,但有些人认为这样会影响程序员的编程效率,因为有时候你根本就不知道你捕捉的是什么异常,也不知道该怎么处理,但是编译器会强制要求你加上这些模块。

  finally关键字

  finally关键字常用数据库的哥们肯定懂,一般我们在finally里要关闭数据库连接或者做一些清理工作。关于finally我想说两点有趣的事情:

  一、保证完成任务

  为什么这么说finally关键字呢,就是因为无论在try语句中执行了什么命令,finally中的语句块一定会执行(这就确保了有些必要的清理工作),如:

  public class MultipleReturns

  {

  public static void f(int i)

  {

  System.out.println("Initialization that requires cleanup");

  try

  {

  System.out.println("Point 1");

  if (i == 1)

  return;

  System.out.println("Point 2");

  if (i == 2)

  return;

  System.out.println("Point 3");

  if (i == 3)

  return;

  System.out.println("End");

  return;

  }

  finally

  {

  System.out.println("Performing cleanup");

  }

  }

  public static void main(String[] args)

  {

  for (int i = 1; i <= 4; i++)

  f(i);

  }

  }

  大家执行这段代码会惊奇的发现,即使try中代码调用了return命令但是finally也一定会执行。

  二、嵌套try

  public class Cleanup

  {

  public static void main(String[] args)

  {

  try

  {

  InputFile in = new InputFile("Cleanup.java");

  try

  {

  String s;

  int i = 1;

  while ((s = in.getLine()) != null)

  ; // Perform line-by-line processing here…

  }

  catch (Exception e)

  {

  System.out.println("Caught Exception in main");

  e.printStackTrace(System.out);

  }

  finally

  {

  in.dispose();//自定义

  }

  }

  catch (Exception e)

  {

  System.out.println("InputFile construction failed");

  }

  }

  } /*

  * Output: dispose() successful

  */// :~

  对于这个例子,我们看出我们要创建InputFile对象,当我们成功创建它时需要用dispose方法对其进行清理,然而如果失败时我们并不需要对其进行清理。倘若只有一个不使用嵌套try块,那么不管怎样finally都会执行。所以为了避免这种情况,上面的嵌套try语句就起到了作用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值