新闻资讯
看你所看,想你所想

try(java关键字)

try(java关键字)

try(java关键字)

Java关键字

用于try..catch..finally块,进行异常捕获。

基本介绍

  • 中文名:尝试
  • 外文名:try
  • 套用:用于捕获异常

基本信息

名称:try
用法:try是try..catch..finally块中用来引导第一部分的关键字,用于声明需要捕获指定语句块的异常
完整的使用方法是
try {    语句块1} catch (<? extends Throwable> e) {    语句块2.1} catch (<? extends Throwable> e) {    语句块2.2} catch (<? extends Throwable> e) {    语句块2.3...} finally {    语句块3}
catch可以出现0次、1次或多次,finally可以出现0次或1次,但是catch和finally不能同时不出现。
catch用法:
当语句块1中抛出异常时,立即离开语句块1,之后会在所有catch中依次进行类名比对。如果抛出异常和catch声明的异常类名一致,或抛出异常是catch声明的异常的子类,则会进入该catch的语句块(成为异常的捕获),在catch的语句块中可以将异常输出到命令行或引导用户进行问题反馈。如果任何一个catch都不匹配,会像上层调用抛出这一异常(在此之前会进入finally语句块,详情参考下面的finally用法)。
finally用法:
在语句块1、语句块2中,任何试图离开try..catch..finally块的语句都会导致语句块3被执行,如return throw break continue。在finally的语句块中可以进行记忆体回收等工作。
需要注意的是,如果导致离开的不是语句造成的,而是断电、记忆体不足等计算机故障,finally语句块不会被执行。
例子:
public class Test {    public static void main(String[] args) {        int i = 10;        try {            System.out.println(i / 0);        }  catch(ArithmeticException ame) {            ame.printStackTrace();        } finally {            System.out.println("byebye");        }    }}

作用关係

try..catch..finally块和return的作用关係不易于理解。
在这里catch中的return语句和try中的return语句相似,因此只讨论try..finally的情况
例1:
private int a = 0;private static int c1() {    try {        return 1;    } finally {        a++;    }}
函式返回1,1次调用后a的值为1
这是因为在函式返回之前finally语句块会被执行
例2:
private static int c2() {    try {        return 1; // unreachable statement    } finally {        return 2;    }}
函式返回2
这是因为在函式返回之前finally语句块会被执行,因此return 2;会早于return 1;
Intellij IDEA等深度IDE中会提示unreachable statement
例3:
private int a = 0;private static int c3() {    try {        return a + 10;    } finally {        a++;    }}
函式返回10,1次调用后a的值为1
jdk在进行编译时,会这样理解代码:
1、将a + 10的值进行暂存,等待函式返回(该值为10)
2、执行a++(a的值变为1)
3、返回刚才暂存的值
相当于
int tmp = a + 10;return tmp;
例4:
private int a = 0;private static int change() {    return ++a;    private static int c4() {    try {        return change();    } finally {        return change();    }}
c4函式返回2,1次调用后a的值为2
jdk在进行编译时,会这样理解代码:
1、(在try中)调用change并将其结果的值进行暂存,等待函式返回(该值为1)(a的值变为1)
2、(在finally中)调用change并返回(该值为2)(a的值变为2)(之前暂存的值失效,JVM会自动进行记忆体回收)
相当于
try {    int tmp = change();    return tmp; // unreachable statement} finally {    int t = change();    return t;}

相关推荐

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:yongganaa@126.com