异常机制中throw和throws的区别

public ChatEntry() throws ServerConnectionException {

        try {

            socket = new Socket("127.0.0.1", 8189);

            in=new Scanner(System.in);       

            out = new PrintWriter(socket.getOutputStream(), true);                    

        } catch (UnknownHostException ex) {

            Logger.getLogger(ChatEntry.class.getName()).log(Level.SEVERE, null, ex);

            throw new ServerConnectionException("服务器连接无效",ex);

        } catch (IOException ex) {

            Logger.getLogger(ChatEntry.class.getName()).log(Level.SEVERE, null, ex);

            throw new ServerConnectionException("服务器连接异常",ex);

        }

}

     今天复习老师讲的上述代码,感觉对throw和throws的概念很模糊,声明方法时已经用throws抛出,方法体中为什么还要用throw抛出?即便如此,方法体中抛出的还是实例?

     我带着种种疑问,查了一些资料,上网搜索了一下,具体归纳如下:

     1. throws出现在方法函数头,可以单独使用;而throw出现在函数体,不可以单独使用,throw要么和try-catch-finally语句配套使用,要么与throws配套使用。

     2.throws主要是声明这个方法会抛出这种类型的异常,使其他地方调用它时知道要捕获这个异常。 throw是具体向外抛异常的动作,所以它是抛出一个异常实例。

     3. throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常; 

     4. 程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。

 

posted @ 2010-11-12 11:02  顾光菊  阅读(1455)  评论(1)    收藏  举报