JavaScript与 Java:差异,相似性和创建历史

通过@wagslane (推特)

JavaScript和Java使许多新程序员感到困惑。 它们听起来是如此相似,所以人们可能会认为它们具有相同的用例,或者可能是同一家公司创建了两种语言。 这些假设都不是真的! 让我们仔细阅读本快速阅读中的差异和历史。

Java –简史

Java由Sun Microsystems的James Gosling于1991年创建。 Sun Microsystems为许多不同的设备编写了软件,并且重新编译或重构要在各种CPU架构上运行的代码变得很耗时。

趣闻:创始团队很难想出他们的项目的好名字,在外出喝咖啡时,决定用他们的咖啡来命名语言。

跨平台(JVM)

Java是一种通用编程语言,允许开发人员在任何设备上运行代码。 将代码编译为特定于Java的字节代码,然后Java虚拟机(JVM)将该字节代码转换为与机器兼容的代码。 当以这种方式编译代码时,Java会完全跨平台,这是Java成功的主要因素。

面向对象设计

https://www.geeksforgeeks.org/object-oriented-programming-oops-concept-in-java/

Java之所以迅速成名和被采用,主要是因为Java具有跨平台的特性和面向对象的编程(OOP)模式。 由于能够重用代码并将程序中的实体视为类型的层次结构,因此OOP一直并且一直很受欢迎。 Java是OOP设计模式的王者,它要求程序中的所有内容都是类,甚至是主要功能!

OOP在90年代和2000年代初如此流行,以至于(我认为)它无处不在。 如今,它更合适地找到了自己的市场,但是当JavaScript首次出现时,OOP是游戏的名称。

JavaScript –简要历史

在Java诞生4年后的1995年,Brendan Eich在Netscape工作期间创建了JavaScript。 当时,Netscape对Web浏览行业拥有完全的市场控制权,而Microsoft只是从Internet Explorer项目开始。

为了击败微软,Netscape与Sun Microsystems合作,并以其名称命名JavaScript,以锁定开发者社区中不断涌现的Java炒作。

JavaScript的成功

JavaScript从一种小的脚本语言开始,可以在浏览器中的客户端上执行操作。 赶紧开发并做出了有趣的设计选择,包括:

  • 可选的分号行结尾
  • 对象和类,但封装受限
  • 单线程(基于回调,无并发)

但是,JavaScript具有独特的定位,这将有助于使其成为当今使用最广泛的编程语言 。 以下几点归功于其广泛的成功:

  • “ JavaScript”命名策略旨在窃取营销炒作
  • 不被视为竞争,因为网站开发不是“认真的开发”
  • 再次垄断浏览器程序,因为其他项目没有将浏览器脚本视为认真的程序

许多开发人员认为“前端”开发适用于艺术家和设计师。 毕竟,“这只是样式和模板,对吧?”

长期以来就是这种情况,但是在最近十年中,前端开发已变得与后端开发一样严重。 单页面应用程序以及Angular,React和Vue等框架已经将过去由后端控制的逻辑直接推到用户的浏览器中。

运行时间,速度和基准

大多数编译语言(例如C,C ++和Go)直接将代码编译为机器指令。 这些指令特定于CPU体系结构和操作系统。 Java和JavaScript都通常不会以这种方式进行编译。

Java和JavaScript以不同的方式运行。 为了进行比较,我们将Java编译为JVM字节码,并在NodeJS解释器中运行JavaScript。

注意: Java可以编译为本机代码,也可以通过解释器运行,而JavaScript可以通过Node在浏览器外部运行,但是现在我们将坚持使用这些特殊的用例。

Java虚拟机(JVM)

JVM将代码( .java文件)编译为已编译的类( .class文件)。 这些类文件构成了完整的编译后的Java程序,其中一个类文件必须具有“ main”功能作为入口点。 通常将类文件存档并分发到.jar文件中 ,这使用户可以更轻松地下载单个可执行文件。

JVM的运行速度比 JavaScipt等解释型语言快,因为代码在运行时之前已编译为机器代码。 JVM 比大多数本机编译语言慢,因为它错过了特定于体系结构的优化,并且仍然必须在运行时执行JVM –> CPU转换。

NodeJS – V8引擎

JavaScript是一种解释型语言,具有许多不同的解释器实现。 JavaScript在生产中运行的最常见方式之一是使用NodeJS解释器。 Node使用Chrome的V8引擎来解释和运行JavaScript。

正如您在以下基准测试中所看到的,就内存和CPU而言,Java的性能始终比Node更好:

https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/javascript.html

真正使JavaScript变慢的是它在运行时解释代码。 在大约每次执行的线,解释了对JavaScript转换成机器代码,一个非常缓慢的过程,在运行时做的。

类和面向对象

在Java中, 所有事物都是一个类,并且OOP以一种法西斯方式强制执行。

在JavaScript中,类是可选的,并且功能性编程是可能的,甚至最近受到鼓励。 JavaScript具有该语言提供的大多数OOP范例,但是封装不像Java那样健壮。

线程与并发

JavaScript是单线程的 ,这意味着它将永远不会在同一时间执行代码。 并发编程是大多数语言的功能,而JavaScript在无法完成任务方面相当独特。

在Java中,并发性很容易获得 ,您可以在这里阅读有关并发性的更多信息: https : //howtodoinjava.com/java-concurrency-tutorial/

JavaScript弥补单线程的方式是使用异步编程和event-loop 。 每当需要进行API调用或其他长时间运行的过程而又不阻止程序其余部分的执行时,事件循环负责进行等待。 当异步任务完成时,主线程能够检测到任务的结果。

您可以在这里尝试并尝试这些想法: http : //latentflip.com/loupe

谢谢阅读

From: https://hackernoon.com/javascript-vs-java-differences-similarities-and-history-p4q3tbm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值