关于异常处理,try{}catch{}finally{}与try{} finally{}的区别?

问题描述

如题!区别就是try{}finally{}能捕获特定异常?另外println()会抛出什么类型的异常?

解决方案

解决方案二:
该回复于2009-08-28 13:39:31被版主删除
解决方案三:
publicstaticvoidmain(String[]args){try{inti=1/0;}catch(Exceptione){System.out.println("在catch里");}finally{System.out.println("在finally里");}}//输出结果://在catch里//在finally里

try的后面必须接catch或finally或者都接,但不能一个都不接;finally的主要作用是在出现异常后无论怎样都要执行finally里的语句.而且finally不捕获异常的,他的作用就是无论发不发生异常都会执行,你可以看看你上面的代码,刚看了下jdk好像里面没说会抛出什么异常,这个期待高人
解决方案四:
没见过println()方法本身报异常。。。有异常也是传入的语句报的。。。。try{}finally{}能捕获特定异常??就知道catch可以。。。。
解决方案五:
引用1楼xiaozejun的回复:

这个问题还真没有研究过过来向高手学习学习帮顶如果楼主解决了问题请记得帮我们详细解说一下让我们也好好学习学习啊哈啊哈哈

这个是不是复制好了的,我怎么老发现同一句话?try{}catch{}finally{}可能可以铺货异常,finally可以作为终结者。try{}finally{}不能铺货异常,但是finally可作为终结者!
解决方案六:
try{}finally{}不能捕获异常println不抛出checked异常,不需要进行捕获
解决方案七:
引用3楼pupppet的回复:

没见过println()方法本身报异常。。。有异常也是传入的语句报的。。。。try{}finally{}能捕获特定异常??就知道catch可以。。。。

packagejavaJieHuo;importjava.io.*;publicclassArcanel{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubtry{System.out.println("Hellowrod");}catch(Exceptione){//System.out.println("I'veneverseenprintlnfail");}//改成catch(IOExceptione)则通不过编译}}

解决方案八:
packagejavaJieHuo;importjava.io.*;publicclassArcanel{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubtry{System.out.println("Hellowrod");}catch(Exceptione){//System.out.println("I'veneverseenprintlnfail");}改成catch(IOExceptione)则通不过编译怎讲?}}

解决方案九:
UnreachablecatchblockforIOException.Thisexceptionisneverthrownfromthetrystatementbody
解决方案十:
try{System.out.println("try");thrownewException("customizedexception");}catch(Exceptione){System.out.println("catch:"+e.getMessage());return;}finally{System.out.println("finally");}//输出顺序是啥
解决方案十一:
1.try+catch程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句2.try+catch+finally程序的流程是:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行catch块后面的语句3.try+finally程序的流程是:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就已抛出异常的方式退出了。要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常publicclassTest1{/***@paramargs*@throwsMyException*/publicstaticvoidmain(String[]args){//try+finally的方法声明//publicstaticvoidmain(String[]args)throwsMyException{//TODOAuto-generatedmethodstubTestExceptionte=newTestException();/**try+catch*try{te.test();}catch(MyExceptione){e.printStackTrace();}System.out.println("afterexception");*//**try+catch+finally*try{te.test();}catch(MyExceptione){e.printStackTrace();}finally{System.out.println("entryfinallyblock");}System.out.println("afterexception");*//**try+finally*try{te.test();}finally{System.out.println("entryfinallyblock");}System.out.println("afterexception");*/}}classTestException{voidtest()throwsMyException{thrownewMyException("illegalinvoked");}}classMyExceptionextendsException{MyException(Stringmsg){super(msg);}}

还有一点,不要太在意输出结果的顺序,因为是采用不同的流在输出,所以可能每次执行程序的打印结果顺序都不太相同
解决方案十二:
我覺得學做程序,沒必要這樣鑽牛角尖吧,覺得他有用的時候再考慮,我看這個就算你知道了也不會在以後寫程序的時候用tryfinally,你能指望別人都看得懂啊,誰叫這個寫法不通用最後還不是用trycatch沒多大意義
解决方案十三:
try{//有异常}catch(){//这里抛出}finally{//这里不管怎么都会执行的!}

假如只有try{}finally{}这样有异常会出错的!!
解决方案十四:
引用10楼lovecj6185的回复:

1.try+catch程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句2.try+catch+finally程序的流程是:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行catch块后面的语句3.try+finally程序的流程是:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就已抛出异常的方式退出了。要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常

这个解释的比较清楚了,顶!就是在2.try+catch+finally中的最后一句:如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行catch块后面的语句是不是应为:如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句
解决方案十五:
trycatch(不管有无finally)捕获catch的参数中类型的异常tryfinally不捕获,如果有直接崩了,或者被方法throws了
解决方案:
引用13楼islandrabbit的回复:

引用10楼lovecj6185的回复:1.try+catch程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句2.try+catch+finally程序的流程是:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行catch块后面的语句3.try+finally程序的流程是:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就已抛出异常的方式退出了。要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常这个解释的比较清楚了,顶!就是在2.try+catch+finally中的最后一句:如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行catch块后面的语句是不是应为:如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句

呵呵,是的谢谢你的提示
解决方案:
1,顶楼主的钻研精神。2,try{}一定执行,后面catch{}和finally{}至少跟一个。3,有catch{}:(1)没有finally{},有异常就抛出,没有不抛。接着执行catch{}后面的代码(2)有finally{},有异常就抛出,没有不抛。然后执行finally{}然后执行finally{}后面代码4,没有catch{},只有finally{},如果有异常,抛出异常。执行finally{},不再执行后面代码。如果没有异常,不抛,执行finally{},再执行后面代码。5,你对printlncatchIOException报错,catchException不报错,不代表它就有一个Exception的子类异常要抛。事实上你对任何语句甚至空语句(即什么都不写,try{}这样)catchException都不会报错的,但我们知道并不是所有的语句都会抛出异常。同样,它不提示让你trycatch也不代表它没有异常要抛,比如你做5/0,它不会报错,但是运行时会抛ArithmeticException除0异常,这是运行时异常,编译阶段它是检测不到的。
解决方案:
各位大侠:请问:第二个catch为什么捕获不到第一个catch中抛出的Error呢??staticvoidf(inti){try{if(i==0){s=s+"0";System.out.println("tryif:"+s);thrownewException();}s=s+"1";System.out.println("try"+s);return;}catch(Exceptione){e.printStackTrace();s=s+"2";System.out.println("catchone"+s);s=s+"3";System.out.println("catchtwo"+s);thrownewError();}catch(Errorexs){exs.printStackTrace();System.out.println("catch第二个"+s);}finally{s=s+"4";System.out.println("finally=="+s);//thrownewRuntimeException();}}
解决方案:
引用17楼firezxm的回复:

各位大侠:请问:第二个catch为什么捕获不到第一个catch中抛出的Error呢??

当有多个catch时,JVM会先看下异常是否被捕获到,如果被捕获到,忽略下面的catch
解决方案:
引用17楼firezxm的回复:

各位大侠:请问:第二个catch为什么捕获不到第一个catch中抛出的Error呢??staticvoidf(inti){try{if(i==0){s=s+"0";System.out.println("tryif:"+s);thrownewException();}s=s+"1";System.out.println("try"+s);return;}catch(Exceptione){e.printStackTrace();s=s+"2";System.out.println("catchone"+s);s=s+"3";System.out.println("catchtwo"+s);thrownewError();}catch(Errorexs){exs.printStackTrace();System.out.println("catch第二个"+s);}finally{s=s+"4";System.out.println("finally=="+s);//thrownewRuntimeException();}}

thrownewError();是把异常向上抛,是由上层调用它的代码中去捕获处理,如果也处理不了,可继续往上抛,直到被系统捕获。
解决方案:
CSDN里有一篇笑文,关于擦屁股的。。。楼主可以去看下。。。。
解决方案:
学习一下
解决方案:
学习了。。

时间: 2024-08-31 06:25:41

关于异常处理,try{}catch{}finally{}与try{} finally{}的区别?的相关文章

JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别

JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间过得很快,转眼一个月就这样过去了,我们不多说,继续我们的JAVA之旅 一.异常的概述 异常算是程序中一个比较重要的环节了,我们首先来看一下异常的体系,我们举一个小例子,定义一个除法方法 //公共的 类 类名 public class HelloJJAVA { // 公共的 静态 无返回值 main方

C# 异常处理(Catch Throw)IL分析

1.catch throw的几种形式及性能影响: private void Form1_Click(object sender, EventArgs e) { try { } catch { throw; } } private void Form1_Load(object sender, EventArgs e) { try { } catch (Exception) { throw; } } private void Form1_Enter(object sender, EventArgs

js中的异常处理try...catch使用介绍_javascript技巧

在JavaScript可以使用try...catch来进行异常处理.例如: 复制代码 代码如下: try { foo.bar();} catch (e) { alert(e.name + ": " + e.message);} 目前我们可能得到的系统异常主要包含以下6种: EvalError: raised when an error occurs executing code in eval() RangeError: raised when a numeric variable o

简单谈谈java的异常处理(Try Catch Finally)_java

异常的英文单词是exception,字面翻译就是"意外.例外"的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误. 一 前言 java异常处理大家都不陌生,总的来说有下面两点: 1.抛出异常:throw exception class SimpleException{ public void a() throws Exception{ throw new Exception(); }; } 2.捕获异常: public class MyExcepti

C#异常处理“try catch”与vb ”on error goto“

  C#跟其他语言一样,在编写代码的过程中都会或多或少的出现语法或者逻辑上的错误,如果盲目相信自己的技术只能让这些异常的程序继续存在,最终导致系统无法正常运行甚至瘫痪.技术上要保证代码不出错的同时我们也要给自己留有余地,一般的编程语言都会有异常处理机制,熟练掌握对异常的处理,也是保证我们程序可靠性的前提.   根据前面学习过的vb6.0,的异常处理,在学习c#,的异常处理就很同意理解,原理上都是一样的,只是语法略有区别.vb中我们用的是on error 语句,c#中刚学习了try  catch,

java中异常处理try~catch~finally介绍

1.异常: 1.1:错误和异常是两个概念:错误是需要避免的,而异常是你能预见到的并且能掌控的了 得 1.2:处理异常:用try...catch...finally 用throw,就得用throws来修饰方法名 public void sayHello() throws Exception{}这样写,如果在别的方法 中想要调用这个方法,要么用try..catch捕获异常,要么throws Exception交给下一个用它的方法. 1.3:try{如果这里面的语句出现错误,那么将不执行下一句,直接跳

JS异常处理try..catch语句的作用和实例_php实例

首先一个常识就是,在浏览器执行JS脚本过程中,当出现脚本错误,并且你没有手动进行异常捕捉时,他会在浏览器下面出现黄色的叹号,这是正常的,这也不是最重要的,最重要的是,出错行以下的所有JS代码将中停执行,这是我们不希望看到的,所以说,对于自己写的,拿不准的脚本还是加上异常捕捉比较好. 1 清除黄色叹号: 复制代码 代码如下: window.onerror={return true;}  //这只是表面清除了错误,但JS代码将被中停 2 为容易出错的,容易产生兼容问题的代码段加上try..catch

T-SQL编程中的异常处理-异常捕获(try catch)与抛出异常(throw)

原文:T-SQL编程中的异常处理-异常捕获(try catch)与抛出异常(throw)   本文出处: http://www.cnblogs.com/wy123/p/6743515.html     T-SQL编程与应用程序一样,都有异常处理机制,比如异常的捕获与异常的抛出(try catch throw),本文简单介绍异常捕获与异常抛出在T-SQL编程中的实际使用 . 异常处理简单说明 异常捕获在应用程序编程中非常常见,提供了处理程序运行时出现的任何意外或异常情况的方法刚毕业的时候对于异常处

编程-C#异常处理相关,try catch

问题描述 C#异常处理相关,try catch using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication7 { class Photo {//Photo类 string _title; public Photo(st