为什么Java平台在理论和平台上独立于实践?

Lui*_*ano 8 java platform

我知道Java的一个重要特点就是它与平台无关,只要你不使用库就可以创建Java应用程序并让它在Windows,Linux,Mac等运行.特定于一个操作系统,并且只要您为相应的操作系统安装了JVM以正确解释事物...

但是,为什么普通的计算机Java程序(如在Java中的简单Hello World,例如Windows或Linux)在手机中运行时也是如此,当时手机也安装了特定的JVM以正确解释事物?

为什么有必要在某些情况下更改程序的体系结构,例如Android开发,或者使用Java ME来创建特定于某些普通手机的应用程序?

我知道有些功能与操作系统的某些功能有关,例如可能不适用于移动平台,例如与控制台,输入法等相关的一些功能,但这是真正的唯一原因这使得事情不兼容?如果是这样,为什么一个只是声明和初始化整数变量的简单应用程序不能在所有具有JVM可用的非移动和移动平台上运行?

我知道之前发布过的其他问题,比如这个问题,但是我没有把重点放在我的目标上.

Sim*_*onJ 8

要查看的可移植性单元是一个而不是一个应用程序.声明和初始化整数变量的类在您描述的所有平台上运行,还有许多其他平台运行.他们理解相同的字节码,即使他们使用不同的机制执行它,从字节码解释器到JIT编译,再到Android的Dalvik(将JVM字节码转换成自己的指令集).

即使我们超越单个整数变量,使用"核心"功能的Java 可以在大多数这些设备上运行.J2ME,Android和J2SE之间存在很多共同点(尤其是后两者--J2ME旨在作为资源有限的设备的标准Java API的简化版本,因此可用的标准API较少).

在Windows/Mac/Linux系统上,应用程序通常是您明确启动,使用的,并且 - 当您完成时 - 告诉它退出.将此与Android手机进行比较:应用程序可能是为了响应事件发生而启动的(可能是传入的SMS,或从Web下载的特定类型的文件),在这种情况下,它需要知道它是如何以及为什么开始 - 一个简单的public static main(String[] args)只是没有削减它.一旦启动,应用程序需要知道"低电量"或"进入待机模式"等事件,以释放资源或禁用可能耗尽电池的CPU密集型功能(如GPS).

这些并不是模糊的功能 - 它们对于手机作为手机非常重要 - 因此所有本机应用程序都必须处理它们.


小智 5

编译 Java 代码时,会生成独立于系统的字节代码(类文件)。该字节码被馈送到驻留在系统中的 JVM(Java 虚拟机)。由于每个系统都有自己的 JVM,因此编译源代码的位置并不重要。编译器生成的字节码可以被任何机器的任何JVM解释。因此它被称为平台无关语言。

谢谢