永发信息网

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{}的最后执行。
  • 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;
}
}
}
  • 4楼网友:山有枢
  • 2021-11-20 04:38
在《practical java》中,专门有一节讲这个问题,把return放在try-finally块是个不好的习惯。

这个例子里,肯定先执行try中的return,但是实际上不起作用,finally子句一定会执行,所以最后return的是finally里的值。

所以,不要把return放在其中
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯