Catch
try中的代码抛出异常后,会被catch进行捕获和消化,try中的其他代码不会继续执行,但try外面中的代码会继续被执行。
public class Catch {
public static void main(String[] args) {
try {
System.out.println("try开始");
int i = 1/0;
System.out.println("捕获异常后继续执行");
}catch (Exception e){
System.out.println(e);
}
System.out.println("try外面的代码被执行");
}
}
运行结果
try开始
java.lang.ArithmeticException: / by zero
try外面的代码被执行
Finally
主要分析几种return情况
第一种情况(Finally中有return):
public class TryTest1 {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
int num = 10;
try{
System.out.println("try开始执行");
return num+=30;
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally执行");
num = 50;
return num;
}
}
}
运行结果
try开始执行
finally执行
50
如果finally中有return语句,那么将会覆盖掉之前的return
第二种情况(finally中没有return):
public class TryTest2 {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
int num = 10;
try{
System.out.println("try开始执行");
return num+=30;
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally执行");
}
return num;
}
}
运行结果
try开始执行
finally执行
40
如果finally中没有return语句,则返回try中的return
注意: 返回的值为try中的return返回的,并不是最后的return返回的
public class TryTest2 {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
int num = 10;
try{
System.out.println("try开始执行");
return num+=30;
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally执行");
}
return 1;
}
}
运行结果
try开始执行
finally执行
40
第三种情况(finally中没有reuturn,但改变了返回的值)
基本数据类型改变时
public class TryTest3 {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
int num = 10;
try {
System.out.println("try开始执行");
return num+=30;
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally执行");
num = 100;
}
return num;
}
}
运行结果
try开始执行
finally执行
40
文本字符串改变时
public class TryTest3 {
public static void main(String[] args) {
System.out.println(test());
}
public static String test(){
String num = "hello";
try {
System.out.println("try开始执行");
return num+=" world";
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally执行");
num = "change";
}
return num;
}
}
运行结果
try开始执行
finally执行
hello world
引用数据类型改变时
public class TryTest4 {
public static void main(String[] args) {
System.out.println(test().num);
}
public static Num test(){
Num number = new Num();
try {
System.out.println("try开始执行");
return number;
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("finally执行");
number.num = 100;
}
return number;
}
}
class Num {
public int num = 10;
}
运行结果
try开始执行
finally执行
100
当被改变的是引用数据类型时,则会改变返回的值