Java 框架是什么以及如何构建?

问题描述 投票:0回答:3

我知道这个问题有点傻。

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

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

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

谁能解释一下这个?

java frameworks
3个回答
3
投票

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

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

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


1
投票

我不是专家,但是...

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

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

仅供参考,.NET 是相同的,是用 .NET 编写的框架,其中充斥着本机调用。


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 获取上面的代码。

© www.soinside.com 2019 - 2024. All rights reserved.