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。 蚀屏幕弹出,如下图所示:
Eclipse欢迎屏幕您可以从弹出的屏幕中选择工作区。 所附图像显示了如何选择它。
Eclipse工作区您可以在屏幕上看到Eclipse工作台。 所附的屏幕快照显示了Eclipse项目屏幕。
Eclipse工作台 Java Hello World
类打印问候语。 添加了下面的屏幕快照,以显示Eclipse中的类和执行。
您可以从菜单创建一个JavaScript项目,并命名该项目,如以下屏幕快照所示:
JavaScript专案JavaScript(Node.js)hello程序在IDE中执行。 输出“问候”显示在下面的屏幕截图中。
你好js2.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不支持多重继承。 每个类只能在一个类上扩展,但可以实现多个接口。 下面的示例代码显示了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可移植性HTML页面中将JavaScript用于客户端脚本,该脚本在浏览器上执行。 基于Node.js的服务器端脚本由特定操作系统上的版本8(ECMAScript)JavaScript引擎执行。 该代码写在扩展名为.js的文件中。
节点运行时2.11类型
Java是一种静态类型的语言。 Java语言具有原始类型和对象类型。 Java具有与自动装箱相关的功能,该功能可自动转换类型。 java.lang.Object
类是所有类的基类,而Java遵循命令的单个根链。
JavaScript是一种动态类型的语言。 在编译期间,使用var
关键字声明变量。 在检查相等性或任何其他运算符时,将动态处理这些类型。
2.12库
Java包有助于打包类。 包范围是Java语言的另一个功能。 Java归档文件有助于对类包进行分组,以用于执行和安装。
Java档案JavaScript模块和软件包由node.js和客户端Web归档文件中JavaScript文件组成。
JavaScript模块2.13运行时错误
在Java中,运行时错误由编译器和解释器提供。
Java运行时错误JavaScript是一种动态类型的语言,因此可以处理任何类型的数据。 空指针异常不会在JavaScript中发生。 使用运行时(node.js)或在浏览器中运行代码时,会发生运行时错误。
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