永发信息网

java中try中有return,后面有finally执行顺序问题

答案:5  悬赏:50  手机版
解决时间 2021-11-21 02:32
java中try中有return,后面有finally执行顺序问题
最佳答案
    关于执行问题  肯定是执行的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返回的都是基本类型的数据时都同时执行的时候 后者执行的把前者执行的给覆盖掉了。

追问我也觉得是这样
全部回答

return 在 try{}内,是这样的情况的。

finally是在try{}的最后执行。
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;
}
}
}
在《practical java》中,专门有一节讲这个问题,把return放在try-finally块是个不好的习惯。

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

所以,不要把return放在其中
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
你好我好他也好,聚在一起缘份好,怎么对下句
地下城与勇士第二章:向暗黑城前进里,开放的副
脑筋急转弯李大爷买了一只鞋
以南朝西洲曲和北朝木兰诗为例谈谈南北朝诗歌
目前安装家用电梯成本高不高
清远都讲白话吗?
香菇鲜鲍粥怎么做
谁有巨轮2粤语版全集百度云发我谢谢
恶魔猎手尤迪安的女朋友是谁
本源与根源是什么?他们的区别与联系是什么?
衡钢中学地址在哪,我要去那里办事,
高腰短裤是选平时中腰的码 还是要选小一码 高
龙之谷黑暗死神有什么故事
1/2+3/4+7/8+15/16+31/3
怎样在 CAD中标注带有角度的线条
推荐资讯
日本最有名的主持人是谁
云南沱茶如何泡?硬硬的,根本掰不动啊。。。
江阴文定菜场到江阴来富岛大酒店公交车
用物距像距法测凹透镜焦距时,为何要尽量用缩
哈密南火车站到若羌
我是一个大一的女生,上一节课体育课老师要分
铸件壁厚设计应该遵循哪些原则
一秒300万多久到40亿
中国邮政储蓄银行银行卡助农取款服务点地址在
有一片湖,一只小船,两座山,还有垂柳,打一
"创造社"成员?
线性回归模型和非线性回归模型的区别是什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?