「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」。
茫茫人海千千万万,感谢这一秒你看到这里。希望我的文章对你的有所帮助!
愿你在未来的日子,保持热爱,奔赴山海!
题记:昨天我们已经了解部分的异常的处理机制,接下来就让我们继续一起看下在Java中其他形式去处理异常,Java的异常处理机制!
😮异常的处理机制(重点)
在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。
🐉 捕获异常try 、finally 、catch
这三个关键字主要有下面几种组合方式try-catch 、try-finally、try-catch-finally。
注意:catch语句可以有一个或者多个或者没有,finally至多有一个,try必要有。
那这里你会问有没有单独try模块出现,那我想问下你,try是用来监听是否有异常,那如果发生了异常,谁来捕获呢?所以没有try单独出现。而且编译不能通过。
所以跟try模块一样,例如catch,finally也不能单独使用出现
- 程序通常在运行之前不报错,但是运行后可能会出现某些未知的错误,不想异常出现导致程序终止,或者不想直接抛出到上一级,那么就需要通过
try-catch等形式进行异常捕获,之后根据不同的异常情况来进行相应的处理。 - 捕获异常:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理。
捕获异常语法如下:
🔴今天我们先讲解 try-catch 形式:
try{
编写可能会出现异常的代码
}catch(异常类型 e){
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}
复制代码
例如:
public class TryCatchDemo {
public static void main(String[] args) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
//当产生异常时,必须有处理方式。要么捕获,要么声明。
Date date = simpleDateFormat.parse("2020-10-06");
} catch (ParseException e) {// 括号中需要定义什么呢?
//try中抛出的是什么异常,在括号中就定义什么异常类型
e.printStackTrace();//记录日志/打印异常信息/继续抛出异常
}
/*
public Date parse(String source) throws ParseException{}
//parse抛出了ParseException异常
public class ParseException extends Exception {}
*/
}
}
复制代码
如何获取异常信息:
Throwable类中定义了一些查看方法:
public String getMessage():获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。public String toString():获取异常的类型和异常描述信息。public void printStackTrace():打印异常的跟踪栈信息并输出到控制台。- 具体我们可以来看下:
public class TryCathDemo2 {
public static void main(String[] args) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
//当产生异常时,必须有处理方式。要么捕获,要么声明。
//演示下获取异常信息,修改了格式。
Date date = simpleDateFormat.parse("2020年10月06");
} catch (ParseException e) {
//public String getMessage():获取异常的描述信息,原因(提示给用户的时候,就提示错误原因
System.out.println(e.getMessage());//Unparseable date: "2020年10月06"
System.out.println(e.toString());//java.text.ParseException: Unparseable date: "2020年10月06"
e.printStackTrace();//输出信息而且飘红!!!
/*
java.text.ParseException: Unparseable date: "2020年10月06"
at java.text.DateFormat.parse(DateFormat.java:366)
at com.it.test3.TryCathDemo2.main(TryCathDemo2.java:13)
*/
}
}
}
复制代码
而如果有多个异常使用捕获我们又该如何处理呢?
- 多个异常分别处理。
- 多个异常一次捕获,多次处理。
一般我们是使用一次捕获多次处理方式,格式如下:
try{
编写可能会出现异常的代码
}catch(异常类型A e){ 当try中出现A类型异常,就用该catch来捕获.
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}catch(异常类型B e){ 当try中出现B类型异常,就用该catch来捕获.
处理异常的代码
//记录日志/打印异常信息/继续抛出异常
}
复制代码
例如:
public class TryCatchDemo3 {
public static void main(String[] args) {
//test();
test2();
}
//多个异常一次捕获,多次处理。
public static void test2(){
int[] arr = {11, 22, 66, 0};
try {
//System.out.println(arr[5]);//一旦这个报错,下面的代码就不会执行
System.out.println(arr[2]);
System.out.println(arr[0] / arr[arr.length-1]);
} catch (ArithmeticException e) {
System.out.println("除数不为0");
}catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组下标越界");
}catch (Exception e) {
e.printStackTrace();
}
}
//分别处理的方式
public static void test() {
int a = 10;
int b = 0;
try {
System.out.println(a / b);
} catch (ArithmeticException e) {
System.out.println("除数不为0");//除数不为0
}
int[] arr = {1, 2, 3};
try {
System.out.println(arr[4]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组下标越界");//数组下标越界
}
}
}
复制代码
注意:一次捕获,多次处理的异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
例如:
🌸总结
相信各位看官都对异常处理机制的概念有了充分的了解吧,明天我们继续讲解try的其他形式吧!,那我们继续期待下一章的异常更多的内容吧!欢迎期待下一章的到来!
让我们也一起加油吧!本人不才,如有什么缺漏、错误的地方,也欢迎各位人才大佬评论中批评指正!当然如果这篇文章确定对你有点小小帮助的话,也请亲切可爱的人才大佬们给个点赞、收藏下吧,一键三连,非常感谢!
学到这里,今天的世界打烊了,晚安!虽然这篇文章完结了,但是我还在,永不完结。我会努力保持写文章。来日方长,何惧车遥马慢!
感谢各位看到这里!愿你韶华不负,青春无悔!
\




近期评论