2012-10-11 31 views
5

我已經搜索了一些答案,但找不到&,因此我將此作爲一個新問題提出來。 try-catch中的catch方法。這是一種方法嗎?它將Exception類型的對象作爲參數。但如果它的方法,在java中捕捉方法嗎?

  1. 誰調用此方法,並通過哪個對象調用此方法?

  2. 您不能在另一個方法定義中正常編寫方法定義。因此,如果它的方法,我怎麼能夠在另一個方法中寫入catch?

  3. 如果它不是一種方法,那麼它是什麼?

    public void foo() { 
    
        try { ; 
    
        } catch (Exception ex) { 
    
          ; // this is catch method body 
         } 
    
    } 
    

上面代碼裝置捕獲方法的身體內的另一個方法foo()的身體。

回答

11

不,這是一個特殊的Java構造,表示如果發現一個Exception被運行的代碼塊,它不是一個方法。該代碼塊確實需要一個參數(各種),這是一個例外,然後處理 - 但這並不是一種方法。

正如在評論中指出的,它與if語句類似(可以將其視爲採用布爾表達式的「參數」,但同樣這不是一種方法)。

+0

那是'ex'(在這種情況下)的本地變量?或一個參數? –

+0

@YoushaAleayoub儘管存在一些差異,但您可以從概念上將其視爲(類型)參數。 – berry120

5

這是一種語言結構,類似於if或while或

0

Catch不是一種方法。 try-catch塊與do-while塊類似。

do{ 
    statements; 
} while (condition); 

每個catch塊都是一個異常處理程序,並處理由其參數指示的異常類型。

2

誰調用此方法以及通過哪個對象調用此方法?

JVM 執行它如果指定的異常或派生的異常被拋出。沒有打電話。

通常不能在另一個方法定義內寫入方法定義。

除了編寫一個匿名類以外,你完全不能這樣做,但這是另一回事。

所以,如果它是一個方法

它不是。

我怎麼能夠在另一種方法中寫catch?

因爲它不是一種方法。

如果它不是一種方法,那麼它是什麼?

它是一種語言結構,就像try,do,while,for,switch,case,class,interface,...一樣。

上面的代碼表示catch方法體是在另一個方法foo()的內部。

不,它不是,因爲它不是一種方法。

當然,所有這些自相矛盾都明顯表明它不是一種方法嗎?

+0

那是'ex'(在這種情況下)是一個局部變量嗎?或一個參數? –

+1

@YoushaAleayoub查看[JLS#14.20](http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20)在[另一個答案]中引用(http:///stackoverflow.com/a/12836436/207421)。 – EJP

1

它是一個像if,while這樣的塊,它只接受一個稱爲exception parameter的參數。

JLS #14.20. The try statement

一個try執行語句塊。如果拋出一個值並且try語句有一個或多個可以捕獲它的catch子句,則控制權將轉移到第一個這樣的catch子句。如果try語句有finally子句,則執行另一個代碼塊,而不管try塊是正常還是突然完成,並且不管catch子句是否首先給予控制。

A catch子句只有一個參數,稱爲exception parameter

CatchClause: 
    catch (CatchFormalParameter) Block