Java 这在堆栈跟踪中意味着什么?
我在堆栈跟踪中看到: myorg.vignettemodules.customregistration.newscapegoryvapdao.getEmailContentByID(I)Lmyorg/pushemail/model/EmailContentJava 这在堆栈跟踪中意味着什么?,java,exception,stack-trace,Java,Exception,Stack Trace,我在堆栈跟踪中看到: myorg.vignettemodules.customregistration.newscapegoryvapdao.getEmailContentByID(I)Lmyorg/pushemail/model/EmailContent “(I)L”是什么意思?它意味着该方法接受int,并返回myorg.pushemail.model.EmailContent 从“L”到“;”的字符串是一个类型描述符,用于返回类型。括号内的内容是方法参数(在本例中,只有一个) 在中,这些类型
“
(I)L
”是什么意思?它意味着该方法接受int
,并返回myorg.pushemail.model.EmailContent
从“L”到“;”的字符串是一个类型描述符,用于返回类型。括号内的内容是方法参数(在本例中,只有一个)
在中,这些类型描述符被定义为Java虚拟机规范的一部分。显示所有使用的代码。编译类时,使用这种形式的描述符指定方法的签名以及字段和变量的类型
在Java序列化中,方法描述符是对Serializable
类进行哈希处理的信息的一部分
在RMI中,方法描述符是散列的,结果用于在远程接口中进行排序。这是一种用于消除方法重载歧义的方法。方法名称后面是一系列描述参数和返回类型的字符:参数顺序出现在括号内,返回类型紧跟在右括号之后。代码如下:
:Z
boolean
:B
byte
:C
char
:S
short
:I
int
:J
long
:F
float
:D
double
完全限定类名L
代码>:完全限定类
类型:类型的数组[
:V
void
因此,在你的例子中,
(I)Lmyorg/pushemail/model/EmailContent;
意味着该方法接受一个类型为int
的参数,并返回一个类型为myorg.pushemail.model.EmailContent的对象。这是一个小点,但我不认为这是名称篡改。名称篡改意味着向名称添加额外的内容。ZBC等正是java编码方法signatu的方式类文件中的res。它们不写布尔值,而是放一个Z。这样可以节省空间
根据wikipedia(标准免责声明适用),java中唯一的名称混乱涉及内部类和JNI。它说,在类myorg.vignettemodules.customregistration.NewsCategoryVAPDAO
中没有方法,该类被称为getEmailContentByID
,接受int
参数[由(I)表示]并返回一个名为myorg/pushemail/model/EmailContent
(以“;”结尾)的对象(由L宣布)
L和I字符用于表示Java内部类规范中的类名和整数。Sun网站上的某个地方记录了Java的名称损坏。有人应该查找它并从接受的答案链接到它。我只见过这个名称损坏与JNI一起使用;我从中得到的信息应该是对广告的评论阿姆罗森菲尔德的答案,不是答案本身。