2013-06-26 18 views
13

Tôi đang cố gắng sử dụng khối cuối cùng mà không sử dụng các khối try/catch nhưng nhận được lỗi trong Eclipse.Có hợp lệ để cuối cùng chặn mà không thử và bắt không?

Tôi có thể sử dụng khối cuối cùng mà không sử dụng khối try/catch không?

+0

Thậm chí nếu bạn có thể đặt một 'finally' mà không có một' try' cách bạn muốn 'finally' bạn cư xử nếu bạn sử dụng một' goto' để bỏ qua 'tuyên bố finally'? 'cuối cùng' chỉ liên quan đến mã nó được đánh dấu là có liên quan với việc sử dụng câu lệnh' try'. Nếu không thì hành vi sẽ rất khó chịu. – CodeCamper

+0

Bạn có nghĩa là trường hợp sử dụng thử-với-cuối cùng, với ra bằng cách sử dụng khối catch? Tôi nghĩ bạn không thể chỉ sử dụng "cuối cùng". nó nên được với một số khối thử. – user1923551

Trả lời

12

finally phải có ít nhất một khối try, catch là tùy chọn. Điểm cuối cùng của khối là đảm bảo mọi thứ được dọn dẹp cho dù một ngoại lệ có bị ném hay không. Theo JLS

Một khoản cuối cùng đảm bảo rằng các khối cuối cùng được thực hiện sau khối try và bất kỳ khối catch mà có thể được thực thi, bất kể như thế nào kiểm soát rời khỏi khối try hoặc khối catch.

Do đó, finally phải luôn đứng trước khối try.

5

Bạn phải có khối try với khối finally. Khối try xác định dòng mã nào sẽ được theo sau bởi mã finally. Nếu một ngoại lệ được ném trước khối try, mã finally sẽ không thực thi.

Thêm catch khối là không bắt buộc:

try { 

    // something 

} finally { 
    // guaranteed to run if execution enters the try block 
} 
1

Các khối finally luôn thực hiện khi các lối ra khối try. Vì vậy, bạn có thể sử dụng cuối cùng mà không bắt nhưng bạn phải sử dụng thử.

Để biết thêm chi tiết kiểm tra doc đây

0

Từ Oracle Trails:

Các khối finally luôn thực hiện khi các lối ra khối try. Điều này đảm bảo rằng khối cuối cùng được thực hiện ngay cả khi một ngoại lệ bất ngờ xảy ra.

Từ tuyên bố ở trên, cuối cùng bạn không thể tự mình chặn một mình. dưới đây là các kết hợp được phép.

  1. thử bắt cuối cùng

  2. thử bắt

  3. thử cuối cùng

0

Mã trong khối finally được đảm bảo để thực hiện nếu dòng điều khiển chương trình vào các cor đáp ứng khối try. Vì vậy, không có ý nghĩa gì khi có một số finally mà không có số try.

Ngoại lệ duy nhất cho điều này là nếu chương trình gặp một cuộc gọi System.exit(...) trước khối finally, khi tắt máy ảo.

0

Không bạn không thể

bạn có thể sử dụng Try-catch-finally hoặc try-finally

try { 

    }catch (Exception e){ 

    } 
    finally{ 

    } 

hoặc

try { 

    } 
    finally{ 

    } 
1

Lý do tại sao bạn không thể có một finally mà không có một try là bởi vì bạn thể có nhiều trạng thái finally ments trong cùng một phạm vi và try cho biết khối mã số finally liên quan đến trong trường hợp xảy ra lỗi.

Một tính năng thú vị khác của finally là nó phải thực thi bất kể khi nào nhập try. Ví dụ: nếu bạn sử dụng số goto để bỏ qua câu hỏi finally của mình? Nếu số goto nằm trong số try, nó sẽ thực thi tuyên bố finally tuy nhiên nếu số goto ở trên/ngoài tuyên bố try thì nó sẽ bỏ qua mã finally. finally chỉ liên quan đến mã được bao quanh trong số try. Nếu bạn không thử thì finally không liên quan đến bất kỳ thứ gì.

1
  • Chỉ sử dụng khối thử không chính xác.
  • Thử chặn có thể được sử dụng chỉ với một khối từ bắt hoặc cuối cùng là khối .
  • Bạn có thể sử dụng khối thử với bắt và cuối cùng.Nếu bạn sử dụng cuối cùng khối với khối thử sau đó bắt khối trở thành tùy chọn.
2
try { 
    // Block of code with multiple exit points 
} 
finally { 
    // Block of code that must always be executed when the try block 
    // is exited, no matter how the try block is exited 
} 
+2

bạn nên thêm giải thích – Zelldon