源代码

public class TestClass3 {
    public void test () throws Exception {
        try {
            InputStream is = new FileInputStream( "test.txt" );

            ServerSocket serverSocket = new ServerSocket(9999);
            serverSocket.accept();
        } catch (FileNotFoundException ex) {

        } catch (IOException ex) {

        } catch (Exception ex) {

        } finally {
            System.out.println( "finally" );
        }
    }
}

由于大部分的内容在前两节都已经分析过了, 这一节主要分析异常表, 而在代码中主要在test方法中进行 了异常的捕捉, 所以我们下面主要针对test方法的字节码进行分析

分析

  • InputStream is = new FileInputStream( "test.txt" );

  • ServerSocket serverSocket = new ServerSocket(9999);

  • serverSocket.accept();

  • catch代码块

  • JVM生成的异常对象

  • 异常表分析

小结

在程序代码中, 我们认为Exception会处理所有的异常, 但是对于JVM来说不是这么认为的, catch type为0则表
示JVM处理所有的异常

利用异常表来对异常进行处理时, 如果存在finally语句块, JVM会将finally语句块的字节码(或者助记符表示)
拼接到每一个catch块后面, 换句话说, 程序中一个try语句存在多少个catch块, 就会在每一个catch块后面重
复多少个finally语句块的字节码

results matching ""

    No results matching ""