java--异常及异常的处理机制

java异常机制

一:异常的概念:异常是程序运行过程过程出现的各种各样的错误。在java中分为Exception和Error两种;

异常处理机制:异常处理机制就是处理异常的,,就是要告诉开发人员,你的程序出现了不正常的情况,请注意处理。一门成熟的编程语言必须要有完整体系的异常处理机制,异常处理机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,更重要的是可以提高程序的健壮性。 


二:java异常的体系:

可以用一张图来表示:如下图:(ps:图片来源于网络)


下面我分别简单介绍下每一部分的含义:

(1)Throwable:在java语言里,万事万物都看作对象,自然异常也不例外,在java中,一样用Throwable来表示。他封装了异常的各种信息。Throwable又分为两种,Error好人Exception

(2)Error:(错误)是异常的一种形式,这类异常代表着很严重的意外。一般是指java虚拟机相关的问题,例如系统崩溃、虚拟机出错误、动态链接失败等,还有其他的如数组长度过大,输入参数非法等等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误,所以程序不应该捕获这种异常,而应该是程序员自己来调试代码或则输入的数据等等。

(3)Exception这种异常是我们研究的重点,他指的是合理的应用程序出现了人为的错误。可以用代码老捕获之,以提高代码的健壮性。他拥有很多的实现类,代表着每一种不同的异常形式,常见的有:NullPionterException,ClassNotFoundException等等。

(4)java中异常分两类,一类是需要处理的(Checked exceptions), 一类是不需要处理的(Unchecked exceptions)。后者在java异常里用RuntimeEcption来表示。
是否需要处理是指:你程序中抛出的异常客户端是否需要处理,是否有能力处理。 


三:java异常的代码处理:

在java中处理异常要用到一下的关键字,try、catch、finally、throw、throws下面我来逐一打得介绍下:

1.try:它里面放置可能引发异常的代码,即将程序中可能出现问题的代码全部放在try{}语句块里;

格式:try{

可能引发异常的代码

}

         2.catch:用于捕获try语句块里可能抛出的异常,可以有多个catch语句块,格式如下:

catch(XXXException e){调用e的一些方法,显示异常信息等}

异常对象包含的常用方法:(其中前两种方法更为常见)

2.1.      printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。  

2.2.      getMessage();返回该异常的详细描述字符

2.3.       printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定的输出流

2.4.       getStackTrace():返回该异常的跟踪栈信息

         3.finally:既然有了try和catch语句后,为什么还要有finaly呢,当程序在莫一行发生了异常,那么后面的代码就不会再被执行,这是万万不行的。所以在finaly里存放的是一定要执行的代码,一般为:关闭资源等(如关闭流资源,线程池,数据库连接等);这是很重要的,如果不及时关掉的话,系统资源就会枯竭,影响效率。

         4.throw:用于抛出一个实际的异常,可以单独作为语句使用,抛出一个具体的异常对象。

         5.throws:只能用在方法签名中,用于声明该方法可能抛出的异常。和throw很相像,不要记混了。

四::异常处理的方式

  1.       在出现异常的方法内捕获并处理异常,该方法的调用者将不能再次捕获该异常。在出现异常的地方,直接的catch来捕获之,那么别的方法调用就不用在处理了,因为已近处理过了,这个很好理解的。在实际的开发中建议这种处理方法

        2.       该方法签名中声明抛出该异常,将该异常完全交给方法调用者处理。如果方法里面出现了异常,而你又没有将其try和catch掉,那么必须在方法上声明抛出异常,这样交给方法的调用者来处理。也可以继续向上抛出。但在十几开发中不建议这么干。

        3.catch中加throw:检查到异常,在catch块抛出异常,让更上一级处理

     注意:   企业级应用对异常处理很常用的是通过日志来记录异常发生的详细情况,

五:异常的处理原则

1、 宜早不宜迟:能处理就早处理,抛出不去还不能处理的就想法消化掉或者转换为RuntimeException处理。因为对于一个应用系统来说,抛出大量异常是有问题的,应该从程序开发角度尽可能的控制异常发生的可能。
2、 体系化:对于一个应用系统来说,应该有自己的一套异常处理框架,这样当异常发生时,也能得到统一的处理风格,将优雅的异常信息反馈给用户。 使程序代码混乱最小化,捕捉并保留诊断信息,通知合适人员,采用合适的方式结束异常活动。

3,不要过度使用异常处理,滥用会造成:

4   使用异常处理来代替流程控制。

不要使用过于庞大的try块,把大的try块分割成多个可能出现异常的程序段落,并把他们放在单独的try块中,从而分别捕获并处理异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值