Tôi là một tân binh Java và tôi đã tự hỏi, nếu tôi có mã Java điển hình sau đâyTrong Java, khối "cuối cùng" có được bảo đảm được gọi (trong phương thức chính) không?
public class MyApp {
public static void main(String[] args) {
try {
// do stuff
} catch {
// handle errors
} finally {
// clean up connections etc.
}
}
}
không JVM đảm bảo rằng các khối cuối cùng sẽ luôn luôn được chạy? Để hiểu nơi tôi đến từ, tôi đang sử dụng để C/C + + chương trình có thể chỉ sụp đổ nếu bạn dereference một con trỏ NULL và bạn không thể có bất kỳ mã để được chạy sau đó.
Nhưng như tôi hiểu Java và toàn bộ doanh nghiệp bộ nhớ GC/quản lý nói chung, không có điều gì như một dereferencing null con trỏ, tất cả mọi thứ là một khai thác dễ bắt, do đó, không thực sự là một cách để chương trình của tôi sụp đổ mà có thể làm cho nó bỏ qua cuối cùng, hay là có? Ví dụ: trong Python, tôi thường làm
try:
# do stuff
except AnExceptionIKnewMightHappen:
# react in an appropriate way
except:
# log that weird error I had not known could happen
và tôi chưa bao giờ có bất kỳ ứng dụng nào bị chết mà không đi qua mã của tôi.
Tất nhiên, nếu hệ điều hành đối với một số lý do giết chết quá trình (hoặc nếu có điều gì giết chết toàn bộ hệ thống, như kéo phích cắm) không có nhiều Java có thể làm. Ngoài ra, từ PHP tôi biết các lỗi không thể bắt được mà bạn không thể bảo vệ chống lại, mặc dù thông dịch viên vẫn còn ở đó sau khi nó xảy ra (ít nhất nó có thể xuất ra một thông báo thích hợp).
Edit: Chỉ cần cho rõ ràng (nó đã không thực sự hiểu lầm bởi bất cứ ai), hãy để tôi nói thêm rằng tôi đang tìm kiếm những thứ bên trong mã của tôi mà có thể dẫn tới việc cuối cùng bị bỏ qua. Vì vậy, trỏ đến System.exit là một lời nhắc hữu ích, mặc dù tôi không thể thấy lý do tại sao tôi muốn làm một cái gì đó như thế.
Các JVM thoát là một cách khá rõ ràng và tôi muốn tính đó là một nguyên nhân bên ngoài. Những lưu ý chỉ ra rằng bạn cũng phải nhớ possibilty của đề thoát trong khi JVM và ứng dụng tiếp tục chạy was very helpful, bởi vì mặc dù nó cũng có vẻ hiển nhiên đối với tôi bây giờ, tôi đã không nghĩ đến nó.
Gee, đó là câu trả lời nhanh. Rõ ràng là một câu hỏi rất noob. Dù sao cũng cảm ơn bạn! –
Trả lời là không, xem chi tiết tại đây: http://tshikatshikaaa.blogspot.nl/2012/07/about-using-systemexit-in-try-catch.html – JVerstry