一、异常
Java异常处理的五个关键字:try、catch、finally、throw、throws
1.抛出异常throw
/* 1.throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。 2.使用格式:throw new 异常类名(参数); 例:throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出范围"); */
2.声明异常throws
/* 1.声明异常:将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理(稍后讲 解该方式),那么必须通过throws进行声明,让调用者去处理。 2.关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常). 3.声明异常格式:修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ } */ public class Test { public static void main(String[] args) throws ArrayIndexOutOfBoundsException{ int[] arr = {1,2,3}; Test(arr,3); } public static void Test (int[] arr,int index) throws ArrayIndexOutOfBoundsException{ if (index<0 || index>arr.length-1){ throw new ArrayIndexOutOfBoundsException("越界异常"); }else { System.out.println(arr[index]); } } }
3.捕获异常try…catch
/* try{ 编写可能会出现异常的代码 }catch(异常类型 e){ 处理异常的代码 //记录日志/打印异常信息/继续抛出异常 } */
4.finally 代码块(无论是否异常都会执行,与try catch一起使用)
注:如果finally有return语句,永远返回finally中的结果,避免该情况.
public class Main { public static void main(String[] args) { int[] arr = {1,2,3}; try { Test(arr,2); }catch (Exception e){ System.out.println(e); }finally { System.out.println("无论是否异常都执行"); } } public static void Test (int[] arr,int index){ if (index<0 || index>arr.length-1){ throw new ArrayIndexOutOfBoundsException("越界异常"); }else { System.out.println(arr[index]); } } }
4.多异常的捕获
/* 方式1(常用方式:使用一次捕获多次处理方式): try{ 编写可能会出现异常的代码 }catch(异常类型A e){ 当try中出现A类型异常,就用该catch来捕获. 处理异常的代码 //记录日志/打印异常信息/继续抛出异常 }catch(异常类型B e){ 当try中出现B类型异常,就用该catch来捕获. 处理异常的代码 //记录日志/打印异常信息/继续抛出异常 } 方式2:多个异常一次捕获一次处理 :用Exception 方式3:多个异常分别处理。:分别使用try catch */
5.异常打印
public String getMessage() :获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。 public String toString() :获取异常的类型和异常描述信息(不用)。 public void printStackTrace() :打印异常的跟踪栈信息并输出到控制台。 public static void main(String[] args) { int[] arr = {1,2,3}; try { Test(arr,3); }catch (Exception e){ System.out.println(e.toString()); } }
6.子父类异常
1.子类重写父类方法的时候,父类异常什么样,子类异常就什么样,子类方法throws抛出的异常必须等于或者继承与父类、
7.自定义异常类
/* 异常类如何定义: 1. 自定义一个编译期异常: 自定义类 并继承于 java.lang.Exception 。 2. 自定义一个运行时期的异常类:自定义类 并继承于 java.lang.RuntimeException 。 */ 例:自定义异常类 public class customException extends Exception { public customException(){ super(); } public customException(String message){ super(message); } } 调用: public class Main { public static void main(String[] args) { test(); } public static void test(){ try { throw new customException("异常啦"); } catch (customException e) { e.printStackTrace(); } } }