更新時間:2022-05-09 11:20:46 來源:動力節(jié)點 瀏覽2029次
Java 編程語言有以下特點。
簡單: Java 很容易學習。Java 的語法基于 C++,這使得在其中編寫程序更容易。
面向?qū)ο螅?Java 遵循面向?qū)ο蟮姆妒?,它允許我們將代碼維護為包含數(shù)據(jù)和行為的不同類型對象的組合。
可移植性: Java 支持隨處讀取一次寫入的方法。我們可以在每臺機器上執(zhí)行 Java 程序。Java 程序 (.java) 被轉換為可以在每臺機器上輕松運行的字節(jié)碼 (.class)。
平臺無關: Java 是一種平臺無關的編程語言。它不同于需要平臺執(zhí)行的其他編程語言,如 C 和 C++。Java 帶有執(zhí)行其代碼的平臺。Java 不依賴于要執(zhí)行的操作系統(tǒng)。
安全: Java 是安全的,因為它不使用顯式指針。Java 還提供了字節(jié)碼和異常處理的概念,使其更加安全。
健壯: Java 是一種強大的編程語言,因為它使用強大的內(nèi)存管理。自動垃圾收集、異常處理等概念使其更加健壯。
架構中立: Java 是架構中立的,因為它不依賴于架構。在 C 中,數(shù)據(jù)類型的大小可能會根據(jù) Java 中不存在的體系結構(32 位或 64 位)而有所不同。
解釋: Java 使用即時 (JIT) 解釋器和編譯器來執(zhí)行程序。
高性能: Java 比其他傳統(tǒng)的解釋型編程語言更快,因為 Java 字節(jié)碼“接近”本機代碼。它仍然比編譯語言(例如,C++)慢一點。
多線程:我們可以通過定義多個線程來編寫一次處理多個任務的 Java 程序。多線程的主要優(yōu)點是它不會為每個線程占用內(nèi)存。它共享一個公共內(nèi)存區(qū)域。線程對于多媒體、Web 應用程序等很重要。
分布式: Java是分布式的,因為它方便用戶用Java創(chuàng)建分布式應用程序。RMI 和 EJB 用于創(chuàng)建分布式應用程序。Java 的這一特性使我們能夠通過從 Internet 上的任何機器調(diào)用方法來訪問文件。
動態(tài): Java 是一種動態(tài)語言。它支持類的動態(tài)加載。這意味著類是按需加載的。它還支持來自其本地語言(即 C 和 C++)的函數(shù)。
Java 虛擬機是使計算機能夠運行Java程序的虛擬機。JVM 就像一個運行時引擎,它調(diào)用 Java 代碼中的 main 方法。JVM是必須在計算機系統(tǒng)中實現(xiàn)的規(guī)范。Java 代碼由 JVM 編譯為與機器無關且接近本機代碼的字節(jié)碼。
多種類型:
類(方法)區(qū):類區(qū)存儲每個類的結構,例如運行時常量池、字段、方法數(shù)據(jù)和方法代碼。
堆:它是運行時數(shù)據(jù)區(qū),內(nèi)存被分配給對象
Stack: Java Stack 存儲幀。它保存局部變量和部分結果,并在方法調(diào)用和返回中發(fā)揮作用。每個線程都有一個私有 JVM 堆棧,與線程同時創(chuàng)建。每次調(diào)用方法時都會創(chuàng)建一個新框架??蚣茉谄浞椒ㄕ{(diào)用完成時被銷毀。
程序計數(shù)器寄存器: PC(程序計數(shù)器)寄存器包含當前正在執(zhí)行的Java虛擬機指令的地址。
本機方法堆棧:它包含應用程序中使用的所有本機方法。
Java平臺與其他平臺有以下區(qū)別。
Java 是基于軟件的平臺,而其他平臺可能是硬件平臺或基于軟件的平臺。
Java 在其他硬件平臺之上執(zhí)行,而其他平臺只能有硬件組件。
Classloader 是 JVM 的一個子系統(tǒng),用于加載類文件。每當我們運行 java 程序時,它首先由類加載器加載。Java中有三個內(nèi)置的類加載器。
Bootstrap ClassLoader:這是第一個類加載器,它是 Extension 類加載器的超類。它加載包含Java標準版所有類文件的rt.jar文件,如java.lang包類、java.net包類、java.util包類、java.io包類、java.sql包類等。
Extension ClassLoader:這是 Bootstrap 的子類加載器和 System 類加載器的父類加載器。它加載位于$JAVA_HOME/jre/lib/ext目錄中的 jar 文件。
System/Application ClassLoader:這是擴展類加載器的子類加載器。它從類路徑加載類文件。默認情況下,類路徑設置為當前目錄。您可以使用“-cp”或“-classpath”開關更改類路徑。它也被稱為應用程序類加載器。
在 Java 中,訪問說明符是用于定義方法、類或變量的訪問范圍的關鍵字。在 Java 中,下面給出了四個訪問說明符。
公共定義為公共的類、方法或變量可以被任何類或方法訪問。
Protected Protected 可以被同一個包的類訪問,也可以被這個類的子類訪問,也可以在同一個類內(nèi)訪問。
Default Default 只能在包中訪問。默認情況下,所有類、方法和變量都具有默認范圍。
Private定義為私有的私有類、方法或變量只能在該類中訪問。
定義為靜態(tài)的方法或變量在類的所有對象之間共享。靜態(tài)是類的一部分,而不是對象的一部分。靜態(tài)變量存儲在類區(qū)域中,我們不需要創(chuàng)建對象來訪問這些變量。因此,在需要定義類的所有對象共有的變量或方法的情況下使用靜態(tài)。
例如,在模擬學院學生集合的類中,學院名稱是所有學生的共同屬性。因此,學院名稱將被定義為static。
在 Java 中定義包有很多優(yōu)點。
包避免了名稱沖突。
包提供更容易的訪問控制。
我們還可以擁有在外部不可見并由包使用的隱藏類。
更容易找到相關的類。
它是一種基于對象的編程范式,對象具有在其所屬的類中定義的數(shù)據(jù)和方法。面向?qū)ο蠓妒街荚诮Y合模塊化和可重用性的優(yōu)點。對象是類的實例,它們相互交互以設計應用程序和程序。面向?qū)ο蠓妒接幸韵绿攸c。
在程序設計中遵循自下而上的方法。
使用對對象數(shù)據(jù)進行操作的方法來關注數(shù)據(jù)
包括像封裝和抽象這樣的概念,它向用戶隱藏復雜性并僅顯示功能。
實現(xiàn)實時方法,如繼承、抽象等。
面向?qū)ο蠓妒降氖纠?C++、Simula、Smalltalk、Python、C# 等。
對象是具有某種狀態(tài)和行為的實時實體。在 Java 中,Object 是類的實例,實例變量作為對象的狀態(tài),方法作為對象的行為??梢允褂胣ew關鍵字創(chuàng)建類的對象。
構造函數(shù)可以定義為用于初始化對象狀態(tài)的特殊類型的方法。當類被實例化時調(diào)用它,并為對象分配內(nèi)存。每次使用new關鍵字創(chuàng)建對象時,都會調(diào)用該類的默認構造函數(shù)。構造函數(shù)的名稱必須與類名相似。構造函數(shù)不能有明確的返回類型。
靜態(tài)方法屬于類而不是對象。
無需創(chuàng)建對象即可調(diào)用靜態(tài)方法。
靜態(tài)方法可以訪問和更改靜態(tài)變量的值。
靜態(tài)方法有兩個主要限制。
靜態(tài)方法不能使用非靜態(tài)數(shù)據(jù)成員或直接調(diào)用非靜態(tài)方法。
this 和 super 不能在靜態(tài)上下文中使用,因為它們是非靜態(tài)的。
因為對象不需要調(diào)用靜態(tài)方法。如果我們將 main 方法設為非靜態(tài),JVM 將不得不先創(chuàng)建它的對象,然后調(diào)用 main() 方法,這將導致額外的內(nèi)存分配。
正如我們所知,靜態(tài)上下文(方法、塊或變量)屬于類,而不是對象。由于僅在創(chuàng)建對象時才調(diào)用構造函數(shù),因此將構造函數(shù)設為靜態(tài)是沒有意義的。但是,如果您嘗試這樣做,編譯器將顯示編譯器錯誤。
在Java中,如果我們將抽象方法設為靜態(tài),它將成為類的一部分,我們可以直接調(diào)用它,這是不必要的。調(diào)用未定義的方法是完全沒有用的,因此是不允許的。
此關鍵字有以下用途。
this可用于引用當前類實例變量。
this可用于調(diào)用當前類方法(隱式)
this()可用于調(diào)用當前類的構造函數(shù)。
這可以作為方法調(diào)用中的參數(shù)傳遞。
this可以在構造函數(shù)調(diào)用中作為參數(shù)傳遞。
this可用于從方法返回當前類實例。
下面給出了在 Java 中使用繼承的各種優(yōu)點。
繼承提供代碼可重用性。派生類不需要重新定義基類的方法,除非它需要提供方法的具體實現(xiàn)。
不使用繼承就無法實現(xiàn)運行時多態(tài)性。
我們可以使用實時對象模擬類的繼承,這使得 OOP 更加真實。
繼承提供數(shù)據(jù)隱藏?;惪梢酝ㄟ^將其設為私有來隱藏派生類的一些數(shù)據(jù)。
沒有繼承就無法實現(xiàn)方法覆蓋。通過方法覆蓋,我們可以給出基類包含的一些基本方法的具體實現(xiàn)。
super關鍵字有以下用途。
super 可用于引用直接父類實例變量。
super 可用于調(diào)用直接父類方法。
super() 可用于調(diào)用直接父類構造函數(shù)。
this 和 super 關鍵字有以下區(qū)別。
super 關鍵字始終指向父類上下文,而 this 關鍵字始終指向當前類上下文。
super 關鍵字主要用于在派生類構造函數(shù)中初始化基類變量,而 this 關鍵字主要用于在傳入類構造函數(shù)時區(qū)分局部變量和實例變量。
super 和 this 必須是構造函數(shù)中的第一條語句,否則編譯器會拋出錯誤。