2011-12-20 34 views
6

Tôi đang lược tả một ứng dụng java và số đối tượng được phân bổ lớn nhất có tên com.x.y.ClassName$5.Đồng đô la theo sau là chỉ số có nghĩa là gì trong tên lớp?

Cả trình biên tập netbeans và bộ công cụ của bạn đều sử dụng cùng quy ước đặt tên. Tôi đang thua lỗ về cách đặt vấn đề đặt tên cho google.

$5 sau tên lớp là gì?

EDIT: Có vẻ như $ 5 là lớp ẩn danh thứ năm được khai báo. Tôi đã sử dụng javap trên lớp được tạo để tìm lớp học ẩn danh thứ năm. Tài liệu tham khảo được tìm thấy trong How to match compiled class name to an enum member in Java?

Trả lời

19

com.x.y.ClassName $ 5 có nghĩa là "lớp bên trong vô danh thứ năm trong com.x.y.ClassName"

+0

Wow, câu trả lời nhanh. Có cách nào để nói lớp bên trong nào là thứ 5 không? – bbaja42

+0

Tôi không biết cách nào để làm điều đó. Vì vậy, tôi không hài lòng với câu trả lời của riêng tôi. Nói "thứ năm" mà không nói thứ tự cụ thể giống như nói "một số ngẫu nhiên". Tuy nhiên, nếu bạn có một trình giải mã tốt như [JD] (http://java.decompiler.free.fr/) có thể cho bạn thấy mã của bất kỳ lớp bên trong nào –

+1

Tôi nghĩ rằng đó là thứ tự mà chúng được khai báo .. Dù sao, bạn có thể ghi đè lên toString() để cung cấp một số biểu diễn có ý nghĩa trong trình gỡ rối. – fortran

1

Một số links để giúp bạn. Ngoài ra, hãy xem polygenelubricant's câu trả lời

bạn nhận được com.x.y.ClassName $ 5. khi lớp học của bạn có chứa một anonyomous lớp bên

sample8.class 
    sample8$1.class 
    sample8$2.class 
    sample8$klass.class 
    sample8$klass$1.class 

Ví dụ

public class sample8 { 


     private class klass{ 
      void vodka() { 
       sample8 _s = new sample8() { 

       }; 

      } 
     } 
     sample8() { 
       klass _k = new klass(); 
       _k.vodka(); 
      } 


    public static void main(String args[]) 
    { 
    } 

    sample8 _s = new sample8() { 

    }; 

    sample8 _s1 = new sample8() { 

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