一、异常继承关系
二、异常处理
a、打印异常信息到控制台(3种方式)
b、将异常信息保存到一个文件,方便查看
c、抛出异常,谁调用谁处理。在方法上使用throws抛出异常类
语法结构:
try { int num = 1/0;//可能出现异常的代码 } catch (Exception e) { //这里写一些处理异常的代码 //打印异常信息的3种方式 System.out.println(e.getMessage());//打印原因 System.out.println(e.toString());//打印异常类型和原因 e.printStackTrace();//打印日志,还能定位,推荐 } finally { //这里最好不写业务代码,一般写:关闭流和释放资源的代码 //不管是否有异常,这里的代码都会执行 }
注意:1、多个catch中的异常类型,子类放在前面,父类在后面
2、try中一旦匹配到异常时,执行完catch中代码后,整个结构结束,但finally中的代码永远都会执行。
3、抛出运行时异常时,不会提示try-catch
三、自定义异常
步骤:可以查看一些异常源代码,模仿
1、自定义异常类,继承Exception,快捷生成无参构造器和一个带String参数的构造器。
2、在业务方法中,可能出现异常的地方,创建该异常对象,并向外抛出。
3、调用该方法时,处理该异常。
/** * 自定义异常 * */ public class MyException extends Exception { private static final long serialVersionUID = 4408141355562049852L; public MyException() { super(); } public MyException(String message) { super(message); } }
/** * 测试自定义异常 */ public class MyExceptionTest{ public static void main(String[] args) { try { regist("tom");//cn.itsource.mycode.MyException: 名字重复! } catch (MyException e) { e.printStackTrace(); } } /** * 用户注册的方法 */ public static void regist(String name) throws MyException { String[] names = {"tom","jerry","jack"}; for(String str:names){ if(str.equals(name)){ throw new MyException("名字重复!");//如果注册的名字已经存在,则抛出异常。 } } System.out.println("注册成功!"); } }