异常(异常的处理和用法)

异常情况是指在程序运行时,可能由于外部系统的条件变更(与我们一厢情愿所设想的不一致),而导致程序可能出错的情况.

Throwable类的异常体系:

       Throwable类是所有错误和异常的父类

     -错误类(Error类):它表示Java程序运行时产生的系统内部错误或资源耗尽的错误,依靠修改程序本身是不能恢复执行.   例如:运行一个不存在的类就会产生错误.

     -异常类(Exception):它表示程序本身可以处理的错误,在Exception类的众多子类中有一个特殊的子类--RuntimeException类,该类及其子类用于表示运行时异常,Exception类的其他子类都用于表示编译时异常.

一、编译时异常

在Exception类中,除了RuntimeException类以外,其他的子类都是编译时异常(Java编译器会对编译时异常进行检查,如果出现这类异常就必须对其进行处理,否则程序无法通过编译)

处理编译时异常有两种方式:

1.使用try....catch语句对异常进行捕获处理

2.使用throws关键字申明抛出异常,由调用者对异常进行处理

二、运行时异常

RuntimeException类及其子类都是运行时异常(运行时异常是指在程序运行时由Java虚拟机自动进行捕获处理的,Java编译器不会对异常进行检查,程序能编译通过,只是运行时可能会报错)

常见的运行时异常类型(Exception类的子类):

1.InputMismatchException:输入类型不匹配

2.ArithmeticException : 算数异常

3.NullPointerException:空指针异常

4.ArrayIndexOutofBoundsException:数组下标越界异常

5.ClassCastException:类转换异常

6.NumberFormatException:数字格式化异常

运行时异常一般是由程序中的逻辑错误引起的,在程序运行时无法恢复.

三、异常处理及用法

处理异常的五个关键字:

try :放置可能产生的代码块

catch :后面对应异常类型和一个代码块,该代码块用于处理这种类型的异常

finally:主要用于回收在try代码块里打开的物理资源,[finally代码块总是被执行]

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

throws:用在方法签名中,用于声明该方法可能抛出的异常.

1.try......catch....finally.....语句

Java提供了该语句用于捕获并处理异常,使异常发生后后面的程序代码能正常执行

                   try(

                         代码块    //防止可能发生异常的Java语句

                        )catch(Exception e){

                          代码块    //写针对异常进行处理的代码

                            }

当try代码块中的程序发生异常时,系统会将异常的信息封装成一个异常对象,并将这个对象传递给catch代码块进行处理.catch代码块需要一个参数指明它能够接受的异常类型,这个参数必须时Exception类或其子类

注意

1.try代码块是必须的

2.catch代码块可以由多个,但捕获父类异常的catch代码块必须位于捕获子类异常的catch代码块后面

3.finally代码块不能单独出现,无论程序是否发生异常finally代码块都会执行.。

4.如果程序发生异常,但是异常没有被捕获,在执行完finally代码块中的代码之后,程序就会中断执行

运行结果:

                                     

在catch代码块中增加了一个return语句,用于结束当前方法,这样当catch代码块执行完之后,finally代码块之后的代码就不会执行了,而finally代码块仍会执行,不受return语句的影响。

注意:如果在try....catch语句中执行了System.exit(( ))语句,那么finally代码块不会再执行。Sysrem.exit( ())表示退出当前的Java虚拟机,Java虚拟机停止了,任何代码都不会再执行了.

四、抛出异常

在编程过程中,有些异常暂时不需要处理,此时可以将异常抛出,让该类的调用者处理。Java提供了throws关键字和throw关键字用于抛出异常。

1.throws关键字

Java允许在方法的后面使用throws关键字声明该方法有可能发生的异常,这样调用者在调用该方法时,就明确地知道该方法有异常,并且在程序中对异常进行处理,否则编译无法通过。

语法格式:修饰符 返回值类型 方法名(参数1,参数2,...)throws 异常类1,异常类2,...{

                                方法体    }

throws关键字需要写在方法声明地后面,throws后面还需要声明方法中发生异常地类型。

例如:

在divide( )方法中声明抛出的异常,在main方法中调用divide方法并使用try...catch语句对divide方法中存在的异常进行处理(如果不使用即使不会出现0的异常运行时依然会出现错误)

2.throw关键字

throw关键字用于方法体内,抛出的是一个异常实例,并且每次只能抛出一个异常实例

语法格式:    throw ExceptionInstance;

在方法中,通过throw关键字抛出异常后,还需要使用throws关键字或者try...catch语句对异常进行处理。如果throw抛出的是Error、RuntimeExce或它们的子类的异常对象,则无须使用throws关键字或try...catch语句对异常进行处理.

使用throw关键字抛出异常,通常有如下两种情况

1.当throw关键字抛出的是编译时异常,有两种处理方式 (1)在try代码块里使用throw关键字抛出异常,通过try代码块捕获该异常 (2)在一个有throws声明的方法中使用throw关键字抛出异常,把异常交给该方法的调用者进行处理

2.当throw关键字抛出的异常是运行时异常时,程序既可以使用try...catch语句捕获并处理该异常,也可以完全不理会,把该异常交给方法的调用者进行处理

例如:

代码中定义了printAge()方法,在该方法中对输入的年龄进行逻辑判断.当数值小于或等于0时,使用throw关键字抛出异常,并指定异常提示信息,同时在方法后继续使用throws关键字处理抛出的异常.在第15行代码中使用try...catch语句对printAge()方法抛出的异常进行捕获处理,并打印捕获的异常提示信息

输入26,程序正常运行

输入-1,输出结果如下

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值