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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lwy0319 高级黑马   /  2014-3-24 03:33  /  2312 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lwy0319 于 2014-4-1 02:17 编辑

       今天初学IO时发现throws IOException时需要导入IO包,因为之前才过异常,发现之前不涉及到导包,然后又回去查了Throwable类发现他在java.lang包里,又在里面发现了不少常用类和语句,看来这个包不用特意导入,想知道IO异常这种虽然属于Throwable类但是确跟Throwable类不在一个包里的现象多么?除了lang包已经默认加载(本人猜的),还有哪些包是默认加载的?
       还有就是看到毕老师的视频中讲关于用FileWriter类构造方法的例子中首先在try之外用FileWriter f= null;以备finally中用实例对象f执行关闭流的操作,如果把FileWriter f=new FileWriter("d:\\test.txt");整个放在try里,会造成如果创建错误,而f没被成功创建,则无法关闭流,因为我是初学,所以没搞明白如果f没被创建,那开启什么东西了么?(比如流),是否有需要关闭资源的必要,个人感觉好像没诞生什么东西。。PS:看毕老师视频时他经常问听懂了没?我总想回答没懂。。。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

5 个回复

倒序浏览
1.第一个问题可以查一下JDK API中文版,自己查证一下吧.默认的话只有java.lang.*中类被加载.
2.如果FileWriter f = new FileWriter("d:\\test.txt")即声明在try-catch语句块里,只能作为这个代码块的局部变量.它的作用范围就只能在try-catch域中,一般我们关闭资源都在finally语句执行,所以就不能使用引用f.--->简单来讲就是引用f是局部变量.所以你不能在finally调用f.
加油!!!哥们

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
1. 其实学到后面用eclipse时,导包什么的,都会提示,快捷键Shift+Ctrl+O导入所需的快捷键,再有报错,再分析程序有无别的错误(注意,对导包也要有一定的概念了解),多看看 API文档吧。。

2. try {   }finally{ }也是一个代码块,注意变量的有效范围

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
呃。。一起加油。。我的意思是f如果没被成功创建有没有必要执行f.close()。。感觉没开流,不知道有没有必要关掉。。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
亲,你猜对了!确实.lang包是默认加载,并且只有这一个包是默认加载的!
以你说的FileWriter f=new FileWriter("d:\\test.txt");为例,如果d盘不存在,那么这条语句在逻辑上是有问题的,但是编译器并不会发现这一异常,可照常编译。这也正是需要我们处理异常的原因。
“而f没被成功创建,则无法关闭流,因为我是初学,所以没搞明白如果f没被创建,那开启什么东西了么?”流本质上就是一段有序的数据,占用的是内存。
“如果把FileWriter f=new FileWriter("d:\\test.txt");整个放在try里“,这种情况下应该在catch或之后的语句中释放内存。
这是我的理解,希望能帮到你~

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
蒋珍珍 来自手机 中级黑马 2014-3-31 13:46:04
地板
         正因为我们不知道流是否创建成功,所以需要最后来判断流是否为null,如果不为null,我们就关闭流。如果为null,肯定就不用执行了。其实关闭语句是否成功执行,也是不确定的,也需要try。
流加载文件的时候一般用File类先封装好这个文件比较妥当。
最后,文件不存在,就会抛出FileNotFoundException,流肯定是不会创建成功
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马