第一个当你调用
public static void showExce()throws Exception;这个方法在编译器看来它只是申明了有可能会抛异常,虽然你写的代码是一定有抛异常的,当在编译器看来该方法只是可能会抛异常,至于抛不抛在编译阶段还不能得出结果只有等到程序运行才能确定最后是否抛异常,所以你在调用该方法的下面写代码是可以编译通过的。
而第二个例子,你指直接在try里面写了throw new Exception();在编译时就确定了当代码执行到这里时一定是会抛异常的,所以其后面的代码将不会被执行,所以写了也是白写,此时编译将不能通过,主要是提示你后面的代码将不会被执行,避免在程序运行中出现错误。