黑马程序员技术交流社区

标题: 装饰类的有关问题 [打印本页]

作者: yanyoucheng520    时间: 2014-7-15 14:17
标题: 装饰类的有关问题
今天看到视频 装饰类的讲解时,遇到一个小问题,不是很理解,现在贴出代码,望大神指导下
class MyBufferedReader extends Reader
{
        private Reader r;
        public MyBufferedReader(Reader r)
        {
                this.r=r;
        }
        public String myReadLine()throws IOException
        {
                StringBuilder s=new StringBuilder();
                int ch=0;
                while((ch=r.read())!= -1)
                {
                        if(ch=='\r')
       
                                continue;
                       
                        if(ch=='\n')
                       
                                return s.toString();
                       
                        else
                                s.append((char)ch);       
                       
                }
                        if(s.length()!=-1)
                       
                                return s.toString();
                        return null;
        }
就是最后这两两句,卧室门已经return s.toString(),怎么后面还是返回空,那这前面这句有什么用啊
作者: 陈云阳    时间: 2014-7-15 14:31
因为你这函数需要返回值,其他的返回值不是在if里就是while里,所以需要添加一个函数的返回值
作者: yanyoucheng520    时间: 2014-7-15 16:07
陈云阳 发表于 2014-7-15 14:31
因为你这函数需要返回值,其他的返回值不是在if里就是while里,所以需要添加一个函数的返回值 ...

那最后面返回空值了吗
作者: wisely    时间: 2014-7-15 16:45
首先要明确一点,myReadLine()方法有返回值类型,那么必须要有return语句。意思就是说,不管出现任何情况,都必须保证能够有一个return被运行,而且一旦运行到了return,直接跳出方法(注意是方法,而不是循环语句,这点跟break不同)。

读一行会出现三种情况,所以出现了三个

①一般情况
sdafdfadfaf
【末尾光标出现位置】

这种情况下,用到了第一个return语句,直接跳出循环,后面的代码不执行,所以return null自然也不运行。

②二般情况
sdafdfadfaf【末尾光标出现位置】

这时用第一个return语句没有起作用,用到了第二个return语句,其后的代码未执行。

③ 空文件
【末尾光标出现位置】

前面两个return语句都未起作用,第三个起作用,返回null,也就是空。

我说明白了么?

作者: yanyoucheng520    时间: 2014-7-15 19:09
貌似好像明白了,谢谢啊
作者: wisely    时间: 2014-7-15 19:14
yanyoucheng520 发表于 2014-7-15 19:09
貌似好像明白了,谢谢啊

自己玩一下就明白了
作者: 一十二。    时间: 2014-7-15 19:19
装饰类在那天的视频里?为什么我没有学到
作者: yanyoucheng520    时间: 2014-7-15 21:35
第19天 07 08的视频咯
作者: blue_sky    时间: 2014-7-15 23:05
if(s.length()!=-1)
   return s.toString();
这是一个语句,只有if里的条件符合了,才会执行return s.toString();如果不符合条件,才会执行return null 吧!
作者: icris    时间: 2014-7-15 23:29
建议自己写代码的时候 if 语句不要省略大括号,否则不容易检查,如最后一个建议写成这样
  1. if (s.length() != -1) {
  2.     return s.toString();
  3. }
复制代码

可以看出前面两个 return 都在 if 语句中,要通过编译就必须确保一定有一个 return 能够被执行,所以必须加上最后一句。




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