Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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框架?_Java_Compiler Construction_Frameworks - Fatal编程技术网

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

什么以及如何构建Java框架?,java,compiler-construction,frameworks,Java,Compiler Construction,Frameworks,我知道这个问题有点傻 我是一名Java程序员,以前从未研究过Java源代码,我一直在使用Java(官方)框架(例如javax.swing.,Java.util.,Java.collection.*和诸如此类)来构建一些应用程序 现在,我尝试查看Java源代码(我是黑盒编程范例的受害者),发现源代码完全是用Java编写的。现在,我很困惑,Java(在Java源代码中,我知道这里有点混乱)正在使用什么框架来形成我们正在使用的框架 诚恳地说,我希望在Java源代码中看到一些汇编类代码,但事实并非如此。

我知道这个问题有点傻

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

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

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

有人能解释一下吗?

我不是专家,但

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

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

FYI.NET也是一样,框架是用.NET编写的,到处都是本机调用。

大多数Java库(您称之为框架)是用Java编写的。解释编译的字节码的JVM大部分是用C++实现的,而且库中确实包含了用较低层语言(C或C++)编写的“原生”方法。p> 方法是用较低级别的语言编写的,原因只有两个:平台依赖性(在每个平台上必须有所不同)和性能(一直被使用并从本机代码中获益的东西)


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

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

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

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

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

JNI:Java本机接口(主要由C/C++编写),一个扩展Java程序能力的接口,很难/无法使用Java实现,例如一些关于操作系统的程序

字节码是这样的:

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

不知道它是否算作框架,但是Swing根据平台的不同使用DirectX和OpenGL……我只是不明白我们正在使用的Java框架如何实际将自己用作框架。