关于java中Exception的一些理解

原创 2017年01月03日 23:10:48

Exception中关键字

throws:

在方法的声明时使用,作用是声明该方法 可能 有该种异常,不一定会有,是一种倾向,一种预防措施,保证代码的健壮性。让你的调用者知道,我这个方法可能会抛出何种异常,让我的调用者知道并且要做出一定的处理。因此就要求其调用者做出一定“防范措施”来进行捕获可能会抛出的异常并解决或者进行继续抛出(不推荐)。例如进行try catch解决。
public void method1() throws XXXException,YYYException {//方法体}
//声名多个异常时异常之间用逗号隔开
public void method2(){
//调用method1,因为method1声明了他可能用两种异常,所以在这就要做出防范措施,也就是捕获处理
try{method1();}
catch(XXXException e1){
//处理方式
}
catch(YYYException e2){
//处理方式
}
}

当然你也可以不用在这进行catch处理,而是进行继续抛出,

public void method2()throws XXXException,YYYException {method1();}
这样之后异常的处理就交给了method2()的调用者。。类似的进行向上层层抛出。当然无论怎么抛出,最后都要有一个调用者解决,最终的调用者是jvm,也就是说如果一直没解决,那么就只能有jvm来解决,jvm的解决方法很简单,就是吧你的异常信息打印出来..也就是我们常见的红字

throw

在该方法内部使用,此时就是真的抛出了一个异常,作用就是抛出异常对象给调用者,自己不处理。如果调用者也不处理,那么就会层层抛出,直到有调用者处理或者最终抛给虚拟机,虚拟机的处理方式就是打印你的异常信息,也就是我们经常看到的红字。。但是一般运行时异常都不会选择抛出,而是在方法中直接catch处理了。。
public int method1(int[] a ,int i) {
if(i>a.length())
throw new ArrayIndexOutOfBoundsException("自定义信息");
else
return a[i];
}

如果i>a.length()了,那么就会抛出一个下标越界的异常对象,方法本身不作处理。仅仅把异常抛出。当然这种方式我们并不推荐,这是一种消极的处理方式。

RuntimeException(运行时异常)

出现这种异常编译可以通过,但是运行时会报错,例如上面的数组下表越界异常,对于这种运行时异常,我们一般不采用throws进行声明,而是进行自定义抛出(用throw关键字)方式或者虚拟机默认的抛出方式抛出(不做任何处理),然后在和控制台答应异常信息来让程序员进行修改。当然也可以进行catch捕获然后进行处理,并进行日志保存。。具体要用那种方式要根据程序的要求来灵活选择,是要在程序中依靠程序自己处理还是要由控制台打印错误信息,由程序的具体功能来决定。

非运行时异常

除了runtimeException及其子类以外其他所有Exception的子类都是非运行时异常
这种异常又被称为编译时异常,必须声明或者捕获,不然编译不通过。也就是说这些异常是必须要在方法声明中throws Exception,而且所有此方法的调用者如果不写try catch的话就要一直throws Exception,一直到main方法为止。如果不throws,就一定要try catch,如果一个应该抛出非RuntimeExcetion的方法既没有throws Exception也没有try catch,一定会报错的,编译无法通过。
另外异常处理的原则是尽可能早的catch异常,正常的程序不应该写throws Exception。

版权声明:本文为博主原创文章,未经博主允许不得转载。

java异常深入理解和异常处理总结

异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出...
  • zuoluoboy
  • zuoluoboy
  • 2013年10月25日 12:51
  • 1709

<<深入理解Flask>>中遇到的那些坑

这篇文章的主要目的是分享学习>这本书中遇到的坑,可以使遇到相同问题的同学少走弯路。大家有遇到或解决过相关问题的,也欢迎分享出来。 坑一: 在把博客从sqlite重构到mongodb时,在登陆成功后...
  • happyAnger6
  • happyAnger6
  • 2017年02月05日 12:16
  • 2251

Java基础(八)——异常、包

------- android培训、java培训、期待与您交流! ---------- 1, 异常的概述:         异常机制已经成为判断一门编程语言是否成熟的标准,除了传统像C语言没有...
  • lee_tianya
  • lee_tianya
  • 2013年03月27日 22:51
  • 1627

Java异常之throws和throw 以及异常使用注意的原则

一.使用throws抛出异常如果在当前方法不知道该如何处理该异常时,则可以使用throws对异常进行抛出给调用者处理或者交给JVM。JVM对异常的处理方式是:打印异常的跟踪栈信息并终止程序运行。 t...
  • sdr_zd
  • sdr_zd
  • 2017年07月21日 21:20
  • 624

java之异常处理

【为什么要有异常机制?】 下面是IBM的Java technology课程中,引出异常处理的例子: import java.io.*; public class ExceptionTest { pu...
  • liminwang0311
  • liminwang0311
  • 2013年07月29日 16:23
  • 3578

深入理解java异常处理机制

try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训” 告诉我,这个东西可不是想象中的那么简单、听话。不信?那你...
  • xyw591238
  • xyw591238
  • 2016年07月12日 09:12
  • 1244

JAVA API 异常处理

示例一: /** * java中的异常处理机制 * @author Administrator * */ public class ExceptionDemo1 { public stat...
  • ArmandXu
  • ArmandXu
  • 2015年04月21日 20:15
  • 430

黑马程序员—Java面向对象(异常处理机制、package包、import导入包、jar包)

------- android培训、java培训、期待与您交流! ----------
  • caihongxiuyujay
  • caihongxiuyujay
  • 2014年04月13日 16:08
  • 1130

java中checked和unchecked 异常处理的例子

有两种类型的异常:一种是checked异常一种是unchecked异常,在这篇文章中我们将利用实例来学习这两种异常,checked的异常和unchecked异常最大的区别就是checked去唱是在编译...
  • maoyeqiu
  • maoyeqiu
  • 2015年10月22日 16:28
  • 1666

Java中接口的清晰+形象理解

大家都知道,在Java应用开发中,要“面向接口编程”,那么,对于接口的清晰理解尤为重要,尤其是对设计模式的学习。 在网上搜索了很多关于接口的定义,但是认识接口,还得从多个方面去理解,尤其是对接口的形象...
  • ltx06
  • ltx06
  • 2015年10月04日 19:45
  • 940
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于java中Exception的一些理解
举报原因:
原因补充:

(最多只允许输入30个字)