java异常处理执行顺序详解try catch finally

网友投稿 316 2022-09-22


java异常处理执行顺序详解try catch finally

目录不含return的执行顺序finally子句含return的执行顺序返回类型是对象类型时值的变化结论

不含return的执行顺序

执行顺序为执行try中代码,如果没有异常,然后执行try catch后续的代码。如:

public static void main(String[] args) {

try {

int j = 10 / 2;

System.out.println("执行try中代码!");

} catch (Exception e) {

e.printStackTrace();

System.out.println("执行catch中代码!");

}

System.out.println("执行catch后的代码!");

}

执行结果为:

如果有异常,则try中异常后的代码将不执行,开始执行catch中的代码,执行完成后,执行try catch后续的代码,示例代码如下:

public static void main(String[] args) {

try {

int j = 10 / 0;

System.out.println("执行try中代码!");

} catch (Exception e) {

e.printStackTrace();

System.out.println("执行catch中代码!");

}

System.out.println("执行catch后的代码!");

}

执行结果

发生异常语句后的代码:System.out.println(“执行try中代码!”)不再执行。

finally子句

使用try catch finally子句时,无论发生不发生异常,finally子句中的代码都是要执行,一般用于释放资源、连接等操作。

public static void main(String[] args) {

try {

int i = 8/0;

System.out.println("执行try中代码!");

} catch (Exception e) {

System.out.println("执行catch中代码!");

} finally {

System.out.println("执行finally中代码!");

}

System.out.println("执行try catch后的代码!");

}

执行try catch或try catch finally之后,执行后续的代码。

含return的执行顺序

如果不包含finally语句,在try子句和catch子句中均含有return语句,代码遇到return语句则终止代码的执行,try catch后面的语句不可能得到执行。

含有finally语句的try catch子句包含return语句执行顺序,执行finally子句,然后执行try或者catch的return语句,此时若finally语句包含return或终止运行,则try catch子句中的return语句将不执行。如:

public static void main(String[] args) {

Integer i= testReturn();

System.out.println(i);

}

public static Integer testReturn(){

try {

int i = 8/0;

System.out.println("执行try中代码!");

return 1;

} catch (Exception e) {

System.out.println("执行catch中代码!");

return 0;

}

finally {

System.out.println("执行finally中代码!");

return 3;

}

}

执行结果

如果再finally终止程序运行,则丢失返回值

public static void main(String[] args)http:// {

Integer i= testReturn();

System.out.println(i);

}

public static Integer testReturn(){

try {

int i = 8/0;

System.out.println("执行try中代码!");

return 1;

} catch (Exception e) {

System.out.println("执行catch中代码!");

return 0;

}

finally {

System.out.println("执行finally中代码!");

System.exit(0); //退出程序,返回值丢失

}

}

执行结果如下图:

没有输出返回值

返回类型是对象类型时值的变化

返回类型如果是对象类型,则返回的是指针。此时如果finally中包含对象的炒作,注意返回值的变化。示例代码如下

创建一个Person的类

public class Person {

private String name;

private String adress;

@Override

public String toString() {

return "Person{" +

"name='" + name + '\'' +

", adress='" + adress + '\'' +

'}';

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAdress() {

return adress;

}

public void setAdress(String adress) {

this.adress = adress;

}

}

含有return的测试代码如下

public static void main(String[] args) {

Person person = testObjReturn();

System.out.println(person.toString());

}

public static Person testObjReturn(){

Person person = new Person();

try {

int i = 8/0;

person.setName("王小二");

person.setAdress("电子街1号");

return person;

} catch (Exception e) {

person.setName("朱小三");

person.setAdress("电子街1号");

return person;

}

finally {

person.setName("李老五");;

}

}

执行结果

结论

try catch finally带有return语句时,既可以将return语句放到try和catch中,也可以放到过程的结尾,一般建议放到结尾,便于统一管理。特别注意finally包含return语句时try、catch中的return将不再执行。尤其当返回的变量是实体对象时,finally中的语句如果对返回的变量进行修改,则将影响到返回值。

以上就是java异常处理执行顺序详解try catch finally的详细内容,更多关于java异常try catch finally执行顺序的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:BGP之IBGP水平分割之路由反射(bgp路由反射原则)
下一篇:DHCP三层交换机设置方式 全局模式和接口模式设置方式和命令(三层交换机配置dhcp服务器步骤是什么)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~