1.异常的概述:
1.1、异常:
指的是程序在执行过程中,出现的非正常的情况,最终导致JVM的非正常停止
1.2、注意:
1.在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象
2.java处理异常的方式是 中断处理(直接终止程序运行,把异常信息打印到控制台)
1.3、异常的继承体系:
异常的根类是 java.lang.Throwable:所有错误或异常的父类
- java.lang.Error:表示错误,程序员无法通过代码进行纠正,使得程序继续执行,只能实现避免
- java.lang.Exception:表示异常,程序员可以通过代码进行纠正,使得程序继续执行
1.4Exception异常的分类:
- 编译异常:在编译期间出现的异常,如果编译期间不处理,那么就无法通过编译,程序也就无法执行,(如日期格式化异常,Parse
- 运行异常:在运行期间出现的异常,如果编译期间不处理,可以通过编译,并且程序可以执行,只不过执行的时候会报异常(如数学异常)
注:--> RuntimeException机器子类都是运行时异常
2.异常的产生过程解析:
3.throw关键:
3.1、作用:
throw用在方法内,用来抛出一个异常对象,将这个异常对象传递给调用处,并结束当前方法的执行
3.2、格式:
throw 异常对象
3.3、代码演示:
public class Tests {
public static void main(String[] args) {
int [] arr = {11,22,33,44,55};
method(arr,4);
}
public static void method(int[] arr , int index){
if (index <0 || index >arr.length-1){
// 如果进入到这里的话,表示index索引值不在数组索引范围内
// 这里就不能写代码,编译的时候就会发现这里出现了异常,类似于return
throw new ArrayIndexOutOfBoundsException("数组越界异常");
} else {
int num = arr[index];
System.out.println(num);
}
}
}
4.声明处理异常:
4.1、概述:
使用throws关键字将问题标识出来,标识当前方法不处理异常,而是提醒给调用者,让调用者来处理...最终会到虚拟机,虚拟机会直接结束程序,打印异常信息
4.2、格式:
权限修饰符 返回值类型 方法名称(形参) throws 异常类名称1,异常类名称2,...{ // 可以抛出一个异常,也可以抛出多个异常 }
4.3、注意:
声明处理异常,处理后,如果程序运行的时候一旦出问题,程序还是无法继续往下执行,直接抛出异常给调用者到JVM或者被调用者处理
4.4、使用场景:
声明处理异常一般处理运行的时候不会出现异常的编译异常
4.5、目的:
为了让程序可以继续执行下去
4.6、代码演示:
public static void main(String[] args) throws ParseException {
System.out.println("程序开始");
//method1();
// 使用场景:声明处理异常一般处理 【运行的时候不会出现异常】 的编译异常
// --> 总之,throws我们不会主动取写,当代码出现编译错误,代码下边会有红色波浪线,会提示我们抛出异常,idea帮我们完成
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date parse = sdf.parse("1900-01-01");
System.out.println(parse);
// 一般用来处理编译异常,让程序通过编译,但是程序运行的时候仍然可能出现异常,程序还是无法正常的继续执行下去
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date parse1 = sdf1.parse("1900年01月01");
System.out.println(parse1);
System.out.println("程序结束");
}
// throws 关键字,可以把异常标识出来,表示当前方法不处理异常,而是提醒调用者来处理异常
public static void method1() throws ParseException {
// 以下代码报错,这属于编译异常
throw new ParseException("解析异常",1);
}
5.捕获异常处理:
5.1、捕获处理异常:
try...catch
5.2、 概述:
对异常进行捕获处理,处理完后程序可以正常向下执行
5.3、格式
try{
编写可能会出现的异常代码
} catch(Exception e) {
如果以上代码出现异常,会来到这里,处理异常代码(日志的打印)
}
5.4、执行步骤:
1.首先执行try中的代码,如果try中的代码出现了异常,那么就直接执行catch里面的代码,执行完毕后,程序继续正常向下执行
2.如果try中的代码没有出现异常,那么就不会执行catch里面的代码,而是继续向下执行
public static void main(String[] args) {
method1();
// Ctrl + Alt + T : try...catch快捷键
try {
System.out.println(1/1); // 不会出现
} catch (Exception e) {
System.out.println("出现了数学运算异常");
}
System.out.println("===============================");
try {
System.out.println(1/0);
} catch (Exception e) {
System.out.println("出现了数学运算异常");
}
}
// 捕获处理编译异常:Alt + Enter
public static void method1(){
try {
throw new ParseException("编译异常",1);
} catch (ParseException e) {
System.out.println("出现了异常");
}
System.out.println("method1 方法结束...");
}