A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouxp3323 黑马帝   /  2012-4-8 14:54  /  2267 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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里面为什么就不行呢?

6 个回复

倒序浏览
因为你把return语句放入了try语句里面,编译器找不到返回语句,所以报错。
我觉得出现编译器发现不了return语句的原因是,在编译阶段,不会进入try语句去检查,所以导致编译器找不到return语句。
回复 使用道具 举报
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捕获
回复 使用道具 举报
在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语句   
    }  
回复 使用道具 举报
return object;是属于 public Object getValue(int i){}函数内的一部分  
放入try语句中的话 就脱离了  方法  
而你定义的方法又不是void的
必须返回一个 Object 类型的对象
回复 使用道具 举报
当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:43
7#
让人根据它写成小说又被不同导演拍成48个不同版本的电影的好帖  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马