异常
1 概述
异常是一些用来封装错误信息的对象
它由异常的类型、提示信息、报错的行号提示三部分组成
2 异常的继承结构
3 异常的处理方式
当程序中遇到了异常,通常有两种处理方式:捕获或者向上抛出
当一个方法抛出异常,调用位置可以不做处理继续向上抛出,也可以捕获处理异常
大家可以结合生活中的例子:如果工作中遇到了问题,我们可以选择自己处理(捕获),或者交给上级处理(抛出)
捕获方式:
抛出方式:
在可能会会发生异常的方法上添加代码:
throws 异常类型
例如:public static void main(String[] args) throws Exception{ }
4 练习:异常测试
创建包: cn.tedu.exception
创建类: ExceptionDemo.java
package cn.tedu.exception;
import java.util.InputMismatchException;
import java.util.Scanner;
/**本类用于测试异常的入门案例*/
/**
* 总结8:
* 如果方法抛出异常,那么谁调用,谁需要解决(继续抛出/捕获解决)
* 所以main()调用了method2(),如果main()不捕获处理,就也需要抛出异常
* 注意:我们一般在main()调用之前捕获解决异常,而不是把问题抛给main()
* 因为没人解决了
* */
public class ExceptionDemo {
//1.创建入口函数main()
public static void main(String[] args) throws Exception {
//method();//调用method()--暴露异常
//method1();//调用method1()--异常捕获
method2();//调用method2()--异常抛出
}
//4.创建method2(),练习BUG解决方案二
/**抛出的语法规则:
* 在可能会出现异常的方法上加 throws 异常类型
* 在抛出时,也可以使用多态,不管是发生了什么异常,通通被Exception抛出去
* */
// public static void method2() throws InputMismatchException
// ,ArithmeticException,Exception{
public static void method2() throws Exception{
//4.复写刚刚可能会发生异常的代码
System.out.println("请输入您要计算的第一个数:");
int a = new Scanner(System.in).nextInt();
System.out.println("请输入您要计算的第二个数:");
int b = new Scanner(System.in).nextInt();
System.out.println( a / b );
}
/**捕获的语法规则:
* try{
* 可能会出现异常的代码
* }catch(异常类型 异常参数名){
* 如果捕获到异常的对应解决方案
* }
* */
//3.创建method1(),练习BUG解决方案一
public static void method1() {
//11:15继续~,代码已上传至code网站
//3.1按照学习的捕获语法编写try-catch结构
/**总结4:try中放着的是可能会出现异常的代码*/
try {
//3.2复写刚刚可能会发生异常的代码
System.out.println("请输入您要计算的第一个数:");
int a = new Scanner(System.in).nextInt();
System.out.println("请输入您要计算的第二个数:");
int b = new Scanner(System.in).nextInt();
System.out.println( a / b );
/**总结5:如果发生异常被捕获,就执行此处被匹配到的解决方案*/
}catch(InputMismatchException e) {
//3.3异常捕获1
System.out.println("输入的类型不正确,请输入正确的整数类型");
/**总结6:由于程序中可能出现多种异常,所以catch可以配合多次使用*/
}catch(ArithmeticException e) {
//3.4异常捕获2
System.out.println("除数不能为0!!");
/**总结7:如果还有上述两种异常之外的异常,用Exception匹配捕获
* 这个就是多态最为经典的一种用法,我们不关心子类的子类
* 只要是可解决的异常,都是Exception的子类,多态会把这些异常当做父类型来看
* 进而捕获,使用通用异常解决方案来解决
* */
}catch(Exception e) {
System.out.println("请输入正确的整数~");
}
}
//2.创建method()用来人为的暴露异常
public static void method() {
//2.1提示并接收用户输入的两个整数
System.out.println("请输入您要计算的第一个数:");
int a = new Scanner(System.in).nextInt();
System.out.println("请输入您要计算的第二个数:");
int b = new Scanner(System.in).nextInt();
//2.2 输出除法运算的结果
//输入8和2.2,报错:InputMismatchException[输入不匹配异常]
//输入9和0,报错:ArithmeticException: / by zero[算数异常,除数不能为0]
System.out.println( a / b );
/**1.不要害怕BUG,真正的勇士敢于直面自己写的BUG*/
/**2.学会看报错信息的错误提示,确定自己错误的方向*/
/**3.学会看报错信息的行号提示,哪里报错点哪里
* 源码不会错,要看的是自己写的代码*/
}
}
快捷键小补充:
Ctrl + Shift + T :在eclipse当中查找你想找到的类
Ctrl + T : 查看类的继承结构
Ctrl + O : 查看类的结构信息(大纲)
转载:https://blog.csdn.net/weixin_43884234/article/details/116639280
查看评论