一、异常类型区别
Error:系统级错误 ,不可恢复
Exception:叫做异常,代表程序可能出现的问题。
我们通常会用Exception以及他的子类来封装程序出现的问题。
运行时异常: RuntimeException及其子类,编译阶段不会出现异常提醒。
运行时出现的异常(如:数组索引越界异常)
编译时异常:编译阶段就会出现异常提醒的。(如:日期解析异常)
二、异常处理方式
1.JVM默认的处理方式
1)把异常的名称,异常原因及异常出现的位置等信息输出在了控制台
2)程序停止执行,异常下面的代码不会再执行了
示例:
System.out.println(2/0);//算术异常ArithmeticException
输出形式:
Exception in thread "main"
java.lang.ArithmeticException
2.自己处理(捕获异常)
格式:
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}
异常处理执行流程:
1)try 块正常执行:
- 如果 try 中没有遇到问题,会执行完 try 中所有代码
- 不会执行任何 catch 块中的代码
2)try 块中出现异常:
- 立即跳转到对应的 catch 块
- try 中剩余的代码不会执行
- 如果没有匹配的 catch 块,异常会交给 JVM 处理(程序终止)
3)多个异常处理:
- 可以编写多个 catch 块处理不同类型的异常
- 异常不会同时发生,每次只会处理一个异常
- 父类异常需要写在子类异常的后面(否则会编译错误)
三、Throwable
方法名称 | 说明 |
public String getMessage() | 返回此throwable的详细消息字符串 |
public String toString() | 返回其可抛出的简单描述 |
public void printStackTrace() | 把异常的错误信息输出在控制台 |
int[] arr = {(1,2,3,4,5,6};
try{
System.out.println(arr[10]);
} catch (ArrayIndexOutOfBoundsException e) {
String message= e.getMessage();
System.out.println(message); //Index 10 out of bounds for length 6
String str= e.toString();
System.out.println(str); //java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 6
e.printStackTrace();
}
四、抛出处理
throws:
public void 方法()throws 异常类名1,异常类名2...{
}
throw :
public void 方法(){
throw new NullPointerExcertion();
}
说明:
编译时异常:必须要写
运行时异常:可以不写
int[] arr= null;
int max = 0;
try {
max= getMax(arr);
} catch (NullPointerException e) {
System.out.println("空指针异常");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("索引越界异常");
System.out.println(max);
}
public static int getMax(int[] arr)/* throws
NullPointerException,ArrayIndexOutOfBoundsException*/
{if(arr == null){
//手动创建一个异常对象,并把这个异常交给方法的调用者处理
//此时方法就会结束,下面的代码不会再执行了
throw new NullPointerException();
if(arr.length == 0){
//手动创建一个异常对象,并把这个异常交给方法的调用者处理
//此时方法就会结束,下面的代码不会再执行了
throw new ArrayIndexOutOfBoundsException();
}
版权声明:本文由Hygge-star原创,转载需注明出处。