2

我知道这个问题有点傻。

我是一名 Java 程序员,以前从未研究过 Java 源代码,我一直在使用 Java(官方)框架(例如 javax.swing. 、java.util.、java.collection.* 和 blah blah)来构建一些应用程序.

现在我尝试查看 Java 源代码(我是黑盒编程范式的受害者),发现源代码完全是用 Java 编写的。现在,我很困惑,Java 正在使用什么框架(Java 源代码中的那个,我在这里知道有点困惑)来形成我们这么多使用的框架?

真诚地,我希望在 Java 源代码中看到一些汇编类型的代码,但实际上并非如此。我“感觉”我们使用的普通框架(java ...、javax... 并不是 JVM 的最低入口点。一定有比这“更低”的东西。

任何人都可以解释一下吗?

4

3 回答 3

3

大多数 Java 库(您称之为框架)都是用 Java 编写的。解释编译字节码的 JVM 大部分是用 C++ 实现的,并且该库确实包含用低级语言(C 或 C++)编写的“本机”方法。

方法是用较低级别的语言编写的,原因只有两个:平台依赖性(每个平台上必须不同的东西)和性能(一直被使用并受益于本机代码的东西)。

最终结果是几乎所有库都与平台无关,不必为每个平台重写。非 Java 代码的范围仅限于必须是平台特定的东西。

于 2012-10-11T04:03:57.527 回答
1

我不是专家,但...

JVM 将 Java 源代码转换为机器代码。所以这是最低级别,一旦你拥有运行 Java 源代码(JVM)的东西,那么你就可以围绕它(在 Java 中)创建一个框架。

也就是说,仍然有一些本机操作系统函数调用——抱歉,我对它们了解不多。

仅供参考 .NET 是相同的,用 .NET 编写的框架,带有本地调用。

于 2012-10-11T03:53:49.447 回答
1

Java源代码:用Java程序语言编写的一些代码

javac:一个命令行实用程序,用于将Java源代码编译为类文件(包含字节码)

jvm:加载类文件,并执行该文件中的字节码。

字节码:一个指令集,看起来像汇编语言。一条指令的长度是一个字节(这就是为什么它被称为字节码)。

JNI:Java Native Interface(主要由C/C++编写),扩展Java程序能力的接口,用java很难/无法实现,比如一些关于OS的程序。

字节码是这样的:

public static void main(java.lang.String[]);
Code:
    0: ldc           #16                 // String a a \"fsd  fsd\" sfd gfd  \"fs  d\"
    2: astore_1
    3: getstatic     #18                 // Field java/lang/System.out:Ljava/io/PrintStream;
    6: aload_1
    7: invokestatic  #24                 // Method t:(Ljava/lang/String;)Ljava/lang/String;
    10: invokevirtual #28                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
    13: return

您可以使用命令实用程序 javap 获取上面的代码。

于 2012-10-11T05:01:43.493 回答