2009-07-06 22 views
31

Tôi đang cố gắng theo dõi rò rỉ bộ nhớ trong quá trình java, sử dụng jmapjhat. Mỗi khi tôi làm điều này, tôi thấy các ký pháp kỳ lạ cho các loại đối tượng cụ thể, như [S cho mảng chuỗi và [C cho mảng Ký tự. Tôi không bao giờ nhớ những gì có nghĩa là gì, và nó rất khó để google công cụ này.Những tên lớp lạ trong một bãi chứa java nghĩa là gì?

(EDIT: để chứng minh quan điểm của tôi, nó chỉ ra rằng [S là mảng ngắn và [C là mảng của char.)

Bất cứ ai quan tâm để làm một bảng liệt kê tất cả các tên lớp khác nhau và những gì họ nghĩa là? Hoặc chỉ cho tôi bàn như vậy?

Cụ thể tôi muốn biết ý nghĩa của phương tiện [Ljava.lang.Object;.

+0

mảng của chuỗi nên _ [Ljava/lang/String; _. –

+0

Trong quốc phòng của tôi, googling đã dẫn tôi đến một bài viết trên java.sun.com trong đó có dòng này: "Các đối tượng mảng String và ký tự, [S và [C, luôn luôn là cao trên danh sách này". Hơi gây hiểu nhầm. – itsadok

+0

Trang web này cũng có một số thông tin tốt: https://communities.ca.com/web/ca-wily-global-user-community/wiki/-/wiki/Main/JNI+Signatures/contactLink – masterxilo

Trả lời

55

Bạn sẽ tìm thấy danh sách đầy đủ tài liệu dưới Class.getName():

Nếu đối tượng lớp này đại diện cho một loại tài liệu tham khảo mà không phải là một loại mảng sau đó tên nhị phân của lớp được trả lại, theo quy định theo số Java ™ Đặc điểm ngôn ngữ, Thứ hai Ấn bản.

Nếu đối tượng lớp này đại diện cho một loại nguyên thủy hoặc bãi bỏ, sau đó tên trở là một String bằng Java từ khóa ngôn ngữ tương ứng với các loại nguyên thủy hoặc vô hiệu.

Nếu đối tượng lớp này đại diện cho một lớp của mảng, sau đó hình thức nội bộ của tên bao gồm tên của các loại nguyên tố trước bởi một hoặc hơn '[' nhân vật đại diện cho độ sâu của tổ mảng .Mã hóa tên loại nguyên tố là như sau:

 
Element Type  Encoding 
boolean    Z 
byte    B 
char    C 
class or interface Lclassname; 
double    D 
float    F 
int     I 
long    J 
short    S 
14

nó là một mảng của các đối tượng theo quy định của JVM Specifications cho đại diện bên trong của tên lớp:

  • một đơn [phương tiện một mảng của
  • L theo sau là một tên lớp đầy đủ (ví dụ java/lang/Object) là tên lớp chấm dứt bằng dấu chấm phẩy;

vậy [Ljava.lang.object; nghĩa Object []

+0

Phần 4.3.2 là có lẽ là một tài liệu tham khảo tốt hơn. –

+0

liên kết đó không thực sự mô tả các quy ước được sử dụng bởi Class.getName() - trên thực tế, biểu diễn đặt tên nội bộ là khá khác nhau – kdgregory

+0

Class.getName() không bao giờ được trích dẫn bởi itsadok ... – dfa

5

Các quy tắc được liệt kê trong doc API của Class.getName().

[Ljava.lang.Object; sẽ là phiên bản Object[]. Lưu ý rằng các mảng đa chiều được hiển thị với nhiều dấu ngoặc mở.

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