黑马程序员技术交流社区

标题: 该不该加this [打印本页]

作者: zuoyou    时间: 2015-6-7 17:30
标题: 该不该加this
  1. import java.io.*;
  2. class  TestMybuffered
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 MyBufferedReader mbr = new MyBufferedReader(new FileReader("Fileread.java"));
  7.                 String line=null;
  8.                 while((line=mbr.readLine())!=null)
  9.                         System.out.println(line);

  10.                 mbr.myclose();
  11.                 System.out.println("Hello World!");
  12.         }
  13. }

  14. class MyBufferedReader
  15. {
  16.         private Reader r;

  17.         MyBufferedReader(Reader r)
  18.         {
  19.                 this.r=r;
  20.         }

  21.         public String readLine() throws IOException
  22.         {
  23.                 StringBuilder sb= new StringBuilder();
  24.                 int ch=0;
  25.                 while((ch=this.r.read())!=-1)
  26.                 {
  27.                         if(ch=='\r')
  28.                                 continue;
  29.                         if(ch=='\n')
  30.                                 return sb.toString();
  31.                         else
  32.                                 sb.append((char)ch);
  33.                
  34.                 }
  35.                 if(sb.length()!=0)
  36.                         return sb.toString();
  37.                 return null;
  38.         }
  39.         public void myclose() throws IOException
  40.         {
  41.         this.r.close();
  42.         }
  43. }
复制代码


这是我自己写的一个MyBufferedReader类,在循环读取的时候,ch=this.r.read() 中this应不应该加啊?我看老师的视频中好像没有这个this!

作者: 半月    时间: 2015-6-7 17:39
我会在变量名相同的情况下才加.
虽然加上也不会报错,
但是感觉有的加有的不加,整个代码很不好看

作者: 曹操001    时间: 2015-6-7 18:53
这个问题比较复杂,问一下老师比较有可靠性,权威性!
作者: shuaiqi_P_D    时间: 2015-6-7 19:01
一个类中成员方法的局部变量跟成员变量同名,建议加上this
作者: CLAY    时间: 2015-6-7 19:06
不用加this

作者: feng0606    时间: 2015-6-7 20:06
加上比较好把,最起码看起来比较明朗.
作者: zuoyou    时间: 2015-6-7 20:37
我又测试了一下发现加与不加,结果都一样啊!
  1. import java.io.*;
  2. class  TestMybuffered
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 MyBufferedReader mbr = new MyBufferedReader(new FileReader("Fileread.java"));
  7.                 MyBufferedReader mbr1 = new MyBufferedReader(new FileReader("a.txt"));
  8.                 String line=null;
  9.                 while((line=mbr.readLine())!=null)
  10.                         System.out.println(line);
  11.         System.out.println("第二个文件");
  12.                 mbr.myclose();

  13.                 String line1=null;
  14.                 while((line1=mbr1.readLine())!=null)
  15.                         System.out.println(line1);

  16.                 mbr1.myclose();
  17.                
  18.         }
  19. }

  20. class MyBufferedReader
  21. {
  22.         private Reader r;

  23.         MyBufferedReader(Reader r)
  24.         {
  25.                 this.r=r;
  26.         }

  27.         public String readLine() throws IOException
  28.         {
  29.                 StringBuilder sb= new StringBuilder();
  30.                 int ch=0;
  31.                 while((ch=r.read())!=-1)
  32.                 {
  33.                         if(ch=='\r')
  34.                                 continue;
  35.                         if(ch=='\n')
  36.                                 return sb.toString();
  37.                         else
  38.                                 sb.append((char)ch);
  39.                
  40.                 }
  41.                 if(sb.length()!=0)
  42.                         return sb.toString();
  43.                 return null;
  44.         }
  45.         public void myclose() throws IOException
  46.         {
  47.         this.r.close();
  48.         }
  49. }
复制代码

作者: gainn    时间: 2015-6-7 21:00
明显不用。this一般是用于区分一个类里方法内和方法外有同名属性或者对象时才加。你的readLine方法内没有定义名字叫r的变量,所以调用r这个名字时JVM会自动查找到方法外成员变量区域。

如果你readLine方法内部定义了一个叫r的变量,那么不加this就会调用方法内这个变量,加了this就是调用方法外的那个成员变量。
作者: 查无此人。    时间: 2015-6-7 21:21
我想 this 是用来避免成员变量被局部变量覆盖的情况, 这里没有重名的局部变量啊
作者: mishisanyi    时间: 2015-6-8 20:25
在方法替中,局部数据会覆盖全局数据,如果没有局部数据,也就无所谓替换了,但是我一般情况是加的,一个是看上去好理解点,其次是,如果我修改方法的时候,不会再次去加,麻烦
作者: canyellwang    时间: 2015-6-8 21:00
我写的话都加。 看起来比较容易懂。            
作者: 路途遥远    时间: 2015-6-8 21:06
我认为不用加
作者: 小车车    时间: 2015-6-8 21:16
不用加。因为你已经指明了是r的read方法




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