Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JVM上尖括号中的标识符导致内部方法错误_Java_Jvm_Identifier_Jls_Verifyerror - Fatal编程技术网

Java JVM上尖括号中的标识符导致内部方法错误

Java JVM上尖括号中的标识符导致内部方法错误,java,jvm,identifier,jls,verifyerror,Java,Jvm,Identifier,Jls,Verifyerror,以下代码使用了名为的方法,但被JVM以VerifyError拒绝: class Foo { static void `<traitinit>`() // pseudocode identifier, not possible in Java { } static void test() { `<traitinit>`() // call the <traitinit> method } } 由

以下代码使用了名为
的方法,但被JVM以
VerifyError
拒绝:

class Foo
{
    static void `<traitinit>`() // pseudocode identifier, not possible in Java
    {
    }

    static void test()
    {
        `<traitinit>`() // call the <traitinit> method
    }
}

由于JVM已经将
用于构造函数和类初始值设定项,因此这似乎是一条合理的错误消息。然而,JVM规范中有没有明确定义什么是
内部方法的章节?我猜它只保留上面的两个特定标识符,但事实似乎并非如此。

我自己找到了JVM规范的相关部分()

4.2.2. 非限定名称 方法、字段、局部变量和形式参数的名称存储为非限定名称。非限定名称必须至少包含一个Unicode代码点,并且不得包含任何ASCII字符;[/(即句号、分号、左方括号或正斜杠)

方法名称进一步受到限制,因此除了特殊方法名称
(§2.9)之外,它们不得包含ASCII字符(即左尖括号或右尖括号)

(强调矿山)

java.lang.VerifyError: Illegal call to internal method
 Exception Details:
  Location:
    foo/bar/Foo.test()V @5: invokestatic
  Reason:
    Error exists in the bytecode