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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 深井看海 中级黑马   /  2012-11-25 21:57  /  1982 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class ReturnDemo{
public static void main(String[] args){
}
public static void fun(){
if(true){
  return ;
  }
}
public static int sum(int a, int b){
  return a+b;
  }
  
public static int sum1(int a,int b) {
  int c = a+ b;
  if(true){ //谁能解释下,为什么我if里面的条件明明是true,下面也有返回值,为什么编译的的时候就是说缺少返回语句?
   return c;
   }
  
  }
}

上面那里特别纳闷,求详细说明,越详细的解释越好,另把return详细说下,用在哪,什么时候该返回,什么时候不能返回,有返回值的方法是怎么返回的,无返回值的又是怎么返回的,还有是不是有些地方不写return也默认有rentrn效果!!!

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

10 个回复

正序浏览
tfy 中级黑马 2012-12-1 00:21:21
11#
其实不用if判断就是对的啊
回复 使用道具 举报
tfy 中级黑马 2012-12-1 00:20:23
10#
    int  sum1(int a,int b) {
            int c = a+ b;
            if(true){ //谁能解释下,为什么我if里面的条件明明是true,下面也有返回值,为什么编译的的时候就是说缺少返回语句?
             return c;
             }
                return c;
          
          }
回复 使用道具 举报
一句话,你最后一个方法,是return if语句域的值,你的方法域还没有返回值。知道作用域吗。你在if语句外价格return -1,保证正确。当然你想return什么值都可以,返回1000000都可以,只要你爽
回复 使用道具 举报
王震阳 发表于 2012-11-25 22:09
你写代码是不是用的eclipse(Myeclipse),如果是初学者还是用EditPlus好,不是说EditPlus功能强,而是可以 ...

这个我赞同前辈的,我也是初学者,用EditPlus
回复 使用道具 举报
王震阳 发表于 2012-11-25 22:13
这个问题涉及到编译器的问题了,对于有返回值类型的函数,比如你的函数里面返回值是int型的,那么在方法体 ...

可是如果return存在if(true){return 0;}else{ return 1;}语句里的话,就不会报错,方法体里也没有return啊,这编译期的问题怎么理解,按我们人的正常思路,if后面的条件永远为真就执行后面的语句,而后面刚好有返回值,机器是个怎么想法啊??
回复 使用道具 举报
return
一般的用法 时为了实现返回,返回一个值或其他复杂类型,都是可以的,
return 一般都用在被调用的对象(对象一)里面,调用以后返回到调用对象(对象二)即,当对象二调用对象一时,如果对象一内部调用了return语句,则程序执行返回到,对象二调用对象一得下一条语句继续执行,
比如:(这里的对象在C语言里面就是函数)
对象一()
{
return;
}
对象二()
{
语句一;
对象一();
语句二;


}
当程序执行到对象二时,会调用对象一,转到对象一种去执行,当执行到return时,会返回到对象二中,执行语句二

return   ---  跳出当前方法

特别注意:返回值为void的方法,从某个判断中跳出,必须用return;

示例1:

public static void test(int i) {
  if (i == 1) {
   System.out.println("我跳出啦!");
   return;
  }
  i++;
  System.out.println("i=" + i);
}

==============================================================

实例2:

public class PlayFilter extends HttpServlet{
private static final long serialVersionUID = 5182719517453355461L;
/**
  * 视频点播鉴权,或 点播量统计等
  */
@Override
public voidservice(ServletRequest svReq, ServletResponse svRes)
       throws ServletException, IOException {
       HttpServletRequest req = (HttpServletRequest)svReq;
       HttpServletResponse res = (HttpServletResponse)svRes;
       String offeringId = req.getParameter("eurl");

       if(offeringId==null || !offeringId.endsWith(".ts") || offeringId.length()<5){
               res.sendRedirect(req.getContextPath() + "/errurl.html" );  // 发生异常就跳入异常页面
               return;     // 一定要由它,不然不会跳转的
         }
。。。。。。省略。。。。。。。。。。。。。
          res.sendRedirect(playurl);
      }

}
回复 使用道具 举报
修改如下:
public static int sum1(int a,int b) {
   int c = a+ b;
   if(true){
            return c;
             }
     return a;  //这里需要一个返回,因为如果if(true)不成立、就不返回return c了。而你用int 接收,所以必须有返回值int类型。
   }

另外在java的方法中可以使用return语句直接结束一个方法的执行,如下所示:
public class MethodDemo{
          public static void main(String[] args) {
                System.out.println("1、调用fun()方法之前。");
                fun(10);
                System.out.println("2、调用fun()方法之后。");
        }
          public static void fun(int x){
                        System.out.println("3、进入fun()方法。");
         if(x==10){
                 return;  //结束方法,返回被调用处
         }
                System.out.println("4、正常执行完fun()方法。");

          }
}
运行结果:
1、调用fun()方法之前。
3、进入fun()方法。
2、调用fun()方法之后。

从程序运行结果发现,虽然在return中没有返回任何内容,但是已执行到return语句之后,
方法将不再执行,而返回到被调用处继续向下执行。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
这个问题涉及到编译器的问题了,对于有返回值类型的函数,比如你的函数里面返回值是int型的,那么在方法体里面必须有return 语句,你要是把return语句写到if()判断里面,虽然你认为该函数一定会返回一个int值,但是编译器不会去猜测,或者说去给你计算一下是否已经肯定有返回值了。毕竟编译器还不是那么的智能,不过我相信,随着jdk的升级,在以后的版中,也许编译器会更加智能吧。
回复 使用道具 举报
你写代码是不是用的eclipse(Myeclipse),如果是初学者还是用EditPlus好,不是说EditPlus功能强,而是可以让写者更好找掌握java语言。
回复 使用道具 举报
这个提醒是为了编译器的通过,编译器认为你的这个return语句不存在,

虽然你的存在,但是是在if 语句的块中的,结果要是不执行的话,那你

的方法岂不是费费啦 ,  所以你需要有一个返回值。返回 0 就行了。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马