Java異常處理:如何寫出「正確」但被編譯器認爲有語法錯誤的程序

文章的標題看似自相矛盾,然而我在「正確」二字上打了引號。咱們來看一個例子,關於Java異常處理(Exception Handling)的一些知識點。less

看下面這段程序。方法pleaseThrow接受一個Exception的實例,而後簡單地將該實例拋出。而後調用這個方法時,我傳入了一個SQLException的實例。由於pleaseThrow的調用包裹在一個try catch塊裏,ui

問題:plesseThrow方法拋出的SQLException能夠成功被catch住麼?code

public class ExceptionForQuiz<T extends Exception> {

      private void pleaseThrow(final Exception t) throws T {

             throw (T) t;

      }

     public static void main(final String[] args) {

          try {

               new ExceptionForQuiz<RuntimeException>().pleaseThrow(new SQLException());

          }

         catch( final SQLException ex){

              System.out.println("Jerry print");

              ex.printStackTrace();

        }

}

}

答案:上面這段代碼有語法錯誤,不能經過編譯!io

咱們來一步步分析。編譯

Java類ExceptionForQuiz使用了一個泛型語法,T extends Exception意思是這個泛型類實例化的時候,傳入的類型參數T必須是Exception以及它的子類。class

我在實例化類ExceptionForQuiz時,傳入的類型參數是RuntimeException。泛型

相關文章
相關標籤/搜索