Mọi người cho mình hỏi, sau khi exception trong một khối try được ném thì biến tham chiếu sẽ như nào?
Biến tham chiếu trong khối try sau khi ngoại lệ được ném?
Lúc đó nó như thế nào thì sau khi vào try nó sẽ như thế ấy.
khi mình tạo 1 tham chiếu local, thì sau khi thoát ra sẽ như nào vậy bạn? ý mình là local
Bạn dùng ngôn ngữ nào, đưa code thật ngắn của bạn ra làm ví dụ và thêm tag vào thớt này nhé. Cấm chụp ảnh code, hãy copy code lên đây.
public static void main(String[] args)
{
try
{
Shape shape = new Shape(10,-5);
}
catch(Exception e)
{
to something
}
}
đây ạ, ví dụ cái hàm kia mà có excaption, nó nhảy ra ngoài.
Thế thì biến số shape mất tiêu luôn, không đụng vào được nữa, còn nếu bạn khai báo shape ở ngoài try thì truy cập được, nhưng còn tùy code bị văng chỗ nào nữa, lúc đó shape trong catch nếu bạn truy cập được thì hoặc là chưa được cấp dữ liệu, hoặc nó sẽ ở một trạng thái nào đó, cái này tùy code.
ok, cảm ơn b. nó cũng chỉ là các biến địa phương thông thương, sau khi ra khỏi block thì nó bị xóa đúng k ạ.
Về mặt logic thuật toán thì nó sẽ bị xóa, nhưng thật ra là bạn chỉ mất dấu nó thôi, jvm nó dùng hệ thống thu hồi bộ nhớ đặc biệt của nó.
Không hẳn là nó bị xoá mà nó là rác, vẫn sẽ tiêu tốn tài nguyên đến khi bị dọn.
Có những loại tài nguyên bạn có thể để đó cũng không sao, ví dụ như cái shape trong ví dụ của bạn.
Nhưng có những loại tài nguyên tuyệt đối không được khai báo trong khối try mà phải khai báo ở ngoài và khởi tạo trong khối try, ví dụ connection đến một database, để đảm bảo nó không bị mất dấu và có thể close ở trong khối finally.