2012-10-11 17 views
5

Tôi đã tìm kiếm một số câu trả lời, nhưng không thể tìm thấy & do đó tôi nâng cao điều này như là một câu hỏi mới. Phương pháp đánh bắt trong try-catch. Nó là một phương pháp? , Nó lấy một đối tượng kiểu Exception như một đối số. Nhưng nếu phương thức của nó làCó bắt được một phương thức trong java không?

  1. Ai gọi phương thức này và đối tượng này được gọi là phương pháp nào?

  2. Bạn không thể viết định nghĩa phương thức bên trong định nghĩa phương thức khác bình thường. Nếu phương thức của nó là như thế nào, tôi có thể ghi bắt bên trong phương thức khác như thế nào?

  3. Nếu không phải là phương pháp, thì đó là phương pháp gì?

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

Đoạn mã trên có nghĩa là phương pháp bắt cơ thể là bên trong một phương pháp foo nội dung() 's.

Trả lời

11

Không, đó là một cấu trúc Java đặc biệt biểu thị một khối mã sẽ được chạy nếu một số Exception bị bắt, đây không phải là một phương thức. Đó là khối mã không có một tham số (của các loại), đó là ngoại lệ để bắt và sau đó đối phó với - nhưng điều này không làm cho nó một phương pháp.

Như đã chỉ ra trong nhận xét, nó tương tự như tuyên bố if (bạn có thể xem nó như tham số "tham số" là biểu thức boolean, nhưng tương tự, đây không phải là phương pháp.)

+0

Đó có phải là 'ex' (trong trường hợp này) là biến cục bộ không? hoặc một tham số? –

+0

@YoushaAleayoub Bạn có thể xem khái niệm dưới dạng tham số (loại), mặc dù có một số khác biệt. – berry120

5

đó là ngôn ngữ có cấu trúc tương tự như khi hoặc trong hoặc cho

0

Bắt không phải là phương pháp. khối try-catch cũng tương tự như khối do-while.

do{ 
    statements; 
} while (condition); 

Mỗi khối catch là một trình xử lý ngoại lệ và xử lý loại ngoại lệ được biểu thị bằng đối số của nó.

2

Ai gọi phương thức này và đối tượng này được gọi là phương pháp nào?

JVM thực hiện nếu ngoại lệ được chỉ định hoặc ngoại lệ có nguồn gốc được ném. Không gọi.

Bạn không thể viết định nghĩa phương thức bên trong định nghĩa phương thức khác bình thường.

Bạn không thể làm điều đó chút nào, ngoại trừ bằng cách viết một lớp ẩn danh, nhưng đó là một câu chuyện khác.

Vì vậy, nếu đó là một phương pháp

Nó không phải là.

làm cách nào để tôi có thể ghi bắt bên trong phương pháp khác?

Vì đây không phải là phương pháp.

Nếu đó không phải là phương pháp thì đó là gì?

Đó là cấu trúc ngôn ngữ, giống như thử, làm, trong khi, cho, chuyển đổi, trường hợp, lớp, giao diện, ... là.

Mã trên có nghĩa là nội dung phương thức bắt nằm bên trong một phương thức khác của foo().

Không, không phải vì phương pháp này.

Chắc chắn tất cả những mâu thuẫn này làm cho nó rõ ràng rằng nó không phải là một phương pháp?

+0

Có phải 'ex' (trong trường hợp này) là biến cục bộ không? hoặc một tham số? –

+1

@YoushaAleayoub Xem [JLS # 14.20] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20) được trích dẫn trong [câu trả lời khác] (http://stackoverflow.com/a/12836436/207421). – EJP

1

Đó là một khối như if, while chỉ chấp nhận một thông số được gọi là exception parameter.

Từ JLS #14.20. The try statement

Một tuyên bố try thực hiện một khối. Nếu một giá trị được ném và câu lệnh try có một hoặc nhiều mệnh đề catch có thể bắt được thì điều khiển sẽ được chuyển đến mệnh đề catch đầu tiên. Nếu câu lệnh try có mệnh đề là finally, thì một khối mã khác sẽ được thực hiện, bất kể khối try hoàn thành bình thường hay đột ngột, và cho dù mệnh đề catch có được kiểm soát lần đầu hay không.

Điều khoản catch có chính xác một tham số, được gọi là exception parameter.

CatchClause: 
    catch (CatchFormalParameter) Block