异常
异常
异常的分类
异常的处理
-
异常处理的作用
为了描述程序中不正常的操作
-
异常产生的原因
逻辑的不严谨,出乎意料的操作,不能穷举尽所有的可能
-
处理异常的目的
为了程序能在出现异常时,其他功能不受影响
-
异常的处理方式:
1.JVM处理
JVM处理异常的过程:
1).打印异常的信息 2).显示出异常的位置 3.)停止了程序
2.自己处理
try{}catch{}finally{}
public class Test { public static void main(String[] args) { ATM atm = new ATM(20000); Scanner sc = new Scanner(System.in); // while(true){ for (int i = 0; i < 5; i++) { System.out.println("请输入取钱金额:"); int num = 0; try { num = sc.nextInt(); atm.drawMoney(num);//在调用该方法的时候 不能超过余额 不能输入负数 不能够输入非数字字符 System.out.println("恭喜你,取钱成功!本次取钱金额为:" + num + "剩余金额:" + atm.getCashBalance()); } catch (InputMismatchException input) {//这个异常还需要导包... System.out.println("请输入整数"); sc.next();//利用next的功能 清楚缓存 continue; } catch (Exception e) { System.out.println(e.getMessage()); sc.next(); continue;//本次有异常 不执行本次后面的代码 } System.out.println("是否退出Y/N"); if ("y".equalsIgnoreCase(sc.next()))break; } //} } }
try catch执行流程
-
try{} 中包括可能发生异常的代码
-
当异常发生时,会去匹配 catch中对应的异常
-
异常发生的代码行之后的代码行将不会被执行(try{}中) 没有异常将会全部被执行
-
当catch中有对应类型的异常 则执行 对应catch中的语句
-
若catch中没有对应类型的异常 则会被JVM 接受异常
注意事项
-
catch 中的异常 父类需要放最后 否则catch子类将无意义
-
一旦异常被catch 将不会影响 try catch之后的代码 执行
throw 和 throws的
该方式是自己当前不做处理 谁调用我 谁处理 没人处理交给JVM处理
throw: 利用throw关键字 在方法体中 产生一个异常
throws:在方法声明的后面抛出异常,该异常有可能存在/不存在
自定义异常
通过翻看源码可知:"所有"异常的都是继承自Trowable且没有重写父类方法
定义异常的意义:见名知意 . 异常发生时 通过异常类的信息快速锁定是发生了什么异常
自定义异常 就是让自己定义的类继承 Exception 或 RuntimeException 重写构造 可以根据需求重写方法
-