大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
java 的异常处理机制,执行顺序;return在异常中的使用 ;自定义异常类的简单应用
异常处理2种方法:
1.抛 (throws)
2.自己处理try/catch/finally
1.抛出:向上一级抛出,异常实际没有被解决掉
2.try/catch/finally
(1)正常执行
public class Test1 {
public static void main(String[] args) {
Test1 test1 = new Test1();
test1.say();
}
public void say() {
String str = "123";
try {
System.out.println(Integer.parseInt(str));
System.out.println("正常执行");
//return;
}catch(Exception e) {
System.out.println("有异常");
//return;
}finally {
System.out.println("finally");
//return;
}
}
}
复制代码
123
正常执行
finally
(2)异常情况:
复制代码
public class Test1 {
public static void main(String[] args) {
Test1 test1 = new Test1();
test1.say();
}
public void say() {
String str = "abc";
try {
System.out.println(Integer.parseInt(str));
System.out.println("正常执行");
//return;
}catch(Exception e) {
System.out.println("有异常");
//return;
}finally {
System.out.println("finally");
//return;
}
}
}
有异常
finally
结论:finally是一定会被执行的!因此,finally通常用于释放资源,在IO流操作和数据库操作中,程序没有报错,执行了 try 和 finally 代码块,程序报错了,执行try catch finally 代码块
那么这里就有一个问题,执行的先后顺序?
这里我们需要连接一个关键字return!
Java中的return有两方面的用途:
(1)返回方法指定类型的值(前提是方法的返回值类型不是void)。
(2)方法的结束,它会导致当前的方法退出。
通过return我们去探究一下,try catch finally的执行先后顺序!
复制代码
public class Test1 {
public static void main(String[] args) {
Test1 test1 = new Test1();
System.out.println(test1.say());
}
public String say() {
String str = "123";
try {
Integer.parseInt(str);
return "try";
} catch (Exception e) {
return "catch";
} finally {
return "finally";
}
}
}
结果为:finally
public class Test1 {
public static void main(String[] args) {
Test1 test1 = new Test1();
System.out.println(test1.say());
}
public String say() {
String str = "abc";
try {
Integer.parseInt(str);
return "try";
} catch (Exception e) {
return "catch";
} finally {
return "finally";
}
}
}
结果也是finally
这是为什么?finally是必定执行的代码块!所有finally逻辑上虽然能使用return,但一般finally不会接return。否则你什么也测不出来
public class Test1 {
public static void main(String[] args) {
Test1 test1 = new Test1();
System.out.println(test1.say());
}
public String say() {
String str = "abc";
try {
Integer.parseInt(str);
return "try";
} catch (Exception e) {
System.out.println("catch");
return "catch";
} finally {
System.out.println("finally");
}
}
}
catch
finally
catch
由此可以看出执行的顺序为:
(1)Integer.parseInt(str);
(2)System.out.println(“catch”);
(3)System.out.println(“finally”);
(4)return “catch”;
同理其他:
复制代码
public class Test1 {
public static void main(String[] args) {
Test1 test1 = new Test1();
System.out.println(test1.say());
}
public String say() {
String str = "abc";
try {
Integer.parseInt(str);
return "try";
} catch (Exception e) {
System.out.println("catch");
return "catch";
} finally {
System.out.println("finally");
return "finally + return";
}
}
}
复制代码
catch
finally
finally + return
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168700.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...