JAVA描述符

在使用Jmap打印对象或者程序中异常报错时,我们经常看到类似于[C,Ljava.lang.String等等这些字符那么他们代表什么含义呢,其语法形式又是什么样?每当我遇到他们时我都需要google,可能过于依赖网络就会是自己变得懒惰,现在我将这一内容记录下来希望能加强记忆也希望能够帮到和我遇到同样问题的人。

如上所说的字符其实是JAVA的描述符,在VMSpec中的第4.3节 有详细的描述。

描述符

一个描述符是一个域(field)或一个方法的字符表示形式。

描述符分两种域(Field)描述符和方法(Method)描述符

FieldType语法

  • FieldType:
    • BaseType
    • ObjectType
    • ArrayType

一个FieldType可以是BaseType、ObjectType、ArrayType中的任意一种

MethodDescritor语法

  • MethodDescriptor:
    • (ParameterDesciptor*) ReturnDescriptor

域的描述符可以表示类、实例、或者本地变量,其语法形式如下:

  • FieldDescriptor:
    • FieldType
  • ComponentType:
    • FieldType
  • FieldType:
    • BaseType
    • ObjectType
    • ArrayType
  • BaseType:
    • B
    • C
    • D
    • F
    • I
    • J
    • S
    • Z
  • ObjectType:
    • L ;
  • ArrayType:
    • [ ComponentType

其中FieldType各字符的含义如下表所示:
BaseType Character Type Interpretation
B byte signed byte
C char Unicode character
D double double-precision floating-point value
F float single-precision floating-point value
I int integer
J long long integer
L; reference an instance of class
S short signed short
Z boolean true or false
[ reference one array dimension

举例说明:
一个Object类型的实例其描述符为Ljava/lang/Object;
而double d[][][]的描述符则为[[[D,表示3维的double数组

方法描述符

其语法表示形式

  • MethodDescriptor:
    • (ParameterDescriptor*) ReturnDescritor
  • ParameterDescriptor:
    • FieldType
  • ReturnDescriptor:
    • FieldType
    • V

其中V表示返回void

例子:
Object myMethod(int i, double d, Thread t)
的描述符为:
(IDLjava/lang/Thread;)Ljava/lang/Object;

以上就是JAVA描述符的内容,在这里记录是为了以后再次见到不至于那么陌生,见得多了自然就熟了;-)

Meta

Published: May 4, 2012 Author: ivan Comments:   Word Count: 31
Bookmark and Share

Next: Java内存泄漏的一次诊断

Previous: Spring AOP的一些实践

Tags

descriptor java vmspec

Article Links

  1. docs.oracle.com 404 error. We're sorry, the page does not exist ...
Comments powered by Disqus