异常

异常

学习目标

  • 异常概述
  • 异常的捕获
  • 异常的声明
  • 异常的抛出
  • 补充
  • 总结
  • 习题

本章重点

try-catch基本格式

常见异常和对应的错误处理

异常概述:

  • 程序异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
    Java编程语言使用异常处理机制为程序提供了错误处理的能力

异常的捕获:

  • try-catch
  • try-catch-finally

特点:不管有没有发生异常都会执行finally,除非System.exit(1)

多重catch

  • 特点:捕获代码块中不同的异常
  • 引发多种类型的异常排列catch 语句的顺序:
    1. 先子类后父类
    2. 发生异常时按顺序逐个匹配
    3. 只执行第一个与异常类型匹配的catch语句

try-catch捕获的三种情况:

  1. 程序正常运行
  2. 程序发生异常,catch语句能匹配到类型,异常得到处理,还可以程序正常执行
  3. 程序发生异常,catch语句中异常类型未能匹配到,程序终止运行

分析异常

e.printStackTrace(),可根据打出来的堆栈信息分析
e.getMessage();可根据事先设置好的异常信息分析。

常见的异常类型

  • Exception 异常层次结构的根类
  • ArithmeticException 算术错误情形,如以零作除数
  • ArrayIndexOutOfBoundsException 数组小于或大于实际的数组大小
  • NullPointerException 尝试访问null对象成员
  • ClassNotFoundException 不能加载所需的类(常见于多态中向下转型)
  • InputMismatchException 欲得到的数据类型与实际输入的类型不匹配
  • IllegalArgumentException 方法接收到非法参数

异常的声明

  • 在一个方法执行的时候出现异常,方法本身不想处理,只想通知调用者,由调用者处理,此时可在方法上面声明一个异常

语法规则:

在方法头中使用throws关键字声明异常
例如:public void method()throws Exception{}

异常的抛出

除了系统自动抛出异常外,有些问题需要程序员自行抛出异常
- 语法规则:在方法体中使用throw抛出异常
例如:public void method()throws Exception{throw new Exception()}

异常分类(详细见异常继承图)

补充:

异常类别划分

  • 运行时异常:一种Exception的特殊子类,他是RuntimeException或者RuntimeException的子类
    **特点:调用声明有【RuntimeException】的方法,运行时异常不要求必须捕获或者声明
    抛出**
  • Checked异常:非 RuntimeException或者子类
调用声明有【Checked异常】的方法,Checked异常必须捕获或者声明抛出

注意:方法中声明一个RuntimeException异常,调用者可捕获可不捕获异常,声明一个checked异常,调用者必须捕获异常

继承下的异常声明

  • 理论支撑:方法重写(一致)
规则:
  • 父类或者接口的方法【没有声明任何类型异常】,那么子类只允许
a)声明任何RuntimeException(RE的子类)
b)不声明任何Checked异常
  • 父类或者接口的方法声明【运行时异常】,可认为他没声明异常,那么子类只允许
a)声明任何RuntimeException(RE的子类)
b)不声明任何Checked异常
  • 父类或者接口的方法声明【Checked异常】,那么子类只允许
a)声明任何RuntimeException(RE的子类)
b)不声明任何Checked异常
c)父类的异常一样
d)父类异常的子类(变窄了)

总结:

  1. try-catch-finally语句注意点
  2. 多重catch语句注意点
  3. throws和throw的区别

习题:

  1. 写一个登录(login)的方法,方法中有两个String类型形参,分别是账户名密码,校验用
    户账户名密码
    ,账户名不是”zhangshan”或者密码不是”123456”,则该方法向外抛出一个异常,异常信息
    提示文字是“输入账户或者密码不正确”,
    在main方法中从控制台接收用户输入的账户名和密码,调用login方法,捕获并且处理异常,
    捕获用login打印出来。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值