java中try中有return,后面有finally执行顺序问题
答案:5 悬赏:50 手机版
解决时间 2021-11-21 02:32
- 提问者网友:你给我的爱
- 2021-11-20 02:39
java中try中有return,后面有finally执行顺序问题
最佳答案
- 五星知识达人网友:轻雾山林
- 2021-11-20 03:27
- 关于执行问题 肯定是执行的try,然后是finally,并且finally中是一定会被执行的,不管try中有没有return语句
当try和finally中同时有return时,返回的是finally中的rerurn .问题? 到底try中的return是没有执行 还是被finally中的覆盖呢 测试如下
新建一个对象类
public class People {
String name;
String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public People() {
super();
// TODO Auto-generated constructor stub
}
public People InstanceName(String name,People p){
p.setName(name);
return p;
}
public People InstanceAge(String age,People p){
p.setAge(age);
return p;
}
}
一个测试类
public class Test {
public static void main(String[] args) {
People p = new People();
test1(p);
System.out.println(p.getName());
System.out.println(p.getAge());
}
public static People test1(People p){
String s = "";
try{
// System.out.println("try.....");
return p.InstanceName("name", p);
}
finally{
System.out.println("finally.....");
return p.InstanceAge("age", p);
}
}
}
输出结果 显示
finally.....
name
age
结果: try中的return语句执行生效了 ,猜测 可能是java关于方法的的返回值 应该在内存中是有一个存储空间的 当try和finally中的return返回的都是基本类型的数据时都同时执行的时候 后者执行的把前者执行的给覆盖掉了。
全部回答
- 1楼网友:白昼之月
- 2021-11-20 06:57
- 2楼网友:纵马山川剑自提
- 2021-11-20 06:34
return 在 try{}内,是这样的情况的。
finally是在try{}的最后执行。
finally是在try{}的最后执行。
- 3楼网友:玩世
- 2021-11-20 05:13
finally 在程序的最后执行,前面即使有return,finally 还是会执行的。同时如果finally里面有return,那么finally 里面的return 会将程序前面飞return 给取代。把你的程序稍微加了点东西,可能更明了些。
public class Test1 {
public static void main(String[] args) {
int i = 1;
System.out.println(tryy(i)+"...1"); }
public static long tryy(int i){
try{
long ll = System.currentTimeMillis();
System.out.println("输出1 的结果--"+ll);
return ll;//获得一个系统时间,返回//(1)
}finally{
for(int j=0;j<1000000000;j++){
j*=1;//这里的作用是增加运行时间,让两个时间有个差
}
//再次获得一个系统时间
long l2 = System.currentTimeMillis();
System.out.println("输出2的结果"+l2+"...2");//(2)
return l2;
}
}
}
public class Test1 {
public static void main(String[] args) {
int i = 1;
System.out.println(tryy(i)+"...1"); }
public static long tryy(int i){
try{
long ll = System.currentTimeMillis();
System.out.println("输出1 的结果--"+ll);
return ll;//获得一个系统时间,返回//(1)
}finally{
for(int j=0;j<1000000000;j++){
j*=1;//这里的作用是增加运行时间,让两个时间有个差
}
//再次获得一个系统时间
long l2 = System.currentTimeMillis();
System.out.println("输出2的结果"+l2+"...2");//(2)
return l2;
}
}
}
- 4楼网友:山有枢
- 2021-11-20 04:38
在《practical java》中,专门有一节讲这个问题,把return放在try-finally块是个不好的习惯。
这个例子里,肯定先执行try中的return,但是实际上不起作用,finally子句一定会执行,所以最后return的是finally里的值。
所以,不要把return放在其中
这个例子里,肯定先执行try中的return,但是实际上不起作用,finally子句一定会执行,所以最后return的是finally里的值。
所以,不要把return放在其中
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯