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?
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?
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
.
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
}
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
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.
thử bắt cuối cùng
thử bắt
thử cuối cùng
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.
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{
}
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ì.
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
}
bạn nên thêm giải thích – Zelldon
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
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