关于Reader和BufferedReader的close方法的疑问

luqing414 2017-11-16 10:36:08
Reader是一个抽象类,实现了Readable和Closeable接口,它有一个抽象方法close,完后BufferedReader里也有一个close方法

public void close() throws IOException {
synchronized (lock) {
if (in == null)
return;
in.close();
in = null;
cb = null;
}
}

这里的in也是一个Reader对象,那我想问,这里的in.close();这句,到底是执行了什么操作,如果这个close是父类的close方法,那只是一个抽象方法,根本没实现,如果这个close是子类的方法,难道这里也是调用的BufferedReader的close,那不是自己调用自己,成了递归调用了,显然也不是,搞不清这个in.close到底是谁的,做了什么
...全文
662 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
迟到_啦 2017-11-17
  • 打赏
  • 举报
回复
引用 6 楼 pany1209 的回复:
[quote=引用 5 楼 qq_19314763 的回复:] [quote=引用 4 楼 pany1209 的回复:] debug一下不就知道了。。。。 in是FileReader,close方法调用的是父类的InputStreamReader的close方法,InputStreamReader的close方法调用的是StreamDecoder的close方法。。 代码如下。。

public void close() throws IOException {
/* 190 */     synchronized (this.lock) {
/* 191 */       if (!this.isOpen)
/* 192 */         return;
/* 193 */       implClose();
/* 194 */       this.isOpen = false;
/*     */     }
/*     */   }
你这是怎么调试的,,没看懂[/quote] debug啊。。。。[/quote] eee 好吧 目前还没用过,去了解一下
逗比123号 2017-11-16
  • 打赏
  • 举报
回复
BufferedReader里的in是构造函数传进来的,所以close执行的是传进来的那个类的close,例如StringReader的close方法就是str==null。
李德胜1995 2017-11-16
  • 打赏
  • 举报
回复
引用 5 楼 qq_19314763 的回复:
[quote=引用 4 楼 pany1209 的回复:] debug一下不就知道了。。。。 in是FileReader,close方法调用的是父类的InputStreamReader的close方法,InputStreamReader的close方法调用的是StreamDecoder的close方法。。 代码如下。。

public void close() throws IOException {
/* 190 */     synchronized (this.lock) {
/* 191 */       if (!this.isOpen)
/* 192 */         return;
/* 193 */       implClose();
/* 194 */       this.isOpen = false;
/*     */     }
/*     */   }
你这是怎么调试的,,没看懂[/quote] debug啊。。。。
迟到_啦 2017-11-16
  • 打赏
  • 举报
回复
引用 4 楼 pany1209 的回复:
debug一下不就知道了。。。。 in是FileReader,close方法调用的是父类的InputStreamReader的close方法,InputStreamReader的close方法调用的是StreamDecoder的close方法。。 代码如下。。

public void close() throws IOException {
/* 190 */     synchronized (this.lock) {
/* 191 */       if (!this.isOpen)
/* 192 */         return;
/* 193 */       implClose();
/* 194 */       this.isOpen = false;
/*     */     }
/*     */   }
你这是怎么调试的,,没看懂
李德胜1995 2017-11-16
  • 打赏
  • 举报
回复
debug一下不就知道了。。。。 in是FileReader,close方法调用的是父类的InputStreamReader的close方法,InputStreamReader的close方法调用的是StreamDecoder的close方法。。 代码如下。。

public void close() throws IOException {
/* 190 */     synchronized (this.lock) {
/* 191 */       if (!this.isOpen)
/* 192 */         return;
/* 193 */       implClose();
/* 194 */       this.isOpen = false;
/*     */     }
/*     */   }
月神夜下梦 2017-11-16
  • 打赏
  • 举报
回复
调用哪个的类定义的close方法要取决与in这个对象具体是哪个类型,而in是初始化时设定的。
一缕清风007 2017-11-16
  • 打赏
  • 举报
回复
“如果这个close是子类的方法,难道这里也是调用的BufferedReader的close”,Reader的子类不只有BufferedReader啊,为什么你会说这里会是自己调用自己呢。实际用的时候这个地方一般都是InputStreamReader

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧