黑马程序员技术交流社区

标题: 18期来了,毕老师教程里面是否有个漏洞??? [打印本页]

作者: 偏執旳、靑春    时间: 2013-3-1 13:36
标题: 18期来了,毕老师教程里面是否有个漏洞???
本帖最后由 偏執旳、靑春 于 2013-3-1 13:38 编辑

class ExceptionInfo   
{  
    public static void main(String[] args)   
    {  
        try  
        {  
            int[] arr=new int[2];  
            System.out.println(arr[3]);  
        }  
        catch (Exception e)  
        {  
            try  
            {  
                Date d=new Date();  
                SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
                String s=sdf.format(d);  
  
               PrintStream ps=new PrintStream("exception.log");  
                ps.println(s);  
               System.setOut(ps);  
            }  
            catch (IOException ee)  
            {  
                throw new RuntimeException("日志文件创建失败");  
           }  
            e.printStackTrace(System.out);  
       }  
         
    }  
这个程序里面是不是没有关流啊?
打印流里面明显yougeclose()方法,这里是没有必要还是毕老师忘记了?
作者: 曹春贵    时间: 2013-3-1 13:38
可能忘记了吧
作者: 偏執旳、靑春    时间: 2013-3-1 14:20
也许是吧!!我也不清楚
作者: 刘渝灵    时间: 2013-3-1 15:56
我有这样一个印象:PrintStream这种输出流不用手动关闭,系统会自动完成。
不知道对不对。
作者: 李文龙    时间: 2013-3-2 07:15
字符流需要close ,字节流不需要close ,所以字节流没有flush 和close方法,你可以查看一下API
作者: 偏執旳、靑春    时间: 2013-3-2 11:55
李文龙 发表于 2013-3-2 07:15
字符流需要close ,字节流不需要close ,所以字节流没有flush 和close方法,你可以查看一下API  ...

API里面可是有的哦!!!
作者: 赵华帅    时间: 2013-3-3 15:04
本帖最后由 赵华帅 于 2013-3-3 15:10 编辑

使用System.setOut()方法时,setOut方法真正调用的是一个用native关键字修饰的setOut0()方法。被native关键字修饰的方法,其实现过程是由其它语言编写的,它需要提供一个后缀名为".dll"的动态链接库文件给java,在java中调用System.loadLibrary(dll文件名)后,就可以正常使用那个被native关键字修饰的方法了,就像使用其它java方法一样。或许,人家在dll文件中的函数(其它语言编写的)里面,把那个打印流关了吧。




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