java Exception
来源:互联网 发布:php下载zip文件损坏 编辑:程序博客网 时间:2024/06/05 10:29
搞清原理很重要,基础的东西一定要扎实,给自己的一句话。
throws 定义一个方法时候可以用throws关键字声明,表示此方法不处理异常,而交给方法调用处处理。
public class MathDemo { public int div(int i,int j) throws Exception{//定义除法异常,如果有异常,则交给被调用处处理 int temp=i/j; //计算,但是此处可能出现异常 return temp; }}//-=-=-=-=-=-=-=-=-=-=-public class ThrowDemo{ public static void main(String args[]){ MathDemo m = new MathDemo(); try { Log.e("mrpeng", "除法操作: "+m.div(10,2)); } catch (Exception e) { e.printStackTrace();//打印异常 } } }
div 使用了throws关键字声明,所以调用此方法的时候,方法外面必须进行异常处理,即 try…catch
如果在主方法也是用throws关键字,意味着主方法可以处理异常
public class ThrowDeno { public static void main(String args[]) throws Exception { MathDemo m = new MathDemo(); Log.e("mrpeng", "除法操作: " + m.div(10, 2)); }}
主方法不处理任何异常,而交给java最大头JVM,所以如果在主方法使用了throws关键字,则表示一切异常交给JVM处理,默认处理方式也是JVM完成。
throw关键字
作用,抛出一个异常,抛出的是一个异常类的实例化对象,
在异常处理中try语句要捕获的是一个异常对象,此异常对象也可以自己抛出
public class ThisDemo06{ public static void main(String args[]){ try{ throw new Exception("自己抛着玩的。") ; // 抛出异常的实例化对象 }catch(Exception e){ System.out.println(e) ; } }}
一般开发中 try catch finally ,throw,throws联合使用情况最多
class Math{ public int div(int i,int j) throws Exception{ // 定义除法操作,如果有异常,则交给被调用处处理 System.out.println("***** 计算开始 *****") ; int temp = i / j ; // 计算,但是此处有可能出现异常 System.out.println("***** 计算结束 *****") ; return temp ; }};public class ThrowDemo02{ public static void main(String args[]){ Math m = new Math() ; try{ System.out.println("除法操作:" + m.div(10,0)) ; }catch(Exception e){ System.out.println("异常产生:" + e) ; } }};运行结果:***** 计算开始 *****异常产生:java.lang.ArithmeticException: / by zero
以上计算结束,因为没有异常发生了,直接中断程序操作,所以做以下操作。
class Math{ public int div(int i,int j) throws Exception{ // 定义除法操作,如果有异常,则交给被调用处处理 System.out.println("***** 计算开始 *****") ; int temp = 0 ; // 定义局部变量 try{ temp = i / j ; // 计算,但是此处有可能出现异常 }catch(Exception e){ } System.out.println("***** 计算结束 *****") ; return temp ; }};public class ThisDemo06{ public static void main(String args[]){ Math m = new Math() ; try{ System.out.println("除法操作:" + m.div(10,0)) ; }catch(Exception e){ System.out.println("异常产生:" + e) ; } }};运行结果:***** 计算开始 ********** 计算结束 *****异常产生:java.lang.ArithmeticException: / by zero
这里异常在方法中自动被处理,并没有抛出去,要抛出异常对象,给方法调用处处理,需要使用throw关键字
class Math{ public int div(int i,int j) throws Exception{ // 定义除法操作,如果有异常,则交给被调用处处理 System.out.println("***** 计算开始 *****") ; int temp = 0 ; // 定义局部变量 try{ temp = i / j ; // 计算,但是此处有可能出现异常 }catch(Exception e){ throw e ; //抛出异常。使用中也可用if判断 不用try catch }finally{ // 不管是否有异常,都要执行统一出口 System.out.println("***** 计算结束 *****") ; } return temp ; }};public class ThisDemo06{ public static void main(String args[]){ Math m = new Math() ; try{ System.out.println("除法操作:" + m.div(10,0)) ; }catch(Exception e){ System.out.println("异常产生:" + e) ; } }};
总结
throw与throws关键字联合使用问题。
1)throw:抛出异常。
2)throws:在方法声明处使用,表示此方法不处理异常,而在调用此方法处处理异常。
Exception是必须处理的,而RuntimeException异常是可以不处理的。但是为了保证程序正常运行,最好处理。
如果自定义异常,直接继承异常即可。
关于try catch finally 中的return问题
* 情况1:try{} catch(){}finally{} return;
显然程序按顺序执行。
* 情况2:try{ return; }catch(){} finally{} return;
程序执行try块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,最后执行try中return;
finally块之后的语句return,因为程序在try中已经return所以不再执行。
* 情况3:try{ } catch(){return;} finally{} return;
程序先执行try,如果遇到异常执行catch块,
有异常:则执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,最后执行catch块中return. finally之后也就是4处的代码不再执行。
无异常:执行完try再finally再return.
- 情况4:try{ return; }catch(){} finally{return;}
程序执行try块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,因为finally块中有return所以提前退出。
- 情况5:try{} catch(){return;}finally{return;}
程序执行catch块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,因为finally块中有return所以提前退出。
- 情况6:try{ return;}catch(){return;} finally{return;}
程序执行try块中return之前(包括return语句中的表达式运算)代码;
有异常:执行catch块中return之前(包括return语句中的表达式运算)代码;
则再执行finally块,因为finally块中有return所以提前退出。
无异常:则再执行finally块,因为finally块中有return所以提前退出。
结论:
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值
- Java Exception: MISSING EXCEPTION
- java exception
- java-Exception
- Java exception
- Java exception
- Java Exception
- java Exception
- JAVA Exception
- Java Exception
- Java Exception
- java exception
- java EXception
- java Exception
- Java Exception
- Java Exception
- Java Exception
- Java Exception
- Java Exception
- E
- php封装成类(GD库实现文字、图片水印、压缩图)
- spring cache缓存
- spark参数调优
- (4)多线程服务器与连接池
- java Exception
- python 参数
- 第一天
- GYM 2015 ACM Syrian Collegiate Programming Contest
- OK ,Let's go...
- 3. Git与TortoiseGit基本操作
- yran参数的配置
- CSDN转载
- IE浏览器文件下载转码问题