Java有哪些突出的现实世界应用?

10

我是一名初学者程序员,我们学校的I&CS计划让我们从学习Java开始。在我看来,C语言及其变种在真实世界中更为普遍。这是真的吗?

专业程序员如何使用Java进行工作?更确切地说,我想知道在什么情况下程序员会选择使用Java而不是其他编程语言。OpenOffice 明显是一个使用Java的突出例子,但它不能使用其他语言编写吗?


3
OpenOffice主要使用C++编写。详情请参见:http://wiki.services.openoffice.org/wiki/Java_and_OpenOffice.org - missingfaktor
3
@Leebuntu:Java有哪些突出的实际应用场景?好的,我来回答一下,在几个毫不相关的领域中:Google。Google的GMail(使用Java编写的GWT,将Java转换为JavaScript的库基本上是为了编写GMail而创建的),GMail可以说是最先进的Webapp之一。Google是一家市值1800亿美元的高科技公司,对Java非常重视(Android)。BluRay规格(Java是BluRay标准的官方和强制性组成部分)。银行业几乎完全由Java掌控。Java智能卡在整个国家的医疗保健系统中被广泛使用。以上只是其中的一部分。 - SyntaxT3rr0r
12个回答

15

除非你在编写游戏、嵌入式设备软件、维护旧软件或编写高性能并行计算软件(例如CUDA),否则这些天你会发现Java比C/C++更实用。 C#实际上更多地源自Java而不是C,尽管它的名字叫C#,如果您正在考虑这一点(许多人认为它比Java更好,我也是其中之一)。

“Java比C/C++慢”的说法正逐渐成为一个谬论(例如请参见此基准测试)。它肯定更加友好,而且越来越多的企业级解决方案专门处理Java,其开发和在现实世界中的部署。

特别是在服务器应用程序中,您会发现Java正在取得巨大进展。在大多数领域,它是否真的是使用C/C++的第二选择还有待商榷。


非常感谢您详细的回答!它确实让我对我正在学习的内容有了一些新的认识。经常感觉自己像在雾中开车... 我想我会尝试熟悉C语言。 - user313335
1
Java 绝对不再在任何地方“获得巨大的进展”了;这种说法在10年前是正确的。如今,Java 正在失去与 Python 和 Ruby 等语言竞争的优势。 - Michael Borgwardt
Java比C/C++慢的说法正在逐渐成为一个谬论(例如可以参考这个基准测试)。这表明Java基准测试程序比C++基准测试程序慢!而http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=java&lang2=gpp。 - igouy
@igouy:是的,它的覆盖面很广 - 但目前正在慢慢失去优势。最近在TIOBE调查中市场份额排名下降到第二位(落后于C语言)。 - Michael Borgwardt
值得注意的是,由于一些OpenGL绑定库(如lwjgl和jMonkey),Java也正在进军游戏领域。 - Richard Tingle
显示剩余4条评论

9
你对“真实世界”的看法可能不准确,因为许多(大多数?)重要的Java应用程序并不是“可见的”。当然,有桌面Java应用程序,但在我看来,正是服务端Java使其如此受欢迎,特别是在异构企业环境中(可移植性带来了供应商独立性),而Java几乎被所有行业所使用。因为你要求一个例子,我的例子是GMail。这够大吗?

"Python在Google"?这里我们谈论的是Java。 - Zaki

8

Java非常普遍。很难将其与“C及其衍生语言”进行比较,因为没有人统计每种语言在“真实世界”中解决了多少问题。但是Java非常流行。一些你可以在自己的桌面电脑上安装和玩耍的Java应用程序:

Java还可以运行在许多手机和Web服务器上。

至于你的第二个问题——专业程序员倾向于使用Java来完成任务(就像使用C、C++、Perl、Lua、Python、JavaScript、Ruby、Clojure、Pascal、SQL、COBOL和任何其他编程语言一样)。作为初学者,不要担心Java的实际应用性。如果你的学校教授它,请使用它来学习计算机科学概念,这将有助于你在任何语言中解决实际问题。


是的,我有些程序员朋友说不用担心语言,只要专注于概念;最终用不同的语言编写只是学习语法的问题。谢谢! - user313335
2
@Leebuntu:学习一门语言不仅仅是学习语法的问题。尝试学习像 Haskell 或 Lisp 这样的语言,你会意识到你的假设是多么错误。 - missingfaktor
1
@Rahul +1 真的很对,就像有人说的那样,这不是关于语法,而是关于语言的哲学。 - helpermethod
1
@Rahul,那样的话,第一门语言应该是LISP :) 然后就是顺风顺水了。 - Thorbjørn Ravn Andersen

6

我一直是一名C/C++程序员,但最近开始使用Java编写Web应用程序,并使用非常酷的Google Web Toolkit(GWT)。这个小工具将会把你的Java代码编译成Javascript,如果你也在Java中编写服务器端代码,它可以极大地简化客户端与服务器端之间的通信。以前我用PHP和Python编写过Web应用程序,用的是原始JavaScript或jQuery,但对我来说,GWT+Java组合是一种更加愉悦的解决方案。

当然,这并不是Java最流行的用法之一,但我想你可能会对该语言的其他用途感兴趣。


5

Java可能在使用上排名第二,仅次于更接近C语言的语言,但它是一个足够接近的第二,我不会太担心它的适用性。更一般地说,我不会太担心你学习的第一种语言的适用性 - 有这么多语言,每种语言都有其特定的领域。专注于学习概念,你就不会在切换到当前任务所需的任何语言时遇到困难。

关于Java的问题领域:
Java经常用于带有图形用户界面的跨平台应用程序、手机应用程序以及用于生成网页的服务器。在这些领域中已经编写的Java代码使其对这些领域的未来项目具有吸引力 - 但没有一个问题领域明确属于一种语言。

稍微技术一点:
Java是一种静态类型垃圾收集语言。这意味着稍微不小心做出不安全的事情要稍微困难一些,并且集成开发环境(如Eclipse)可以为程序员提供更多帮助,因此Java可能更适合较大的项目或可能有程序员不熟悉代码库的项目。

作为一种垃圾收集语言,Java可能不太适合具有严重资源限制或速度要求的程序(在这种情况下通常首选C语言)。作为一种静态类型语言,它不太适合快速应用程序开发(在这种情况下通常首选动态类型语言,如Python、Ruby和PHP)。

更广泛地说,Java也是一种命令式语言,因此其风格对大多数程序员来说更加熟悉,并且更适合告诉计算机确切地如何做某事,而不是例如函数式语言(如Haskell),后者可能更适合描述需要完成的任务,以便计算机可以根据需要分配工作(但处理屏幕上的内容等变化的东西则不太好)。


“我不会太担心你学的第一种编程语言的适用性,因为学习编程的过程中,你将掌握许多通用的概念和技能,这些都可以应用于其他编程语言。” - David

3
有大量的JAVA应用程序。也许在标准Windows桌面上没有那么多,但在主机等方面,Java被广泛使用。此外,许多网站仍在使用jsp等。Java是一种非常相关的语言,并且可能会保持这样。(尽管个人而言,我宁愿使用.NET。)
在我们公司,我们使用Confluence作为文档内容管理系统,MAXIMO作为资产跟踪软件...二者都运行在Java上。我们拥有的大多数与主机直接交互的内部Web应用程序都运行在JSP上。对于桌面,最值得注意的Java应用程序可能是Open Office...
此外,Java是学习面向对象编程的相对不错的语言。您在Java中学到的很多东西可以轻松地转移到其他OO语言(如C#、VB.Net、C++等)中。它比C++要容易学得多,因此是一个很好的“学习”语言。(我仍然认为C#更容易,但这可能是个人偏见。)

3
选择Java的原因如下:
  • 您的应用程序必须在多个操作系统上运行 - Java比大多数其他语言更容易实现这一点
  • 您计划使用众多可用的Java库之一
  • 您希望能够轻松地找到项目开发人员
此外,您提出了两个误解:
  • Java是C的衍生版本。它的语法和概念与C和C ++更接近而不是大多数其他现代语言。
  • OpenOffice并非完全使用Java编写。其中有一些小部分是使用Java编写的,但它的大部分是使用C++编写的

2
Java不是C的衍生版本。它借用了C的语法,以便于C程序员更容易学习,但它是一种完全不同的语言。 - Thorbjørn Ravn Andersen
1
@Thorbjørn:那么您认为一个“真正”的C的衍生版本是什么,而不是完全不同的语言? - Michael Borgwardt
取决于情况。我认为关键在于你是否有可以操作的指针。 - Thorbjørn Ravn Andersen
我的记忆是Java(迅速地)从C++演变而来。到1.0版本时,除了语法外,几乎没有什么C++的残留,尤其是不属于C的部分。 - Tom Hawtin - tackline

3
许多商业企业使用Java(以及类似的高级语言)的原因是它(它们)使编写复杂、健壮且相对高效的应用程序更加容易,并且这些应用程序在长期内易于维护。使用C或C++,相同复杂度的大型应用程序需要更多的开发时间(开发人员年限)。该软件还往往更加脆弱,因为具有平均技能的程序员在C/C++中犯的错误比在Java(等)中犯的错误更多,而且这些错误往往更加隐蔽(例如缓冲区溢出),并且具有更严重的后果。
据称,C/C++比Java和其他托管语言更高效。虽然这对于某些小型(代码行数)应用程序可以得到证明,但对于大型(例如100k+ SLOC)应用程序来说,很难证明......因为没有人用多种语言编写相同设计的应用程序。
此外,在大多数软件中,应用程序的速度不那么重要,而诸如开发成本、维护成本、系统可靠性等方面则更为重要。通常,唯一的硬性能量标准是软件运行足够快以被容忍。许多年轻的程序员发现这很难理解,也难以接受,但支付我们薪水的人对这些事情有不同的看法......

2

我个人对Java的使用主要是在手机上。我将一个应用程序移植到了Android和BlackBerry。因此,对于真实世界中公开可见的使用,这些操作系统及其各种应用程序是很好的例子。

我与Java的接触越多,就越不喜欢它。这部分是由于开发者工具(Eclipse),部分原因是目标平台,还有部分是语言本身。Java是一门很好的第一门语言,但是在某些时候,我希望你尝试其他语言以了解你所错过的东西。


2
就我个人而言,我发现使用Eclipse+Java非常愉快。比我使用过的任何C++ IDE都要好得多。 - Philippe Beaudoin
1
@drawnonward,众所周知,所有编程语言都很糟糕。 - Thorbjørn Ravn Andersen
是的,每种语言和环境都有不喜欢的地方。在移动设备上编写Java代码时,我发现除了为多个Web浏览器编写代码外,还存在更多日常问题。 - drawnonward

1
“C的分支”在商业世界中并没有像看起来那样被广泛使用(除非您认为Java是一个分支,我认为您肯定应该这么认为)。
如果您想在IT开发领域获得高薪工作(看看招聘信息),目前Java是必须掌握的语言(不是第二,甚至不接近,除非您将所有替代方案结合起来,但这意义不大)。
J2EE(Web开发,服务器“中间层”开发)是Java占主导地位的领域。不幸的是,这不是您可能会学到的东西,甚至不会在大学里谈论(大多数教授都不了解J2EE)。Java在需要与某些技术、数据库或软件集成的情况下也表现良好。当然,它是多平台的(如果编码正确)。相比大多数(如果不是全部)替代方案,它还为开发人员提供了更多的选择和支持。
J2EE应用程序似乎并不常见,因为它们通常隐藏在企业或政府内部网络中,或者用于Web服务器上,而您显然永远看不到它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接