一、异常
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();
}
}
}