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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 迪卡bas 中级黑马   /  2017-5-8 02:12  /  1263 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

如果你学习过异常处理与IO流,那么应该对try - catch - finally语句不陌生。try代码块用来放可能出现异常的代码,catch代码块用来处理异常,finally代码块用来结束流。代码实现也很简单,用第二十天视屏中介绍的标准复制语句即可。         public static void demo1() throws FileNotFoundException, IOException {
                FileInputStream fis = null;
                FileOutputStream fos = null;
                try {
                        fis = new FileInputStream("xxx.txt");
                        fos = new FileOutputStream("yyy.txt");
                        
                        int b;
                        while((b = fis.read()) != -1) {
                                fos.write(b);
                        }
                }finally {
                        try{
                                if(fis != null)
                                        fis.close();
                        }finally {                                                        //try fianlly的嵌套目的是能关一个尽量关一个
                                if(fos != null)
                                        fos.close();
                        }
                }
        }


但是这种方式书写的finally语句中仅仅是关流就用了整段代码的三分之一强,未免过于繁琐,好在JDK1.7中添加了一个新特性,叫做带参try语句(try with resource),能够在try - catch语句结束后自动关流,使用也很简单,将流对象的实例化当做参数传入try语句即可,第20天代码也有给出。
        public static void demo2() throws FileNotFoundException, IOException {
               try(
                        FileInputStream fis = new FileInputStream("xxx.txt");
                        FileOutputStream fos = new FileOutputStream("yyy.txt");
                        MyClose mc = new MyClose();
                ){
                        int b;
                        while((b = fis.read()) != -1) {
                                fos.write(b);
                        }
                }              
      }
可以看到流对象并不是在try语句外实例化后再在try后的大括号内赋值,而是在try后的小括号内进行实例化并赋值;在使用完流对象后也没有手动关流,而程序依然能按照预期结果进行。以后使用这种方法就不用再在使用try方法操作io流时头疼如何关流了。


一点浅见,希望能够抛砖引玉

3 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
这种用法在开发中用的少. 只要知道就行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马