1.簡介
通過優銳課核心java學習筆記中,我們可以看到,Java和JavaScript之間的區別.我們將在本文中比較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環境所需的設置命令。
設定
1個 2 3 4 |
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">JAVA_HOME =“ / desktop / jdk1.8.0_73”</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 導出JAVA_HOME</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> PATH = $ JAVA_HOME / bin:$ PATH</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> 導出路徑</font></font><font></font> |
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中的類和執行。
Java Hello
你可以從菜單創建一個JavaScript項目,並命名該項目,如以下屏幕快照所示:
JavaScript專案
JavaScript(Node.js)hello程序在IDE中執行。輸出“問候”顯示在下面的屏幕截圖中。
你好js
2.6內存管理
Java語言具有與內存管理相關的功能,並且是一種內存安全的語言。垃圾收集是一項有助於收集免費和已釋放資源的功能。Java開發人員不能超出分配的內存。在Java中,當內存消耗超出分配范圍時,它將引發錯誤。與Java相比,JavaScript需要更少的內存。它廣泛用於網頁中的客戶端腳本編寫。
2.7異常處理
在Java中,可以通過使用try,catch和finally塊來進行異常處理。
Java異常處理
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18歲 |
public class ExceptionExample{ <font></font> public static void main(String args[]) throws Exception{ <font></font> try{ <font></font> int result=36/0; <font></font> System.out.println(" the result is "+result); <font></font> } <font></font> catch(ArithmeticException exception)<font></font> {<font></font> System.out.println(exception);<font></font> <font></font> throw new Exception("division by zero"); <font></font> } <font></font> finally<font></font> {<font></font> System.out.println("finally block is executed at the end");} <font></font> System.out.println("code below is used for next steps"); <font></font> } <font></font> }<font></font> |
JavaScript具有try,catch,throw和finally塊來處理異常處理。
Javascript異常處理
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18歲 19 |
console.log("entering try-catch statement");<font></font> <font></font> try {<font></font> console.log("entering try block");<font></font> throw "thrown message";<font></font> console.log("this message is never seen");<font></font> }<font></font> catch (e) {<font></font> console.log("entering catch block");<font></font> console.log(e);<font></font> console.log("leaving catch block");<font></font> }<font></font> finally {<font></font> console.log("entering and leaving the finally block");<font></font> }<font></font> <font></font> console.log("leaving try-catch statement");<font></font> <font></font> <font></font> |
2.8多重繼承
讓我們舉一個例子,看看如何用Java和JavaScript處理它。卡車是車輛和機器。
多重繼承
Java不支持多重繼承。每個類只能在一個類上擴展,但可以實現多個接口。示例代碼顯示下面的 Truck 類實現接口 Machine 和 Vehicle接口
多重繼承的例子
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18歲 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
interface Machine<font></font> {<font></font> <font></font> int distanceTravelled=100;<font></font> public int getDistance();<font></font> }<font></font> interface Vehicle<font></font> {<font></font> int velocity=50;<font></font> public int getVelocity();<font></font> }<font></font> public class Truck implements Machine, Vehicle<font></font> {<font></font> int time;<font></font> int velocity;<font></font> int distanceTravelled;<font></font> <font></font> <font></font> public Truck(int velocity, int time)<font></font> {<font></font> this.velocity = velocity;<font></font> this.time = time;<font></font> }<font></font> <font></font> public int getDistance()<font></font> {<font></font> distanceTravelled= velocity*time; <font></font> System.out.println("Total Distance is : "+distanceTravelled);<font></font> return distanceTravelled;<font></font> }<font></font> public int getVelocity()<font></font> {<font></font> int velocity=distanceTravelled/time;<font></font> System.out.println("Velocity is : "+ velocity);<font></font> return velocity;<font></font> }<font></font> public static void main(String args[])<font></font> {<font></font> Truck truck = new Truck(50,2);<font></font> truck.getDistance();<font></font> truck.getVelocity();<font></font> }<font></font> }<font></font> <font></font> |
JavaScript支持使用inheritsMultipleObjects函數的多重繼承。以下示例顯示了Truck如何分別從Vehicle和Machine繼承函數getDistance和getVelocity。
多重繼承-Javascript
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18歲 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
function inheritsMultipleObjects(baseObject, superObjects) {<font></font> return new Proxy(<font></font> baseObject,<font></font> {<font></font> get(target, key, rec) {<font></font> if (Reflect.ownKeys(target).includes(key)) {<font></font> return Reflect.get(target, key);<font></font> }<font></font> const parent = superObjects.find(<font></font> _parent => Reflect.has(_parent, key)<font></font> );<font></font> if (parent !== undefined) {<font></font> return Reflect.get(parent, key);<font></font> }<font></font> return undefined;<font></font> },<font></font> has(target, key) {<font></font> if (Reflect.ownKeys(target).includes(key)) {<font></font> return true;<font></font> }<font></font> const parentHasKey = superObjects.some(<font></font> _parent => Reflect.has(_parent, key)<font></font> );<font></font> if (parentHasKey) {<font></font> return true;<font></font> }<font></font> return false;<font></font> }<font></font> }<font></font> );<font></font> }<font></font> <font></font> class Vehicle {<font></font> getDistance() {<font></font> return 100;<font></font> }<font></font> }<font></font> class Machine {<font></font> getVelocity() {<font></font> return 50;<font></font> }<font></font> }<font></font> class Truck {}<font></font> const _truck = new Truck();<font></font> const truck = inheritsMultipleObjects(<font></font> _truck,<font></font> [Truck.prototype,Vehicle.prototype, Machine.prototype]<font></font> );<font></font> console.log(truck.getDistance()); <font></font> console.log(truck.getVelocity()); <font></font> console.log(truck.constructor); <font></font> |
2.9線程
Java具有內置的類來創建線程。要創建一個新線程,一個類必須擴展一個 Thread 類,並且必須重寫run方法。
線程示例
01 02 03 04 05 06 07 08 09 10 11 12 13 |
public class NewThread extends Thread<font></font> { <font></font> public void run()<font></font> { <font></font> System.out.println("Thread running now"); <font></font> }<font></font> <font></font> public static void main(String args[])<font></font> { <font></font> NewThread newThread =new NewThread(); <font></font> newThread.start(); <font></font> } <font></font> } <font></font> |
Java提供了另一種創建線程的方法。Runnable 可以實例化實現的類, 並將其作為參數傳遞給 Thread 該類。下面提供了示例代碼:
線程對象–可運行
01 02 03 04 05 06 07 08 09 10 11 12 13 14 |
public class ThreadObject implements Runnable<font></font> { <font></font> public void run()<font></font> { <font></font> System.out.println("ThreadObject running"); <font></font> } <font></font> <font></font> public static void main(String args[])<font></font> { <font></font> ThreadObject threadObject =new ThreadObject(); <font></font> Thread thread =new Thread(threadObject); <font></font> thread.start(); <font></font> } <font></font> }<font></font> |
JavaScript具有基於事件的機制來處理並發。Node.js是一種單線程語言。它使用多個線程在后台異步執行代碼。讓我們看一下下面代碼中的派生線程示例:
分叉線程
01 02 03 04 05 06 07 08 09 10 11 12 13 14 |
const { fork } = require('child_process');<font></font> var express = require('express');<font></font> var app = express();<font></font> app.get('/endpoint', (request, response) => {<font></font> <font></font> const process = fork('./mail.js');<font></font> const mail_messages = request.body.emails;<font></font> <font></font> process.send({ mail_messages });<font></font> process.on('sendmail', (message) => {<font></font> log.info(` mail count ${message.counter}`);<font></font> });<font></font> return response.json({ status: true, sent: true });<font></font> });<font></font> |
下面的代碼顯示了如何sendMultiplemails異步執行。
發送郵件
01 02 03 04 05 06 07 08 09 10 11 |
async function sendMultipleMails(mails) {<font></font> let sendMails = 0;<font></font> // code for sending multiple mails<font></font> return sendMails;<font></font> }<font></font> <font></font> process.on('sendmail', async (message) => {<font></font> const countOfMailsSent = await sendMultipleMails(message.mails); <font></font> <font></font> process.send({ counter: countOfMailsSent });<font></font> });<font></font> |
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如下命令的單根鏈條。
Java類型
JavaScript是一種動態類型的語言。在編譯期間,使用var關鍵字聲明變量。在檢查相等性或任何其他運算符時,將動態處理這些類型。
JavaScript類型
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代碼。 |
總結
文章寫道這里,歡迎補充評論!另外近期整理了一套完整的java架構思維導圖心得,分享給大家對照所屬知識點參照學習。