搜尋
首頁Javajava教程Java修飾符 abstract,static,final 的區別詳解

static 表示靜態,它可以修飾屬性,方法和程式碼區塊。

1.static修飾屬性(類變量),那麼這個屬性就可以用類名.屬性名來訪問,也就是使這個屬性成為本類的類變量,為本類對象所共有。這個屬性就是全類公有。 (共有的類別變數與物件無關,只和類別有關)。

類別載入的過程,類別本身也是保存在檔案中(字節碼檔案保存著類別的資訊)的,java會透過I/O流把類別的檔案(字節碼檔案)讀入JVM(java虛擬機),這個過程成為類別的載入。 JVM(java虛擬機器)會透過類別路徑(CLASSPATH)來找字節碼檔案。

類別變數,會在載入時自動初始化,初始化規則和實例變數相同。

注意:類別中的實例變數是在創建物件時被初始化的,被static修飾的屬性,也就是類別變量,是在類別載入時被建立並進行初始化,類別載入的過程是進行一次。也就是類別變數只會被創建一次。

2.static修飾方法(靜態方法),會使這個方法成為整個類別所公有的方法,可以用類別名稱.方法名稱存取。

注意:static修飾的方法,不直接能存取本類別中的非靜態(static)成員(包括方法和屬性),本類別的非靜態(static)方法可以存取本類別的靜態成員(包括方法和屬性),可以呼叫靜態方法。靜態方法要慎重使用。在靜態方法中不能出現this關鍵字。

注意:父類別中是靜態方法,子類別中不能覆寫為非靜態方法,在符合覆蓋規則的前提下,在父子類別中,父類別中的靜態方法可以被子類別中的靜態方法覆蓋,但是沒有多態。 (在使用物件呼叫靜態方法是其實是呼叫編譯時類型的靜態方法)

注意:父子類別中,靜態方法只能被靜態方法覆寫,父子類別中,非靜態方法只能被非靜態方法覆寫。

java中的main方法必須寫成static的因為,在類別載入時無法建立對象,因為靜態方法可以不透過物件呼叫所以在類別的main方法。所在在類別載入時就可以透過main方法入口來執行程式。

3.static修飾初始程式碼區塊,這時這個初始程式碼區塊就叫做靜態初始程式碼區塊,這個程式碼區塊只在類別載入時執行一次。可以用靜態初始程式碼區塊初始化一個類別。

動態初始程式碼區塊,寫在類別中的“{}”,這個程式碼區塊是在產生物件的初始化屬性是運行。這種程式碼區塊叫動態初始程式碼區塊。

類在什麼時候會被加載,創建對象時會加載類,調用類中靜態方法或訪問靜態屬性也是會加載類的。在載入子類別時必會先載入父類,類別載入會有延遲載入原則,只有在必須載入時才會載入。

final修飾符,可以修飾變量,方法,類別

1.final修飾變數
被fianl修飾的變數就會變成常數(常數應大寫),一旦賦值不能改變,(可以在初始化時直接賦值,也可以在構造方法裡也可以賦值,只能在這兩種方法裡二選一,不能不為常數賦值),fianl的常數不會有預設初始值,對於直接在初始化是賦值時final修飾符常和static修飾符一起使用。

2.final修飾方法,被final修飾的方法將不能被其子類別覆蓋,並且保持方法的穩定不能被覆蓋。
3.final修飾類,被final修飾的類別將不能被繼承。 final類別中的方法也都是final的。

注意:final,不能用來修飾構造方法,在父類別中如果有常數屬性,在子類別中使用常數屬性時是不會進行父類別的類別載入。

不變模式,物件一旦建立屬性就不會改變。用final修飾屬​​性,也用final修飾類別(強不變模式),用final修飾屬​​性(弱不變模式)。

不變模式的典型體現:java.lang.String類,不變模式可以實現物件的共享(可以用一個物件實例賦值給多個物件變數)

池化的思想,把需要共享的資料放在池中(節省空間,共享資料)
只有String類別可以用「」中的字面值建立物件。在String類別中,以字面值建立時,會到Java方法空間的串池空間中去查找,如果有就回傳串池中字串的位址,並把這個位址付給物件變數。如果沒有則會在串列池中建立字串對象,並傳回其地址付購對象變量,當另一個以字面值建立對象時則會重複上述過程。
如果是new在堆空間中建立String類別的對象,則不會有上述的過程。

String類別中的intern()方法會將在堆空間中建立的String類別物件中的字串和串池中的比對,如果有相同的字串就傳回這個串的串池中的位址。

不變模式在對於物件進行修改,添加操作是使相當麻煩的,他會產生很多的中間垃圾物件。創建和銷毀的資源的開銷是相當大的。

String類別在字串連接時會先的效率很低,就是因為它所產生的物件的書性是不能夠修改的,當連接字串時也就是只能建立新的物件。

對於很多的字串連接,應當使用StringBuffer類,在使用這個類別的物件來進行字串連接時就不會有多餘的中間物件生成,從而優化了效率。

abstract(抽象)修飾符,可以修飾類別和方法
1.abstract修飾類,會使這個類別成為一個抽象類,這個類別將不能產生物件實例,但可以做為物件變數聲明的類型,也就是編譯時類型,抽象類別就像當於一類別的半成品,需要子類別繼承並覆寫其中的抽象方法。

2.abstract修飾方法,會使這個方法變成抽象方法,也就是只有聲明(定義)而沒有實現,實現部分以";"代替。需要子類別繼承實作(覆蓋)。

注意:有抽象方法的類別一定是抽象類別。但是抽象類別中不一定都是抽象方法,也可以全是具體方法。
abstract修飾符在修飾類別時必須放在類別名稱前。

abstract修飾方法就是要求其子類別覆寫(實作)這個方法。呼叫時可以以多型方式呼叫子類別覆寫(實作)後的方法,也就是說抽象方法必須在其子類別中實現,除非子類別本身也是抽象類別。

注意:父類是抽象類,其中有抽象方法,那麼子類繼承父類,並把父類中的所有抽象方法都實現(覆蓋)了,子類才有創建對象的實例的能力,否則子類別也必須是抽象類別。抽象類別中可以有建構方法,是子類別在建構子類別物件時需要呼叫的父類別(抽象類別)的建構方法。

final和abstract,private和abstract,static和abstract,這些是不能放在一起的修飾符,因為abstract修飾的方法是必須在其子類中實現(覆蓋),才能以多態方式調用,以上修飾符在修飾方法時期子類別都覆寫不了這個方法,final是不可以覆寫,private是不能夠繼承到子類,所以也就不能覆寫,static是可以覆寫的,但是在呼叫時會呼叫編譯時類型的方法,因為呼叫的是父類別的方法,而父類別的方法又是抽象的方法,又不能夠調用,所以上的修飾符不能放在一起。

抽象(abstract)方法代表了某種標準,定義標準,定義功能,在子類別中去實作功能(子類別繼承了父類別並需要給出從父類別繼承的抽象方法的實作)。
方法一時間想不到怎麼被實現,或有意要子類別去實現而定義某種標準,這個方法可以被定義為抽象。 (abstract)

模板方法模式
用abstract把製訂標準和實現標準分開,制定的標準就是模板,實現就是按模板標準來實現,也就是繼承模板,實現模板中對應功能的方法。模板中不允許修改的方法可以用fianl來修飾,這個方法不能使抽象方法,為確保安全,封裝,把模板中不公開的部分用protected(保護)修飾。

更多Java修飾符 abstract,static,final 的區別詳解相關文章請關注PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JVM如何促進Java的'寫作一次,在任何地方運行”(WORA)功能?JVM如何促進Java的'寫作一次,在任何地方運行”(WORA)功能?May 02, 2025 am 12:25 AM

JVM通過字節碼解釋、平台無關的API和動態類加載實現Java的WORA特性:1.字節碼被解釋為機器碼,確保跨平台運行;2.標準API抽像操作系統差異;3.類在運行時動態加載,保證一致性。

Java的較新版本如何解決平台特定問題?Java的較新版本如何解決平台特定問題?May 02, 2025 am 12:18 AM

Java的最新版本通過JVM優化、標準庫改進和第三方庫支持有效解決平台特定問題。 1)JVM優化,如Java11的ZGC提升了垃圾回收性能。 2)標準庫改進,如Java9的模塊系統減少平台相關問題。 3)第三方庫提供平台優化版本,如OpenCV。

說明JVM執行的字節碼驗證的過程。說明JVM執行的字節碼驗證的過程。May 02, 2025 am 12:18 AM

JVM的字節碼驗證過程包括四個關鍵步驟:1)檢查類文件格式是否符合規範,2)驗證字節碼指令的有效性和正確性,3)進行數據流分析確保類型安全,4)平衡驗證的徹底性與性能。通過這些步驟,JVM確保只有安全、正確的字節碼被執行,從而保護程序的完整性和安全性。

平台獨立性如何簡化Java應用程序的部署?平台獨立性如何簡化Java應用程序的部署?May 02, 2025 am 12:15 AM

Java'splatFormIndepentEncealLowsApplicationStorunonAnyOperatingsystemwithajvm.1)singleCodeBase:writeandeandcompileonceforallplatforms.2)easileupdates:updatebybytecodeforsimultanane deployment.3)testOnOneOnePlatForforurouniverSalpeforuluniverSalpehavior formafforulululyiversalivernave.444.44.444

Java的平台獨立性如何隨著時間的流逝而發展?Java的平台獨立性如何隨著時間的流逝而發展?May 02, 2025 am 12:12 AM

Java的平台獨立性通過JVM、JIT編譯、標準化、泛型、lambda表達式和ProjectPanama等技術不斷增強。自1990年代以來,Java從基本的JVM演進到高性能的現代JVM,確保了代碼在不同平台的一致性和高效性。

在Java應用程序中緩解平台特定問題的策略是什麼?在Java應用程序中緩解平台特定問題的策略是什麼?May 01, 2025 am 12:20 AM

Java如何緩解平台特定的問題? Java通過JVM和標準庫來實現平台無關性。 1)使用字節碼和JVM抽像操作系統差異;2)標準庫提供跨平台API,如Paths類處理文件路徑,Charset類處理字符編碼;3)實際項目中使用配置文件和多平台測試來優化和調試。

Java的平台獨立性與微服務體系結構之間有什麼關係?Java的平台獨立性與微服務體系結構之間有什麼關係?May 01, 2025 am 12:16 AM

java'splatformentenceenhancesenhancesmicroservicesharchitecture byferingDeploymentFlexible,一致性,可伸縮性和便攜性。 1)DeploymentFlexibilityAllowsibilityAllowsOllowsOllowSorlowsOllowsOllowsOllowSeStorunonAnyPlatformwithajvM.2)penterencyCrossServAccAcrossServAcrossServiCessImplifififiesDeevelopmentandeDe

GRAALVM與Java的平台獨立目標有何關係?GRAALVM與Java的平台獨立目標有何關係?May 01, 2025 am 12:14 AM

GraalVM通過三種方式增強了Java的平台獨立性:1.跨語言互操作,允許Java與其他語言無縫互操作;2.獨立的運行時環境,通過GraalVMNativeImage將Java程序編譯成本地可執行文件;3.性能優化,Graal編譯器生成高效的機器碼,提升Java程序的性能和一致性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境