jsr关键字是什么意思?

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

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

javac嘲笑它,说它不是一个声明,并且在关键字jsr之后预计会有分号。

我做了一些谷歌搜索,我发现一些代码包含相同的东西 ,这使我相信它是故意的(即使他们也无法编译)。 那jsr做什么? 如何获取包含它的代码进行编译?

我很接近这个代码来自Java反编译器。

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

您很可能会查看反编译器无法处理的某些代码的反编译结果。 JSR是跳转子程序字节码的助记符; 请参阅此页面以获取列表。 因此, jsr 432可以表示在字节码地址432处调用私有方法。 但是,反编译器无法解决这个问题,因此该方法可能是合成的,或者其他方法正在进行中。

编辑

您发现的Google搜索示例肯定是反编译器输出,看起来JSR的部分是由混淆,字节码修改/生成或反编译器填充引起的。

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

JSR代表Java Specification Request。

该代码中可能存在拼写错误,应该是这样的

 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/作为第一个结果。

它不在Java关键字列表中 。 所以我不相信它有任何意义。 我怀疑是否可以编译它。

JSR (代表Jump Subroutine)是Java虚拟机规范的一部分。 它是JVM的指令集。

简要描述;简介

紧跟在此jsr指令之后的指令的操作码的地址被作为returnAddress类型的值压入操作数堆栈。

这可以在JVM第2版上找到 。