黑马程序员技术交流社区

标题: (分享)throws,throw,try,catch,finally分别代表什么意义在try块中可以抛出异常吗 [打印本页]

作者: 韩新凯    时间: 2012-4-21 16:41
标题: (分享)throws,throw,try,catch,finally分别代表什么意义在try块中可以抛出异常吗
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义在try块中可以抛出异常吗

Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。
throw语句用来明确地抛出一个"异常"。
throws用来标明一个成员函数可能抛出的各种"异常"。
Finally为确保一段代码不管发生什么"异常"都被执行一段代码。
可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。
作者: 毕博    时间: 2012-4-21 18:43
补充几句吧
finally虽然是必须执行的代码,但是如果前面出现了System.exit(0);就不会执行finally
还有就是
finally之前如果出现了return语句,而finally对return的数据进行了处理,我们所收到是当时return的数值,但是数据却已被finally改变
作者: 黑马罗坚    时间: 2012-4-21 21:32
异常是是对问题的描述。将问题进行对象的封装。 异常体系中的所有类以及建立的对象都具备可抛性也就是说可以被throw和throws关键字所操作。只有异常体系具备这个特点。
它的出现能让我们更好的把现实需求转化成代码 应为问题是现实事物中不可或缺的一个表现  它能让流程代码和问题代码分离 大大的真假的代码的阅读性  可以让我们分层的阅读代码
异常分编译异常 和运行期异常  编译期异常在程序编译时会坚持描述的是我们可以解决的问题 当出现这类异常一般我们会执行抛或try 处理 如计算机蓝屏也是一种异常 当触发了这类异常我们只需重启系统即可  运行期异常程序运行时可能会出现 是我们不需要处理的异常 该异常发生了我们就让它停止修正代码 处理了反而会影响结果或隐藏了问题  如你访问了数组中不存在的角标时会发生数组越界异常你处理了改异常有可能会影响到结果 然而这个结果并不是你想要的结果  这是我们让程序停下来修正代码是最好的办法 当然也有特殊情况有些运行前异常还是会处理的
异常的处理办法抛或者try
抛 throw和throws throw用在函数体内  后面接的是异常对象  throws用在函数上 后面接的是类名可以多个用逗号连接 当里函数体内抛了编译期异常 函数上就要throws该异常对象 当你函数上抛了编译期异常调用处就需要try 或继续抛 如果跑调用处的函数也要抛相应异常 直到抛给JVM JVM会按默认方法处理异常那就是程序结束 打印堆栈信息
当然也可以用try catch finally处理
catch语句书写时父类要放到子类的后面否则会编译不通过  应为程序不知道执行哪条异常语句如
try{
  会发生溢出的代码
}catch(Exception e){
  处理异常的代码
}catch(RuntimeException e){   
}finally{
  一定会执行的代码 通常用来释放资源  
}
上面的代码会变异错误 应该写成下面的形式
try{
  会发生溢出的代码
}catch(RuntimeException e){
  处理异常的代码
}catch(Exception e){   
}
有3种形式  catch语句可以多个  一般抛出了几个异常就用几个catch语句捕获
1
try{
}catch(Exception e){
}
2
try{
}finally{
} 这种形式并没有处理异常 如果是编译器异常 函数上要声明该异常即跑出该异常

3
try{
}catch(Exception e){
}finally{
};

finally只有一种情况不会被执行其他的都会执行 就是执行该语句块时 出现了System.exit(0);或System.exit(1);语句时不会执行

当我们需要描述程序中特有的问题时可以用自定义异常 定义类继承Exception或者RuntimeException
是为了让该自定义类具备可抛性。让该类具备操作异常的共性方法。当要定义自定义异常的信息时,可以使用父类已经定义好的功能。异常信息传递给父类的构造函数。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2