黑马程序员技术交流社区

标题: 自定义的字节流缓冲区。。return的小疑问,因为是小白 勿喷 [打印本页]

作者: anywayDo    时间: 2015-5-7 18:44
标题: 自定义的字节流缓冲区。。return的小疑问,因为是小白 勿喷
  1. class MyBufferedInputStream
  2. {
  3.         private InputStream ips;
  4.         byte[] buf=new byte[1024];
  5.         int pos=0,count=0;
  6.         MyBufferedInputStream(InputStream ips)
  7.         {
  8.                 this.ips=ips;
  9.         }
  10.         //一次读一个字节,从缓冲区获取
  11.         public int myRead()throws IOException
  12.         {
  13.                 if(count==0)
  14.                 {
  15.                         //将读取到的字节存入buf数组,并将个数赋值给count计数器。
  16.                         count=ips.read(buf);
  17.                         if(count<0)//当然有可能小于零,读到第1024个之后,count自减到零,再读,后面没有数据了,所以,就是-1了。
  18.                                 return -1;
  19.                         pos=0;//自增到1024之后清零
  20.                         byte b=buf[pos];
  21.                         pos++;
  22.                         count--;
  23.                         return b&255;
  24.                 }
  25.                 else if(count>0)
  26.                 {
  27.                         byte b=buf[pos];
  28.                         pos++;
  29.                         count--;
  30.                         return b&0xff;
  31.                 }
  32.                 return -1;
  33.                
  34.         }
  35.         public void myClose()throws IOException
  36.         {
  37.                 ips.close();
  38.         }
  39. }
复制代码
在myRead方法中,if和else中已经把情况都考虑到了,也就是一定会有返回值,为什么最后还要加一个return -1呢?不返回,编译失败。
隐隐感到和函数的语法有关,但是真心是小白的程度,望大神勿喷。。

作者: tanzhixue    时间: 2015-5-7 19:08
你这样满足条件才有返回  要是不满足就没有 也就是说 你缺少返回值  吧
作者: anywayDo    时间: 2015-5-7 22:34
tanzhixue 发表于 2015-5-7 19:08
你这样满足条件才有返回  要是不满足就没有 也就是说 你缺少返回值  吧

count大于、小于还有等于0的情况都有考虑的,所以我觉得一定会有返回值,就觉得没必要在写最后的return了 。。。
作者: tanzhixue    时间: 2015-5-8 00:54
你可以这么想  当加载到你的函数时候  他先判断是不是有返回值的 函数,这时候,还没读条件  它没找到返回值 就报错了
作者: 殃金咒    时间: 2015-5-8 01:34
你们看代码都很快吧= =我半天才能看完
作者: anywayDo    时间: 2015-5-8 21:59
tanzhixue 发表于 2015-5-8 00:54
你可以这么想  当加载到你的函数时候  他先判断是不是有返回值的 函数,这时候,还没读条件  它没找到返回 ...

它应该是一句一句读的吧?我和朋友讨论了下,觉得应该是异常的原因,如果真有异常抛出,后面的if就读不到,就没有返回值 ,但是return一定会执行,所以要加上return,保证函数有返回值的。。参考下。。
作者: anywayDo    时间: 2015-5-8 22:00
殃金咒 发表于 2015-5-8 01:34
你们看代码都很快吧= =我半天才能看完

我估计和你一个速度。。基础很薄,一点一点啃。。
作者: gzp123    时间: 2015-5-8 22:06
看不懂,没学过




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