有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java jsr关键字是什么意思?

我正在看一些Java代码,我注意到以下几点:

if (!foo(bar, baz, qux)) {
    i = 0; jsr 433;
}

javac扼住了它,说它不是一个语句,在关键字jsr后面应该有一个分号

我在谷歌上搜索了一下,发现了some code containing the same thing,这让我相信它是故意存在的(尽管他们也无法让它编译)。那么jsr做什么呢?如何让包含它的代码进行编译


共 (6) 个答案

  1. # 1 楼答案

    JSR(代表跳转子例程)是Java虚拟机规范的一部分。它是JVM的指令集

    简述

    The address of the opcode of the instruction immediately following this jsr instruction is pushed onto the operand stack as a value of type returnAddress.

    这可以在JVM book 2nd edition上找到

  2. # 2 楼答案

    JSR代表Java规范请求

    这段代码可能有输入错误,应该是

    if (!foo(bar, baz, qux)) {
        i = 0; //jsr 433;
    }
    

    在我看来,似乎有人出于某种原因进行了一次非工作签入

    但是,看看这段代码,它看起来非常人工,所以它可能是反编译代码,正如Andreas_D所说的

    小更新:检查底部注释:

    /* Location:           C:\Users\Matteo\Downloads\FreeDownApplet.signed.jar
     * Qualified Name:     FreeDownApplet
     * JD-Core Version:    0.5.4
     */
    

    从这里,我想说,有人制作了一个经过模糊处理的签名jar文件,不管是谁发布了该代码,都对其进行了反编译

    更新2:谷歌搜索“JD核心”会产生http://java.decompiler.free.fr/作为第一个结果

  3. # 3 楼答案

    您最有可能看到的是反编译程序无法处理的某些代码的反编译结果。JSR是跳转子程序字节码的助记符;有关列表,请参见this page。因此jsr 432可能意味着在字节码地址432调用私有方法。但是,反编译器无法理解这一点,因此可能该方法是合成的,或者正在进行其他操作

    编辑

    您发现的谷歌示例肯定是反编译器的输出,看起来JSR部分要么是由于混淆、字节码修改/生成,要么是由于反编译器的填充

  4. # 4 楼答案

    我几乎可以肯定这段代码来自Java反编译器

    JSR 432闻起来像是一个反编译器注释,反编译器发现了一个“跳转”代码,但没有关于如何用java语言表达它的线索

  5. # 5 楼答案

    jsr 433不是有效的Java语句。这是一条VM指令,代表“跳转到子程序”(有关更多信息,请参阅VM Spec)。反编译器之所以插入它,是因为它不理解字节码指令(可能是混淆的),因此无法将其反编译为有效的Java源代码

  6. # 6 楼答案

    它不在list of Java keywords中。所以我不相信它有任何意义。我怀疑是否有可能编译它