Java和JavaScript之间的区别

Java和JavaScript之间的区别1.简介我们将在本文中比较Java语言和JavaScript语言。JavaScript由Netscape开发。它最初是用于客户端的脚本语言,后来又用作客户端和服务器脚本的语言。Java由JamesGosling由SunMicrosystems开发。这些天来,JavaScript在服务器中以node.js的形式使用。Java和JavaScript之间在程序编码,编译和运行方式方…

大家好,又见面了,我是你们的朋友全栈君。

1.简介

我们将在本文中比较Java语言和JavaScript语言。 JavaScript由Netscape开发。 它最初是用于客户端的脚本语言,后来又用作客户端和服务器脚本的语言。 Java由James Gosling由Sun Microsystems开发。 这些天来,JavaScript在服务器中以node.js的形式使用。 Java和JavaScript之间在程序编码,编译和运行方式方面存在许多差异。

JavaScript首先被称为Mocha,然后被称为LiveScript。 现在它被称为当前名称。 Java被称为Oak,然后称为Green。

2. Java和JavaScript之间的区别

2.1先决条件

在Linux,Windows或Mac操作系统上需要Java 8 。 Eclipse Oxygen可以用于此示例。 Node.js与Eclipse安装捆绑在一起。

2.2下载

您可以从甲骨文网站下载Java 8 网站 。 可以从eclipse网站上下载Eclipse Oxygen。 可以从此站点下载Node.js。

2.3设置

2.3.1 Java设置

以下是Java环境所需的设置命令。

设定

JAVA_HOME="/desktop/jdk1.8.0_73"
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH

2.4 IDE

2.4.1 Eclipse氧气设置

可以从eclipse网站上下载“ eclipse-java-oxygen-2-macosx-cocoa-x86_64.tar”。 双击打开tar文件。 使用存档实用程序将tar文件解压缩。 解压缩后,您会在文件夹中找到Eclipse图标。 您可以通过拖动图标将Eclipse图标从文件夹移动到应用程序。

2.5启动IDE

2.5.1 Eclipse Java

Eclipse具有与语言支持,定制和扩展有关的功能。 您可以单击Eclipse图标以启动Eclipse。 蚀屏幕弹出,如下图所示:

Java和JavaScript之间的区别-欢迎屏幕
Eclipse欢迎屏幕

您可以从弹出的屏幕中选择工作区。 所附图像显示了如何选择它。

Java和JavaScript之间的区别-Eclipse Workspace
Eclipse工作区

您可以在屏幕上看到Eclipse工作台。 所附的屏幕快照显示了Eclipse项目屏幕。

Java和JavaScript之间的区别-Eclipse Workbench
Eclipse工作台

Java Hello World类打印问候语。 添加了下面的屏幕快照,以显示Eclipse中的类和执行。

Java和JavaScript之间的区别-Java Hello
Java Hello

您可以从菜单创建一个JavaScript项目,并命名该项目,如以下屏幕快照所示:

Java和JavaScript之间的区别-Javascript项目
JavaScript专案

JavaScript(Node.js)hello程序在IDE中执行。 输出“问候”显示在下面的屏幕截图中。

Java和JavaScript之间的区别-Hello JS
你好js

2.6内存管理

Java语言具有与内存管理相关的功能,并且是一种内存安全的语言。 垃圾收集是一项有助于收集免费和已释放资源的功能。 Java开发人员不能超出分配的内存。 在Java中,当内存消耗超出分配范围时,它将引发错误。 与Java相比,JavaScript需要更少的内存。 它广泛用于网页中的客户端脚本编写。

2.7异常处理

在Java中,可以通过使用try,catch和finally块来进行异常处理。

Java异常处理

public class ExceptionExample{  
  public static void main(String args[]) throws Exception{  
  try{  
   int result=36/0;  
   System.out.println(" the result is "+result);  
  }  
  catch(ArithmeticException exception)
  {
    System.out.println(exception);
      
    throw new Exception("division by zero");  
  }  
  finally
  {
    System.out.println("finally block is executed at the end");}  
    System.out.println("code below is used for next steps");  
  }  
}

JavaScript具有try,catch,throw和finally块来处理异常处理。

Javascript异常处理

console.log("entering try-catch statement");

try {
  console.log("entering try block");
  throw "thrown message";
  console.log("this message is never seen");
}
catch (e) {
  console.log("entering catch block");
  console.log(e);
  console.log("leaving catch block");
}
finally {
  console.log("entering and leaving the finally block");
}

console.log("leaving try-catch statement");

2.8多重继承

让我们举一个例子,看看如何用Java和JavaScript处理它。 卡车是车辆和机器。

Java和JavaScript之间的区别-多重继承
多重继承

Java不支持多重继承。 每个类只能在一个类上扩展,但可以实现多个接口。 下面的示例代码显示了Truck类的实现接口Machine and Vehicle Interfaces

多重继承的例子

interface Machine
{
    
    int distanceTravelled=100;
    public int getDistance();
}
interface Vehicle
{
    int  velocity=50;
    public int getVelocity();
}
public class Truck implements Machine, Vehicle
{
    int time;
    int velocity;
    int distanceTravelled;
    
    
    public Truck(int velocity, int time)
    {
        this.velocity = velocity;
        this.time = time;
    }
    
    public int getDistance()
    {
        distanceTravelled= velocity*time; 
        System.out.println("Total Distance  is : "+distanceTravelled);
        return distanceTravelled;
    }
    public int getVelocity()
    {
        int velocity=distanceTravelled/time;
        System.out.println("Velocity  is : "+ velocity);
        return velocity;
    }
    public static void main(String args[])
    {
        Truck truck = new Truck(50,2);
        truck.getDistance();
        truck.getVelocity();
    }
}

JavaScript通过使用inheritsMultipleObjects函数支持多重继承。 以下示例显示了Truck如何分别从Vehicle和Machine继承函数getDistance和getVelocity。

多重继承-Javascript

function inheritsMultipleObjects(baseObject, superObjects) {
  return new Proxy(
    baseObject,
    {
      get(target, key, rec) {
        if (Reflect.ownKeys(target).includes(key)) {
          return Reflect.get(target, key);
        }
        const parent = superObjects.find(
          _parent => Reflect.has(_parent, key)
        );
        if (parent !== undefined) {
          return Reflect.get(parent, key);
        }
        return undefined;
      },
      has(target, key) {
        if (Reflect.ownKeys(target).includes(key)) {
          return true;
        }
        const parentHasKey = superObjects.some(
          _parent => Reflect.has(_parent, key)
        );
        if (parentHasKey) {
          return true;
        }
        return false;
      }
    }
  );
}

class Vehicle {
  getDistance() {
    return 100;
  }
}
class Machine {
  getVelocity() {
    return 50;
  }
}
class Truck {}
const _truck = new Truck();
const truck = inheritsMultipleObjects(
  _truck,
  [Truck.prototype,Vehicle.prototype, Machine.prototype]
);
console.log(truck.getDistance()); 
console.log(truck.getVelocity()); 
console.log(truck.constructor);

2.9线程

Java具有内置的类来创建线程。 要创建一个新线程,一个类必须扩展一个Thread类,并且必须重写run方法。

线程示例

public class NewThread extends Thread
{  
  public void run()
  {  
    System.out.println("Thread running now");  
  }
  
  public static void main(String args[])
  {  
    NewThread newThread =new NewThread();  
    newThread.start();  
  }  
}

Java提供了另一种创建线程的方法。 可以实例化实现Runnable的类,并将其作为参数传递给Thread类。 下面提供了示例代码:

线程对象–可运行

public class ThreadObject implements Runnable
{  
  public void run()
  {  
    System.out.println("ThreadObject running");  
  }  
  
public static void main(String args[])
{  
  ThreadObject threadObject =new ThreadObject();  
  Thread thread =new Thread(threadObject);  
  thread.start();  
 }  
}

JavaScript具有基于事件的机制来处理并发。 Node.js是一种单线程语言。 它使用多个线程在后台异步执行代码。 让我们看一下下面代码中的派生线程示例:

分叉线程

const { fork } = require('child_process');
var express = require('express');
var app = express();
app.get('/endpoint', (request, response) => {
  
   const process = fork('./mail.js');
   const mail_messages = request.body.emails;

   process.send({ mail_messages });
   process.on('sendmail', (message) => {
     log.info(` mail count  ${message.counter}`);
   });
   return response.json({ status: true, sent: true });
});

下面的代码显示sendMultiplemails如何异步执行。

发送邮件

async function sendMultipleMails(mails) {
   let sendMails = 0;
   // code for sending multiple mails
   return sendMails;
}

process.on('sendmail', async (message) => {
  const countOfMailsSent = await sendMultipleMails(message.mails); 
  
  process.send({ counter: countOfMailsSent });
});

2.10便携性

Java语言由计算机上的Java解释器解释,与操作系统无关。 Java程序在Java虚拟机上作为字节代码执行。 Java代码位于扩展名为.java的程序中。

Java和JavaScript之间的差异-Java可移植性
Java可移植性

HTML页面中将JavaScript用于客户端脚本,该脚本在浏览器上执行。 基于Node.js的服务器端脚本由特定操作系统上的版本8(ECMAScript)JavaScript引擎执行。 该代码写在扩展名为.js的文件中。

Java和JavaScript之间的差异-节点运行时
节点运行时

2.11类型

Java是一种静态类型的语言。 Java语言具有原始类型和对象类型。 Java具有与自动装箱相关的功能,该功能可自动转换类型。 java.lang.Object类是所有类的基类,而Java遵循命令的单个根链。

Java和JavaScript之间的区别-Java类型
Java类型

JavaScript是一种动态类型的语言。 在编译期间,使用var关键字声明变量。 在检查相等性或任何其他运算符时,将动态处理这些类型。

Java和JavaScript之间的区别-Javascript类型
JavaScript类型

2.12库

Java包有助于打包类。 包范围是Java语言的另一个功能。 Java归档文件有助于对类包进行分组,以用于执行和安装。

Java和JavaScript之间的区别-Java存档
Java档案

JavaScript模块和软件包由node.js和客户端Web归档文件中JavaScript文件组成。

Java和JavaScript之间的区别-Javascript模块
JavaScript模块

2.13运行时错误

在Java中,运行时错误由编译器和解释器提供。

Java和JavaScript之间的差异-Java运行时错误
Java运行时错误

JavaScript是一种动态类型的语言,因此可以处理任何类型的数据。 空指针异常不会在JavaScript中发生。 使用运行时(node.js)或在浏览器中运行代码时,会发生运行时错误。

Java和JavaScript之间的差异-Javascript运行时错误
JavaScript运行时错误

2.14文档

Java具有支持注释的功能,可用于文档生成器。 JavaScript还支持可用于文档生成的注释。

2.15移动与网络与桌面

Java语言可用于移动,Web和桌面应用程序开发。 Android支持Java。 JavaScript用于在Android,IOS和其他移动操作系统中构建HTML5(网络)和混合移动应用程序。

2.16编程范例

Java是一种面向对象的类和并发编程语言。 Java当前支持版本8中的功能编程功能。JavaScript是一种多范例语言,支持面向对象,过程和功能范例。

3.结论

总体而言,Java比JavaScript具有很多优势。 下面的比较表捕获了Java和JavaScript之间的差异。

比较表

特征 Java JavaScript
内存管理 垃圾收集是Java中的一项功能。 Java中没有指针。 Java程序消耗更多内存 JavaScript需要更少的内存。 它在网页中广泛使用
遗产 接口可用于多重继承。 Java支持单继承。 JavaScript使用InheritsMultipleObjects函数支持多重继承
线程数 Java具有Thread类和Runnable接口以使用线程。 JavaScript(Node.js)是一种单线程语言,可派生一个线程以异步运行多个线程。
可移植性 Java字节码取决于平台。 JavaScript是与平台无关的。 运行时(节点运行时)取决于平台。
访问控制 封装有助于对Java中的类变量和属性进行访问控制。 JavaScript具有对象属性以提供对变量的访问控制。
种类 Java中使用单个命令模式根链。 JavaScript是一种弱类型语言。
图书馆 Java归档文件用于构建Java库。 JavaScript(Node.js)具有模块和包。
运行时错误 在Java的编译和执行阶段检测到运行时错误 在执行阶段会检测到JavaScript运行时错误。
性能 与JavaScript相比,Java性能要慢一些。 与Java相比,JavaScript性能更快,因为解释器自己运行JavaScript代码。

4.下载源代码

下载

您可以在此处下载此示例的完整源代码:
Java和JavaScript之间的区别

翻译自: https://www.javacodegeeks.com/difference-between-java-and-javascript.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156500.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • visual studio发生了未处理的异常_灾难性故障0x8000ffff

    visual studio发生了未处理的异常_灾难性故障0x8000ffff故障说明:使用vs2010时,由于文件创建MFC类时,移除文件后重新创建正确的基类,覆盖之前创建的文件造成,在“解决方案资源管理器”点击“cpp”文件弹出该提示。解决方法:在“解决方案资源管理器”,重命名cpp文件,双击打开后,改回原名即可。

    2022年9月24日
    3
  • Confluence 6 配置 XSRF 保护[通俗易懂]

    Confluence 6 配置 XSRF 保护[通俗易懂]Confluence需要一个XSRF令牌才能创建一个评论,这个被用来保护用户不在评论区恶意发布内容。所有Confluence自定义的主题都被启用了这个功能,但是如果你使用自定义主题的话,可能这些主题不支持这些安全特性,你可以禁用这个功能。 在禁用XSRF之前,请仔细考虑可能在你Confluence安装实例中可能会遇到的安全问题。请参考 cgisecurity.com 中…

    2022年5月16日
    41
  • Runnable接口详细详解「建议收藏」

    Runnable接口详细详解「建议收藏」创建线程对象,默认有一个线程名,以Thread-开头,从0开始计数构造函数Thread()Thread-0Thread-1Thread-2其他构造方法Thread(Runnabletarget)如果在构造thread的时候没有传递Runnable或者没有复写Thread的run方法,该thread将不会调用任何的东西,如果传递了Runnable接口的实例,后者复写了Thread的run方法,则会执行该方法的逻辑单元(逻辑代码)publicclassCreateThread2..

    2025年6月9日
    2
  • Android – match_parent 和 fill_parent差异

    Android – match_parent 和 fill_parent差异

    2022年1月2日
    53
  • Dubbo入门_dubbo的原理

    Dubbo入门_dubbo的原理dubbo分布式系统简介发展演变RPCdubbo核心概念搭建dubbo分布式系统简介“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”分布式系统(distributed system)是建立在网络之上的软件系统。随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。发展演变单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时

    2022年8月8日
    7
  • 《算法图解》-9动态规划 背包问题,行程最优化

    《算法图解》-9动态规划 背包问题,行程最优化本文属于《算法图解》系列。学习动态规划,这是一种解决棘手问题的方法,它将问题分成小问题,并先着手解决这些小问题。一背包问题背包问题,在可装物品有限的前提下,尽量装价值最大的物品,如果物品数量足够大,简单的暴力穷举法是不可行的O(2ⁿ),前一章介绍了《贪婪算法》就是解决如何找到近似解,这接近最优解,但可能不是最优解。如何找到最优解呢?就是动态规划算法。动态规划先解决子问题,…

    2022年7月26日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号