黑马程序员技术交流社区

标题: 为什么接受的是IOException抛出的是RuntimeException()? [打印本页]

作者: 潜伏    时间: 2013-12-1 22:57
标题: 为什么接受的是IOException抛出的是RuntimeException()?
/*
要求:使用管道流
思路:
1,管道流有两个流,一个是PipeOutputStream一个是PipeInputstream。要明确输出流输到输入流中,或者说写入流写到读取流
2,两个流必须关联起来
3,同时管道流中的输出流和输入流是必须保证是两个线程,以防止死锁,因为,当读取流没有读导数据就会发生死锁。所以必须多线程
4,创建多线程的方法是,必须建立一个类同时去实现runnable方法,把要执行的程序写在这个类中
5,在主函数中开启线程。new Thread(对象)。start

*/
import java.io.*;
import java.util.*;
class PipeDemo
{
        public static void main(String[] args) throws IOException
        {
                PipedOutputStream os=new PipedOutputStream();
                PipedInputStream is=new PipedInputStream();
                os.connect(is);
                Write t=new Write(os);
                Read r=new Read(is);
                new Thread(t).start();
                new Thread(r).start();
        }
}
class Write implements Runnable
{
        private PipedOutputStream os;//对象一建立就必须有一个管道输出流,方便在里面操作
        Write(PipedOutputStream os)//给对象初始化用,从而传进来要操作的管道输出流
        {
                this.os=os;
        }
        public void run()
        {
                try
                {
                os.write("hahalail".getBytes());//必须写入字节
                os.close();       
                }
                catch (IOException e)
                {
                        throw new RuntimeException();//为什么抛出的是RuntimeException()???????????????????????????
                }
        }
       
}
class Read implements Runnable
{
        private PipedInputStream in;
        Read(PipedInputStream in)
        {
                this.in=in;
        }
        public void run()
        {
                try
                {
                        byte[] arr=new byte[1024];
                        int num=in.read(arr);
                        String s=new String(arr,0,num);//string的这种方法的记住,在创建对象的时候传入一个数组,可以根据指定将部分转换为字符串
                        in.close();
                        System.out.println(s);
                }
                catch (IOException e)
                {
                        throw new RuntimeException()
                }

        }
       
}

作者: hurryup    时间: 2013-12-1 23:17
可能是bug。有时候网上写的都是错的。
作者: Clare0621    时间: 2013-12-1 23:50
只是个简单处理罢了,因为如果什么字节都没写入,程序执行也没有意义,可以直接抛RuntimeException终止程序。
作者: 依然    时间: 2013-12-2 00:27
不知道作者为什么这么写,也许是个人的习惯吧,但觉得代码又一些不严谨,两个线程中对资源的关闭最好写在finally中吧,这样才能抱着资源在异常退出时候也能关闭。
作者: long362144768    时间: 2013-12-2 01:20
线程的run函数不能抛出异常,如果你抛出除了RunnableException异常以外,编译其无法通过,只有RunnableException不需要在方法上throws ,所以是最佳选择
作者: 简★零度    时间: 2013-12-5 22:49
下次问题解决了就把类型改成提问结束!谢谢!




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