异常语句

 

2.3.1 try语句可能会抛弃一个或多个例外。  

  2.3.2 catch语句,包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类,它指明

catch语句所处理的例外类型,例外对象则由运行时系统在try所指定的代码块中生成并被捕捉,大括号

中包含对象的处理,其中可以调用对象的方法。  

  catch语句可以有多个,分别处理不同类的例外。Java运行时系统从上到下分别对每个catch语句处理

的例外类型进行检测,直到找到类型相匹配的catch语句为止。  

  也可以用一个catch语句处理多个例外类型,这时它的例外类型参数应该是这多个例外类型的父类。

  2.3.3 finally语句

  finally所指定的代码都要被执行,通常在finally语句中可以进行资源的清除工作。如关闭打开的文

件等。  

  2.3.4 throws语句

  throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。假如你想明确地抛出一

RuntimeException,你必须用throws语句来声明它的类型。  

  2.3.5 throw语句

  throw总是出现在函数体中,用来抛出一个异常

  3 要害字及其中语句流程详解

  3.1try的嵌套

  每当碰到一个try语句,异常的框架就放到堆栈上面直到所有的try语句都完成。假如下一级的try

语句没有对某种异常进行处理,堆栈就会展开,直到碰到有处理这种异常的try语句。下面是一个try语句

嵌套的例子。  

  class MultiNest {  

  static void procedure() {  

  try {  

  int a = 0;  

  int b = 42/a;  

  } catch(java.lang.ArithmeticException e) {  

  System.out.println("in procedure, catch ArithmeticException: " + e);  

  }  

  }  

  public static void main(String args[]) {

   try {

   procedure();

   } catch(java.lang. Exception e) {

   System.out.println("in main, catch Exception: " + e);

   }

   }

  }

  这个例子执行的结果为:

  in procedure, catch ArithmeticException: java.lang.ArithmeticException: / by zero

  成员函数procedure里有自己的try/catch控制,所以main不用去处理 ArrayIndexOutOfBoundsException;当然如果在procedurecatch到异常时使用throw e;语句将异常抛出,那么main当然还是能够捕捉并处理这个procedure抛出来的异常。例如在procedure函数的catch中的System.out语句后面增加throw e;语句之后,执行结果就变为:

  in procedure, catch ArithmeticException: java.lang.ArithmeticException: / by zero

  in main, catch Exception: java.lang.ArithmeticException: / by zero

    我认为try catch和正常的if else一样都是程序流程块,同样他们内部定义的变量对外部都是不可见的。如果try中的程序执行过程中有异常e抛出,如果ecatch中的定义的异常或是其子类,那么程序就会跳转到catch那边执行catch中的程序如果catch中的程序又有异常抛出那么就看这个异常有没有新的try catch块来捕获它,如果没有的话,那它就抛出了,程序中止执行。关于finally的理解就是任何调用try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话。如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,编译器把finally中的return实现为一个warning

3.5 如何抛出异常

如果你知道你写的某个函数有可能抛出异常,而你又不想在这个函数中对异常进行处理,只是想把它抛出去让调用这个函数的上级调用函数进行处理,那么有两种方式可供选择:

第一种方式:直接在函数头中throws SomeException,函数体中不需要try/catch

第二种方式:使用try/catch,在catch中进行一定的处理之后(如果有必要的话)抛出某种异常。

第三种方法:使用try/catch/finally

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值