Java跨平台吗?

时间:2011-05-12 12:30:12

标签: java cross-platform

我想开发一个跨平台的应用程序。

Java跨平台吗?我的意思是,我可以在Windows中开发Java应用程序并在Mac OS X和Linux中使用它吗?

如果是,怎么样?

我发现用Java编写的应用程序有两个安装文件,一个用于Windows,另一个用于Mac。这让我很困惑。

任何插图或建议都将受到高度赞赏。

9 个答案:

答案 0 :(得分:43)

  

Java是一个跨平台吗?

Java是跨平台的,因为编译的 Java程序在存在JVM的所有平台上运行。 (适用于所有主要操作系统,包括Windows,Mac OS和Linux。)

  

我是说我可以在Windows中开发Java应用程序并在mac和Linux中使用它?

是的,这是可能的。

这(以及安全方面)是在虚拟机中运行程序的主要优点之一。

  

如果是,如何?

  • 用Java编写应用程序(在.java文件中)
  • 使用Eclipse或javac(进入.class文件)
  • 编译您的应用程序
  • (可选)将.class文件捆绑在可执行文件(.jar文件)

可以在Windows系统,Mac系统等上分发和执行相同的.jar文件。

  

我发现用Java编写的应用程序,有两个用于windows的安装文件,另一个用于mac。这让我很困惑。

这是因为某些应用程序依赖于特定于平台的功能。然后将它们与不同的平台特定库捆绑在一起。

除非您正在开发一个本身依赖于特定于平台的功能的应用程序(例如低级系统调用),否则您应该可以使用普通的Java做得很好。

@Peter Lawrey

重要评论

  

虽然应用程序与平台无关,但安装程序却不是。例如IntelliJ有三个特定于平台的安装程序,它们不是用Java编写的,但是有一个zip,你可以在任何平台上解压缩它就可以工作。

答案 1 :(得分:3)

您可以在具有JVM的每台设备上运行Java应用程序。如果没有,那你就不走运了。

Oded的评论非常重要。 C和C ++在许多设备上都有编译器。

切换平台时,不需要重新编译Java字节代码。

C和C ++将要求开发人员在将应用程序分发到目标系统之前重新编译应用程序,但是一旦完成,客户端就能够顺利运行。

无论您选择哪种语言,都必须处理特定于平台的自定义和设置问题。您的应用程序越依赖于特定于平台的功能,它的可移植性就越低。

更新:

让我们重新审视问题中的原始词语:

  

我想开发一个跨平台的应用程序。

这是目标 - 直接引用。没有关于网络,移动或桌面应用的详细信息。

  

Java跨平台吗?我的意思是,我可以   在Windows中开发Java应用程序   并在Mac OS X和Linux中使用它?

定义“跨平台”。听起来像这里的偏见是“字节码可移植性”。 C / C ++不能这样做,但只要你坚持使用ANSI C / C ++并且不使用供应商扩展,“源代码可移植性”肯定是可能的。

Java从一开始就声名鹊起,一直是字节码可移植性。这就是JVM带给你的东西。这并不意味着您的整个应用程序都是可移植的,因为您可能没有很好地管理其他依赖项。

如果我用“C / C ++”代替“那个集团中的Java”,那么跨平台意味着不同的东西。我不能为一个平台选择.exe或.so编译并希望在另一个平台上运行它,但如果我为每个平台创建一个.exe或.so并使它们可用,当然可以在多个平台上运行相同的源代码。

  

如果是,怎么样?

如果您已将Java应用程序打包为JAR,则可以将其放在任何您喜欢的平台上。

如果您对您感兴趣的平台有多个C / C ++ .exes,您当然可以在需要时运行它。

答案 2 :(得分:1)

关于Java可移植性存在一个重要的警告。 “业务逻辑”(非UI东西)非常便携,但是至少有六种不同(和不兼容)的用户界面范例适用于Java,因此,例如,编写为在Android上运行的Java代码(甚至忽略了Android的不兼容的JVM)将无法在诺基亚手机上运行,​​任何一款手机的代码都无法在台式机上运行。

但据我所知,没有其他语言能做得更好。

答案 3 :(得分:0)

是的,在一个操作系统上编写和编译的Java可以在另一个操作系统上运行。 JVM可用于许多现代操作系统。

答案 4 :(得分:0)

Java应用程序打包为.jar文件。这些可以在为应用程序实现正确Java Runtime Environment的任何操作系统上运行,前提是用户已安装该JRE(JRE免费提供给用户)。

每个操作系统运行应用程序的准确程序都不同。

Java Development Kit提供的库允许调用应该在任何操作系统上运行的系统功能(例如文件操作,用户界面)。但是,精确的行为可能会有所不同(与网站在不同浏览器中的外观类似)。此外,Java应用程序可能具有“外观和感觉”,与专门为该操作系统设计的应用程序的外观和感觉不完全匹配。

答案 5 :(得分:0)

这取决于你所谓的“跨平台”。 Java代码可以编译为支持JDK的任何操作系统上的字节码二进制类或jar文件,并在支持JRE的任何平台上运行。但是,大多数编译语言都可以在任何平台上编译,前提是设计人员可以满足它。 Java比C ++更容易移植,但这并不意味着C ++代码无法在任何平台上编译。

换句话说 - 不要单独选择这个单一功能的语言。为您的应用选择最佳语言将是一种更好的方式。也许脚本语言最适合您。也许发布另一个问题,询问用什么语言来解决你的具体问题。

答案 6 :(得分:0)

我用Java写了一个带声音的小游戏。 我使用过标准库(AudioInputStream和Clip类)。 该程序在Windows XP上运行得非常好,但我没有听到Windows 7或Linux Ubuntu的声音。

为所有这些操作系统安装了Java 6,并且我使用标准编译器JAVAC编译了该程序。

所以Java不是那么“跨平台”。

答案 7 :(得分:0)

JAVA并不是真正的跨平台,因为它只是一种设计,一些JAVA实现可以跨平台,但它实际上取决于JAVA实现者。

SUN / Oracle为Windows,MAC和Linux制定JAVA标准实现,如果使用JDK构建程序,则应使用其JRE运行程序,如果尝试使用其他JRE运行程序,则可能存在兼容性问题。 / p>

在移动设备上可以看到更多,一些手机制造商因为硬件限制或者因为想要控制设备的软件而无法全面实施JAVA,他们带有JAVA徽标但是你必须使用自己的JDK,这些程序无法在JVM实现之外运行。

JAVA的另一个问题是某些功能可能会被弃用,而某些特定版本的JRE中运行的功能无法在较新版本中运行或以不同方式运行。

答案 8 :(得分:0)

最大的问题是当我们谈论移动应用时。对于桌面操作系统,java可以完美运行,但对于移动设备,开发人员实际上只能为Android创建。像Totalcross这样的工具可以帮助Java开发人员创建iOS和Android应用程序。重点是将WORA假设保持在每个平台上,甚至是移动平台。