针对异常的处理主要有两种方式:
1.抛出异常
遇到异常不进行具体处理,而是继续抛给调用者(throw,throws)抛出异常有三种形式,一是 throw,一个 throws,还有一种系统自动抛异常。throws 用在方法上,后面跟的是异常类,可以跟多个;而 throw 用在方法内,后面跟的是异常对象。
2.try catch 捕获异常
在catch语句块中补货发生的异常,并进行处理。
try-catch捕获异常的时候还可以选择加上finally语句块,finally语句块不管程序是否正常执行,最终它都会必然执行。
三道经典异常处理代码题
1.题目一
public class TryDemo {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
try {
return 1;
}catch (Exception e){
return 2;
}finally {
System.out.print("3");
}
}
}
执行结果:31
try、catch。finally 的基础用法,在 return 前会先执行 finally 语句块,所以是先输出finally 里的 3,再输出 return 的1。
2.题目二
public class TryDemo {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
try {
return 1;
}catch (Exception e){
return 2;
}finally {
return 3;
}
}
}
执行结果:3
try 返回前先执行 finally,结果 finally里不按套路出牌,直接 return 了,自然也就走不到 try 里面的 return 了。finally 里面使用 return 仅存在于面试题中,实际开发这么写要挨吊的
3.题目三文章来源:https://www.toymoban.com/news/detail-440025.html
public class TryDemo {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
int i = 0;
try {
i = 2;
return i;
}finally {
i = 3;
}
}
}
执行结果:2
大家可能会以为结果应该是 3,因为在 return 前会执行 finally,而 i 在 finally 中被修改为 3 了,那最终返回 i 不是应该为 3 吗?
但其实,在执行 finally 之前,JVM 会先将 i 的结果暂存起来,然后 finally 执行完毕后,会返回之前暂存的结果,而不是返回 i,所以即使 i 已经被修改为 3,最终返回的还是之前暂存起来的结果 2。文章来源地址https://www.toymoban.com/news/detail-440025.html
到了这里,关于Java中异常处理方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!