这个问题看上去挺无聊,其实有非常深刻的意义。

我们现在使用的编程语言,一种是编译性语言,如:C,C++,Delphi等,一种是解释性语言,如:Java,JavaScript,SQL等。编译性语言写的程序,可以被操作系统识别执行,解释性语言只能被解释器识别,不能被操作系统识别。Java的解释器被称作Java虚拟机,是用C/C++混合编写的。

Java发展到今天,其生态已经非常庞大,但是最核心的部分,其最大的优势,仍然是Java虚拟机(JVM),JVM本身不是跨平台的,每一个操作系统都有自己专属的虚拟机,虚拟机可以解释并执行Java程序,从而实现Java程序的跨平台功能。我们知道,网站的服务器以Linux居多,但是Linux系统不适合程序员开发,有了Java,程序员在Windows上开发调试的程序,就可以发布到Linux上执行,为程序员的工作提供了很大的便利。程序员通道

Java最大的劣势,仍然是速度,这当然也是因为其是解释性语言的原因,因此在速度方面,与C/C++相比Java并不占优,因此如果用Java写一个Java虚拟机,那意味着解释后还得再解释一次,速度更加不如C/C++快,也就不会有人做这个尝试。

除了速度原因,还有调用操作系统组件链接库的原因。C/C++编写的不同操作系统的Java虚拟机,都要调用对应操作的库文件,windows是dll,linux是so,C/C++程序可以直接这些库文件,而Java则必须使用Jini技术来调用,这就会形成一种怪现象:Java虚拟机调用本地a.dll解释Java写的虚拟机通过Jini调用的本地a.dll,这样a.dll这个文件被调用两次,显然是重复调用了。所以Java大神们怎么会做这种事?

但是,Java并非完全不能写解释器,Java可以作IDE(集成开发环境),JIT(编译器),自然就说明其可以写解释器,另外我这几年就用Java写了一个低代码LC/SQL语言解释器,虽然很迷你,但是至少说明Java也可以编写解释器。

Java还有一个非常强大的功能,就是其比较容易实现分布式架构。这是因为Java是一种网络语言,所以才有Applet,JavaBean,JSP,RMI等网络组件或技术,这是大型网站采用Java要多于PHP的原因。而在TCP/UDP通讯方面,Socket编程实现BIO、NIO、AIO等方面,其稳定性和便捷性明显优于C++等语言。

至于在人工智能方面,Python占优,这是因为Python有着大量的人工智能组件,但是而Java的图形化编程一直较弱,不仅仅是图形识别技术弱于Python,其在图形显示方面,图形化构件方面,也弱于C++,Delphi等语言,不过随着Java图形化计算发展,未来和Python还有一博。

总之,我们关注或者学习Java,要清楚知道其优劣势,Java能做的,擅长做的,我们就用Java做,不能做的,不擅长做的,就换用其他语言做。不用抱着一种较劲的心态,非用Java做不可。

在我写完了以上回答的半个小时内,立刻就收到一个留言,说“不会就别强答了”,把我吓得赶紧看了一下其他知友回答,发现点赞最多的列举了Java能写IDE,JIT,以及其他软件等等。

实际上我在留言中也说了,Java能做很多软件,包括可以写解释器,但是唯独写Java虚拟机没有优势,很不幸IDE,JIT都不是JVM。也就是说,那位获赞最多的回答,其实并没有准确回答题主的问题,只不过证明了我说的,无人会去尝试用Java写Java虚拟机而已。

另外,有一些小朋友可能接触Java不久,对于专有名词的细微区别不能理解,可以对这些关键字去搜索一下,比如:编译性语言、解释性语言,虚拟机、解释器,JVM,JIT,IDE等等。这样不至于自己看不懂闹误会。


我收到了第二个评论,问Java适不适合写IDE。你现在看到市面上主流的Java集成开发环境(IDE),基本上都是Java语言编写的,比如Myeclipse,JBuilder,以及Android Studio 等等。这是不是能说明Java很适合IDE?非也,很显然,没有人用java为C#,.net等语言写IDE,也就是说Java就是在自己圈内转。那有人可能会问,那其他语言为Java写IDE了吗?其实早些年,微软曾经发布过一个Visual J++,用C/C++写的,体积小,运行速度非常快,后来放弃了。

比较VJ++和其他的Java IDE环境,我们很容易就知道为什么现在的主流IDE全部改成Java语言编写了。主要原因是:IDE因为必须集成虚拟机。

可以想一下即便是用其他语言编写的JavaIDE,仍然必须要有JVM才可以运行,安装包还是那样臃肿,版权费照样得交,而且还会失去跨平台性能,哪有什么必要再用Java语言以外的语言编写?仅仅是为了速度吗?

而且Java的图形化构件虽然较早期的重量级改为轻量级构建,但是图形化构件的显示、刷新速度仍然较慢,这也是Java编写的IDE启动,运行都较为缓慢的原因。

另外,我们可以再说一个软件,那就是Oracle,Oracle大多数是用Java写的,除了底层的计算为了速度不得不用C以外。这也是后来Oracle收购Java的原因。Oracle之所以那么喜欢Java,只是因为其是一款服务器端软件,而大多数服务器并非Windows,因此Oracle需要跨平台性能。有人可能会说,Mysql也可以运行在多种平台上,为什么不用Java编写?因为Mysql代码小,重写的成本低,而Oracle代码量太大,重写成本太高。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐