java异常

想学 面向对象程序设计:来浙江安防职业技术学院找小曹老师

 

1.什么是异常?

生活中的异常:例如感冒发烧,工作时电脑蓝屏、死机等。 程序中的异常:在程序运行的过程中,也会发生这种非正常状况,例如程序运行时磁盘空间不足、网络连接中断、被加载的类不存在等。

程序异常解决方法:针对程序中的非正常情况,Java语言中引入了异常,以异常类的形式对这些非正常情况进行封装,并通过异常处理机制对程序运行时发生的各种问题进行处理。

示例:

 

如图可知能告诉什么错误

java.long.ArithmeticException:错误类型与信息  表示错误类型信息

YC.java:5  : 错误位置  

 

程序在运行过程中,先运行main方法,然后执行到1/0时,程序就会报错,程序先会创建一个错误对象,然后把这个错误对象丢出来,JVM会把错误信息给你打印出来。 总结: 上例中出现的异常是运行时异常(异常是错误) 程序会创建一个错误对象,然后把错误对象丢出来(抛异常) 默认由JVM把错误信息进行捕获,打印出来(捕获异常)

 

但是为什么能编译通过?

 

 

2.异常分类

 

 RuntimeException:运行时异常,一般不手动处理,出问题了再处理。

Error:一般指的是系统级错误。

(异常捕获)

使用try…catch对异常进行捕获

                                                                                     给用户看的信息

当某些代码需要在异常的情况下也输出时,需要用到finally

 

 3.异常捕获处理

private static void testException2() {
        try {
            //1、对可能产生异常的代码进行检视
            //2、如果try代码块的某条语句产生了异常, 就立即跳转到catch子句执行, try代码块后面的代码不再执行
            //3、try代码块可能会有多个受检异常需要预处理, 可以通过多个catch子句分别捕获
        } catch (异常类型1 e1) {
            //捕获异常类型1的异常, 进行处理
            //在开发阶段, 一般的处理方式要么获得异常信息, 要么打印异常栈跟踪信息(e1.printStackTrace())
            //在部署后, 如果有异常, 一般把异常信息打印到日志文件中, 如:logger.error(e1.getMessage());
        } catch (异常类型2 e1) {
            //捕获异常类型2的异常, 进行处理
            //如果捕获的异常类型有继承关系, 应该先捕获子异常再捕获父异常
            //如果没有继承关系, catch子句没有先后顺序
        } finally {
            //不管是否产生了异常, finally子句总是会执行
            //一般情况下, 会在finally子句中释放系统资源
        }
    }

代码示例 

private static void testException2() {
        try {
            //1、对可能产生异常的代码进行检视
            //2、如果try代码块的某条语句产生了异常, 就立即跳转到catch子句执行, try代码块后面的代码不再执行
            //3、try代码块可能会有多个受检异常需要预处理, 可以通过多个catch子句分别捕获
        } catch (异常类型1 e1) {
            //捕获异常类型1的异常, 进行处理
            //在开发阶段, 一般的处理方式要么获得异常信息, 要么打印异常栈跟踪信息(e1.printStackTrace())
            //在部署后, 如果有异常, 一般把异常信息打印到日志文件中, 如:logger.error(e1.getMessage());
        } catch (异常类型2 e1) {
            //捕获异常类型2的异常, 进行处理
            //如果捕获的异常类型有继承关系, 应该先捕获子异常再捕获父异常
            //如果没有继承关系, catch子句没有先后顺序
        } finally {
            //不管是否产生了异常, finally子句总是会执行
            //一般情况下, 会在finally子句中释放系统资源
        }
    }

结果 

 

4.throws关键字

           如果不确定或者并不急于处理异常,怎么办?

       一般在程序开发中,开发者通常会意识到程序可能出现的问题,可以直接通过try...catch对异常进行捕获处理。但有些时候,方法中代码是否会出现异常,开发者并不明确或者并不急于处理,为此,Java允许将这种异常从当前方法中抛出,然后让后续的调用者在使用时再进行异常处理。

throws关键字抛出异常的基本语法格式:

    [修饰符] 返回值类型 方法名([参数类型 参数名1...]) throws 异常类1,异常类2,... {     // 方法体...     }

注:throws关键字需要写在方法声明的后面,并在后面需要声明方法中发生异常的类型

 

 示例:

此段代码是否会有异常?                                             使用throws Exception丢出异常

 

但是Arr()方法开始出现报错?                                       对main方法再次抛出异常

 

那么在写代码时,如何抛出异常? 

说明:通过throw关键字抛出异常后,还需要使用throws关键字或try…catch对异常进行处理。

注意:如果throw抛出的是Error、RuntimeException或它们的子类异常对象,则无需使用throws关键字或try…catch对异常进行处理。

 5.自定义异常:

 

Java中定义了大量的异常类,虽然这些异常类可以描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中特有的异常情况,例如在设计divide()方法时不允许被除数为负数

 

解决方法:Java允许用户自定义异常,但自定义的异常类必须继承自Exception或其子类。

 

举例: 公共澡堂分为男澡堂与女澡堂,若是男性进入女澡堂,或是女性进入男澡堂则会引起巨大异常。

创建Person 类,含姓名(name)与性别(gender) 

创建ZaoTang类,以男澡堂为例 所以此类性别异常需要自己定义

 

创建异常类GenderException 自定义的异常必须继承Exception或者RuntimException

创建构造方法,调用父类构造方法,传入参数

修改方法,抛出异常。

参考public void nan,完成public void nv,即女澡堂的异常

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值