第八章总结

例8.1在项目由剑建米 Banll 在主方法中定义int型变量,将0作为除数赋值给该变量

 

 8.2 异常的分类
8.2 异常的分类
Java类库的每个包中都定义了异常类,所有这些类都是Throwable类的子类。Throwable类派生了两个子类,分别是Error类和Exception类,其中,Error类及其子类用来描述Java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重。Exception类称为非致命性类,可以通过捕捉处理使程序继续执行。Exception 类又可以根据错误发生的原因分为运行时异常和非运行时异常。
8.2.1 系统错误——Error
Java运行系统中的内部错误,该类定义了常规环境下不的程序捕获的异常,比如OutOfMemoryError、ThreadDeath等,这些错误发生时,Java虚拟机(一般会选择线程终止。
例加 下面的代码在控制台中输出“梦想照亮现实”这句话,代码如下

 

8.2.2 异常——Exception
Exception是程序本身可以处理的异常,这种异常主要分为运行时异常和非运行时异常,程序中应当尽可能去处理这些异常,本节将分别对这两种异常进行讲解。

1.运行时异常
运行时异常是程序运行过程中产生的异常,它是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
例8.2 在项目中创建类Thundering,在主方法中实现将字符串转换为int型。运行程序,系统会报出异常提示。

 

2.非运行时异常
非运行时异常是RuntimeException类及其子类异常以外的异常。从程序语法角度讲,这类异常是必须进行处理的异常,如果不处理,程序就不能编译通过,如1OExceprion、SQLExcepion以及用自定义的异常等。

例 8.3 有一个名为“com.mrsoft”的足球队,现有队员为19名,现在要通过Clasfore("com.mrsoft.Coach")这条语句在Coach类中寻找球队的教练,

 

 

 

8.3捕捉处理异常 

 

 

 

 

例8.4 在项目中创建类 Take,在主方法中使用try...catch代码块将可能出现的异常语句进行异常处理

 

 

例8.5 修改例8.4,将程序结束的提示信息放到finally代码块中

 

 

 例8.6 在项目中创建类Shoot,在该类中创建方法pop,在该方法中抛出 NegativeArraySt
试图创建大小为负的数组)异常,在主方法中调用该方法,并实现异常处理。

 

 

 

throws关键字和throw关键字的区别如下。
(1)throws用在方法声明后面,表示抛出异常,由方法的调用者处理,而throw用在方法体内,用来制造一个异常,由方法体内的语句处理。
(2)throws是声明这个方法会抛出这种类型的异常,以便使它的调用者知道要捕获这个异常,而throw是直接抛出一个异常实例。
(3)throws表示出现异常的一种可能性,并不一定会发生这些异常,如果使用throw,就一定会产生某种异常。

8.5自定义异常
Java中可以通过继承Exception类自定义异常类。
在程序中使用自定义异常类,大体可分为以下几个步骤。
(1)创建自定义异常类。
(2)在方法中通过throw关键字抛出异常对象。
(3)如果在当前抛出异常的方法中处理异常,可以使用try...catch代码块捕获并处理,否则,在方法的声明处通过throws关键字指明要抛给方法调用者的异常,继续进行下一步操作。
(4)在出现异常方法的调用者中捕获并处理异常。
有了自定义异常,再来解决年龄为负数的异常问题。

例8.8首先在项目中创建一个自定义异常类Exception,该类继承Exception

 

 

8.6 异常的使用原则
Java异常强制用户去考虑程序的强健性和安全性。异常处理不应该用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应的处理。编写代码处理

异常时,可遵循以下原则。

异常时,可遵循以下原则。
(1)不要过度使用异常。虽然通过异常可以增强程序的健壮性,但如果使用过多不必要的异常处理,可能会影响程序的执行效率。
(2)不要使用过于庞大的try..catch块.在一个try块中放置大量的代码,这种写法看上去“很简单”,但是由于try块中的代码过于庞大,业务过于复杂,会造成try块中出现异常的可能性大大增加,从而导致分析异常原因的难度也大大增加。
(3)避免使用catch(Exception e)。因为如果所有异常都采用相同的处理方式,将导致无法对不同异常分情况处理;另外,这种捕获方式可能将程序中的全部错误、异常捕获到,这时如果出现一些“关键”异常,可能会被“悄悄地”忽略掉。
(4)不要忽略捕捉到的异常,遇到异常一定要及时处理。
(5)如果父类抛出多个异常,则覆盖方法必须抛出相同的异常或其异常的子类,不能抛出新异常。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值