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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. private static void closeIgnoringException(Closeable c) {//我查阅了API public interface Closeable
  2.                                                                               //Closeable 是可以关闭的数据源或目标。调用 close 方法可释放对象保存的资源(如打开文件)。
  3.                                                                             //这个算什么情况????求解释!!
  4.      if (c != null) {
  5.            try {
  6.              c.close();
  7.            } catch (IOException ex) {
  8.              // There is nothing we can do if close  fails
  9.            }
  10.      }
  11. }
复制代码
今天看JAVA解惑里面有一个这样的函数

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
"Closeable 是可以关闭的数据源或目标。调用 close 方法可释放对象保存的资源(如打开文件)。 "
你这里写的很明白了,这个函数的意思就是,如果存在Closeable 就调用其close方法。
还有你的疑问 有点没必要,如果不报错,正常运行,就说明可以传递。对吧,兄弟。
希望可以帮到你~~

回复 使用道具 举报
参数可以传一个接口变量?
能传呀,接口也有子类,多态么

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!楼下都是你回答的

查看全部评分

回复 使用道具 举报
这个完全可以有,兄弟,这是面向对象的多态体现,只要是实现了这个接口的子类都可以往里面传,建议你看下毕老师里面关于多态的基础视频,你会很有帮助的!用接口接受子对象在内部类中很常用~~~
回复 使用道具 举报
niceBoy 发表于 2012-5-25 14:53
参数可以传一个接口变量?
能传呀,接口也有子类,多态么
  1. package com.file;

  2. import java.io.*;

  3. public class CloseableTest {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) throws Exception {
  8.                 diaoyong(new MyInterface() {//我这里通过匿名内部类 实现接口的方法
  9.                                                                         //我不理解上面 Cliseable  怎么调用的 close方法,它的方法主体在哪里实现的
  10.                        
  11.                         @Override
  12.                         public void print() {
  13.                                 // TODO Auto-generated method stub
  14.                                 System.out.println("调用成功");
  15.                         }
  16.                 });

  17.         }
  18.        
  19.         public static void diaoyong( MyInterface mif) throws Exception{
  20.                 mif.print();
  21.         }
  22. }

  23. interface MyInterface {
  24.        
  25.         public void print();
  26. }
复制代码
回复 使用道具 举报
郭宁 发表于 2012-5-25 15:27

他不是有判断不为空呀
回复 使用道具 举报
郭宁 中级黑马 2012-5-25 15:52:23
7#
niceBoy 发表于 2012-5-25 15:48
他不是有判断不为空呀

不太明白~   c.close()  这个方法在哪里实现的?
回复 使用道具 举报
郭宁 发表于 2012-5-25 15:52
不太明白~   c.close()  这个方法在哪里实现的?

不为空,就说明接口已经实现了方法,才能创建对象,才不为空么?
回复 使用道具 举报
郭宁 中级黑马 2012-5-25 16:08:45
9#
niceBoy 发表于 2012-5-25 16:02
不为空,就说明接口已经实现了方法,才能创建对象,才不为空么?

刚又查可一下 ~ Inputstream  实现了 Closedable 接口!!
明白了 谢谢哈
回复 使用道具 举报
张晨 黑马帝 2012-5-25 16:09:28
10#
本帖最后由 张晨 于 2012-5-25 16:13 编辑

方法上是可以写接口的(或者父类的)
传入方法一定要一个该接口的实现类或者子类的实例

比如 一个构造函数 BufferedInputStream(InputStream in)  可以写成
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("aaa.dat"));

这里FileInputStream 继承InputStream类,所以可以传入以InputStream为参数的构造类里面
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马