2013-06-10 34 views
6

tôi đã tự hỏi làm thế nào một lớp lồng nhau làm việc trong một vòng lặp for:Lớp lồng nhau trong vòng lặp, sẽ có n trường hợp của lớp?

  • sẽ là đối tượng của lớp bị phá hủy sau mỗi lần cho interation?
  • trường hợp của lớp học có bị tự động hủy bởi "rác" không?
  • khi vòng lặp for kết thúc sẽ đối tượng từ lớp lồng nhau tồn tại trong bộ nhớ? nó có thể được thu hồi từ những nơi khác trong chương trình không?

Đây là mã:

class Outer { 
    int outer_x = 100; 

    void test() { 
    for(int i=0; i<10; i++) { 
     class Inner { 
     void display() { 
      System.out.println("display: outer_x = " + outer_x); 
     } 
     } 
     Inner inner = new Inner(); 
     inner.display(); 
    } 
    } 
} 

class InnerClassDemo { 
    public static void main(String args[]) { 
    Outer outer = new Outer(); 
    outer.test(); 
    } 
} 

Trả lời

9

Có một định nghĩa lớp bên trong một phương pháp chỉ là cú pháp: nó vẫn là một định nghĩa lớp hoàn toàn bình thường.

Đối với Inner đối tượng (new Inner()) bạn tạo, có nghĩa là:

  • từng đối tượng sẽ được hưởng thu gom rác thải giống như bất kỳ đối tượng khác, ngay sau khi vòng lặp
  • có, đối tượng cuối cùng sẽ bị thu gom rác
  • đối tượng sẽ kéo dài cho đến khi thu thập rác, nhưng sẽ không thể truy cập từ những nơi khác (vì không có tham chiếu đến nó bị rò rỉ).

Đối với các lớp học riêng của mình, điều này có nghĩa là:

  • lớp sẽ được nạp như bình thường (chỉ một lần)
  • lớp sẽ không được tái nạp vào mỗi lần lặp
  • lớp thậm chí sẽ không được tải lại vào lần gọi thứ hai của test
  • lớp này có thể được GC theo các quy tắc bình thường của các lớp GCing (khá nghiêm ngặt)
+0

Tôi nghĩ rằng, * đối tượng của lớp * là tham chiếu đến cá thể 'Lớp' của' Nội bộ'. –

+0

@Andreas_D: Tôi nhận ra rằng anh ấy có thể có ý đó và mở rộng câu trả lời của tôi. –

-1

GC hoàn toàn phụ thuộc vào JVM . Nó sẽ thực thi nếu bộ nhớ trong thấp, và GC có cơ hội.

+0

Điều này liên quan đến câu hỏi như thế nào? Nó không đề cập đến bất kỳ câu hỏi nào của OP. –

0
  • số Các đối tượng sẽ lang thang trên đống cho đến khi đá GC trong.
  • Vâng, một khi đá GC trong.
  • Nó sẽ không tồn tại. Không, nó không thể.

Nếu bạn, ví dụ, thông qua trong trường hợp lớp bên ngoài (this) vào lớp bên trong thông qua các nhà xây dựng và giao cho lĩnh vực của lớp Nội, trong trường hợp đó các đối tượng lớp Inner sẽ ở lại trong bộ nhớ như miễn là thể hiện lớp bên ngoài được sử dụng ở đâu đó.

Các vấn đề liên quan