如果我错了,请纠正我,但是,我相信try块中的语句将首先执行,然后,如果发生任何异常,则将执行finally块中的语句,然后再执行catch块中的语句。如果没有异常发生,则一旦执行try块中的语句并跳过catch块中的语句,就执行finally块中的语句。

如果我的上述概念没有弄错,那么我不明白为什么这段代码不起作用:

// sock is an object of the class Socket
public void run() {
    try {
        in = sock.getInputStream();
        scan = new Scanner(in);
        out = sock.getOutputStream();
        pw = new PrintWriter(out);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        sock.close();
    }
}

仍然说我需要在finally块中用try-catch包围语句。

最佳答案

不! 首先执行try块中的语句。然后,如果发生任何异常,则执行catch块语句。最后执行finally块。即使finally块中发生异常,try块也会被执行。换句话说,如果没有异常发生,则首先执行try块,然后执行finally块。

09-28 02:03