黑马程序员技术交流社区

标题: 关于方法的返回值问题。 [打印本页]

作者: zhouxp3323    时间: 2012-4-8 14:54
标题: 关于方法的返回值问题。
本帖最后由 zhouxp3323 于 2012-4-8 14:56 编辑

public class SetPerson {

        public Object getValue(int i){
                Object object = null;
                Date date = null;
                try {
                        if(i>0){
                                return date;
                        }
                        return object;
                } catch (Exception e) {
                        e.printStackTrace();
                }
               
        }
}
---------------------------------------
public class SetPerson {

        public Object getValue(int i){
                Object object = null;
                Date date = null;
                try {
                        if(i>0){
                                return date;
                        }
                       
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return object;
        }
}


上面那种情况会报错,下面这种不会,把那个return object放到try里面为什么就不行呢?
作者: 邓海涛    时间: 2012-4-8 15:03
因为你把return语句放入了try语句里面,编译器找不到返回语句,所以报错。
我觉得出现编译器发现不了return语句的原因是,在编译阶段,不会进入try语句去检查,所以导致编译器找不到return语句。
作者: 江远云    时间: 2012-4-8 15:04
try{}catch(){}是一条语句,你把一条语句给分开了,当然会报错
public class SetPerson {

        public Object getValue(int i){
                Object object = null;
                Date date = null;
                try {
                        if(i>0){
                                return date;
                        }
                        
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return object;
        }
}
try检测到错误跳转catch捕获
作者: 文密    时间: 2012-4-8 15:17
在try...cathch....中return值会出现编译错误,这是因为,当try语句捕获错误时候,有可能会丢失return语句,从而导致错误,
最简单的办法就是将需要return的值赋到一个变量,
而将变量从try语句中解放出来,放在最后,这样就能骗过编译器。

public int get() {  
         
       int val= -1;  //中间变量   
       try {  
            val = abq.take();  
        } catch (InterruptedException e) {  
            
           e.printStackTrace();  
       }  
        return val;  //跳出try语句   
    }  

作者: 翟友伟    时间: 2012-4-8 15:19
return object;是属于 public Object getValue(int i){}函数内的一部分  
放入try语句中的话 就脱离了  方法  
而你定义的方法又不是void的
必须返回一个 Object 类型的对象
作者: 郑强强    时间: 2012-4-8 15:47
当try语句中出现异常是时.会执行catch中的语句。java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象.e是此对象引用名称.然后e(引用)会自动调用Exception类中指定的方法。也就出现了e.printStackTrace() ,.printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。你上面的那一条程序在获得的结果中,捕获异常,所以结果会打印出异常。而你的第二条程序,你的object返回对象不再e.printStackTrace()范围内,所以不出现打印错误。return object是属于 public Object getValue(int i){}函数内的一部分  ,这个必须有返回值,你放到try里面肯定是缺少返回值了,所以肯定会出错,是不行的
作者: pray    时间: 2014-4-26 05:45
让人根据它写成小说又被不同导演拍成48个不同版本的电影的好帖  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2