finally是异常处理的一部分,只能在try/catch语句中使用,且无论是否发生异常都会执行,经常被用在需要释放资源的情况下。
finally在执行后的输出分为两种情况:
- 输出的变量为基本类型时:
import java.util.Scanner;
public class Finally {
public static int sum;
public static int sum() {
try {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字1");
int number1 = sc.nextInt();
System.out.println("请输入数字2");
int number2 = sc.nextInt();
sum = number1 + number2;
return sum;
} catch (Exception e) {
System.out.println("输入错误");
return sum;
} finally {
sum=10;
}
}
public static void main(String[] args) {
int number = sum();
System.out.println(number);
}
}
当执行上述代码时,无论是否发生异常,输出的结果都为finally执行前的结果。
- 输出的变量为引用类型时:
import java.util.Scanner;
public class Finally {
public static Number sum() {
Number number = new Number();
try {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字1");
int number1 = sc.nextInt();
System.out.println("请输入数字2");
int number2 = sc.nextInt();
number.sum = number1 + number2;
return number;
} catch (Exception e) {
System.out.println("输入错误");
return number;
} finally {
number.sum=10;
}
}
public static void main(String[] args) {
Number number = sum();
System.out.println(number.sum);
}
}
class Number{
public int sum;
}
执行上述代码时,无论是否发生异常,引用类型中的变量值都为10。
执行finally前reture会将输出的变量暂时保存,finally执行后输出暂存的数据。当变量为基本类型时,获取到的内容为本身的值。当变量为引用类型时,获取到的内容为地址。通过地址输出数据时,结果为finally执行后的结果。