在程序运行过程中,意外发生的情况,背离我们程序本身的意图的表现,都可以理解为异常
异常处理:抛出异常和捕捉异常
try块后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块
Exception对象中printStackTrace()方法可以指定出错的位置,输出位置随机
Exception不能放在第一行
catch:不能出现同类型异常
finally:无论怎样都会执行的代码,如果多个catch异常中出现return,那么只会执行finally里面的return
System.exit(1);终止程序运行
* 通过throws抛出异常时,针对可能出现的多种异常情况,解决方案:
* 1、throws后面接多个异常类型,中间用逗号分离
* 2、在throws后面直接接Exception
throw用来抛出一个异常
例如:throw new IOException();
throw抛出的只能够是可抛出类Throwable或者子类的实例对象
两种方法:
方案二:
非检查异常不一定要处理异常,编译器不会强制要求处理,检查异常必须处理
通过继承异常类,写出自己的异常,在程序中抛出并处理
例如:
package com.imooc.test; public class HotelAgeException extends Exception { public HotelAgeException() { super("18岁以下,80岁以上的住客必须由亲友陪同"); } }
public class TryDemoFour { public static void main(String[] args) { // TODO Auto-generated method stub try { testAge(); } catch (HotelAgeException e) { System.out.println(e.getMessage()); System.out.println("酒店前台工作人员不允许办理入住登记"); }catch(Exception e) { e.printStackTrace(); } } }
throws的使用规则:当子类重写父类抛出异常的方法时,声明的异常必须是父类方法所声明异常的同类或子类
1.处理运行时异常时,采用合理的逻辑去规避异常并同时使用try-catch处理 2.在多重catch块后面,可以加一个catch(Exception e)来处理可能发生的未捕捉到的异常 3.对于不确定的代码,也可以加上try-catch,处理潜在的异常 4.尽量去处理异常,切忌只是简单打印异常 5.具体如何处理异常,要根据不同的业务需求和异常类型来决定 6.尽量添加finally语句去释放被占用的资源