一個Java程式的執行要經過編譯和執行(解釋)這兩個步驟,同時Java又是物件導向的程式語言。當子類別和父類別存在同一個方法,子類別重寫了父類別的方法,程式在執行時呼叫方法是呼叫父類別的方法還是子類別的重寫方法呢,這應該是我們在初學Java時遇到的問題。這裡首先我們將確定這種呼叫何種方法實作或變數的操作叫做綁定。
在Java中存在兩種綁定方式,一種為靜態綁定,又稱作早期綁定。另一種是動態綁定,也稱為後期綁定。
程式綁定的概念:
綁定指的是一個方法的呼叫與方法所在的類別(方法主體)關聯起來。對java來說,綁定分為靜態綁定和動態綁定;或者稱為前期綁定和後期綁定
靜態綁定(早期綁定編譯器綁定):
在程式執行前方法已經被綁定,此時由編譯器或其它連接程式實作。例如:C 。針對java可以理解為程式編譯期的綁定;特別說明一點,java當中的方法只有final,static,private和構造方法是前期綁定
動態綁定(遲綁定運行期綁定):
後期綁定:在運行時根據特定物件的類型進行綁定。
若一種語言實現了後期綁定,同時必須提供一些機制在運行期間判斷對象的類型,並分別調用適當的方法。也就是說編譯器此時依然不知道物件的類型,但方法呼叫機制能自己去調查,找到正確的方法主體。不同的語言對後期綁定的實作方法是有所區別的。可以這樣認為:它們都要在物件中安插某些特殊類型的信息。
動態綁定的過程:
虛擬機提取物件的實際類型的方法表
虛擬機搜尋方法簽章
呼叫方法
虛擬機搜尋方法簽章呼叫方法關於綁定相關的總結:發現java屬於後期綁定。在java中,幾乎所有的方法都是後期綁定,在運行時動態綁定方法屬於子類別還是基類。但也有特殊,針對static方法和final方法由於不能被繼承,因此在編譯時就可以確定他們的值,他們是屬於前期綁定。特別說明的一點,private宣告的方法和成員變數不能被子類別繼承,所有的private方法都被隱式的指定為final的(由此我們知道:將方法宣告為final類型的 一是為了防止方法被覆寫,二是為了有效的關閉java中的動態綁定)。 java中的後期綁定是由JVM來實現的,我們不用去顯式的聲明它,而C++則不同,必須明確的聲明某個方法具備後期綁定。 java當中的向上轉型或說多態是藉助於動態綁定實現的,所以理解動態綁定,也就搞定向上轉型和多態。 對於java當中的方法而言,除了final,static,private和構造方法是前期綁定外,其他的方法全部為動態綁定。而動態綁定的典型發生在父類別和子類別的轉換聲明之下:例如:Parent p = new Children();具體過程如下:1、編譯器檢查物件的聲明類型和方法名。假設我們呼叫x.f(args)方法,並且x已經被宣告為C類別的對象,那麼編譯器會列舉出C類別中所有的名稱為f的方法和從C類別的超類別繼承過來的f方法 2、接下來編譯器檢查方法呼叫中提供的參數類型。如果在所有名稱為f 的方法中有一個參數類型和呼叫提供的參數類型最為匹配,那麼就調用這個方法,這個過程叫做“重載解析”3、當程式運行並且使用動態綁定呼叫方法時,虛擬機器必須呼叫同x所指向的物件的實際類型相符的方法版本。假設實際型別為D(C的子類),如果D類定義了f(String)那麼該方法被調用,否則就在D的超類中搜尋方法f(String),依次類推問題思考:如何提供給方法使用者一個方法,來完成一個任務。如果用戶有特殊要求又要可以自訂自己的方法? 涉及知識:子父類,接口,向上轉型,動態綁定具體代碼:
package com.chengxuyuanzhilu; public interface MyInterfaces { void doting(); } package com.chengxuyuanzhilu; public class Drink implements MyInterfaces { @Override public void doting() { System.out.println("我在喝水"); } } package com.chengxuyuanzhilu; public class Eat implements MyInterfaces { @Override public void doting() { System.out.println("我在吃东西"); } } package com.chengxuyuanzhilu; public class Run implements MyInterfaces { @Override public void doting() { System.out.println("我在奔跑"); } } package com.chengxuyuanzhilu; public class TestDynamicBind { public static void main(String[] args) { MyInterfaces my = null; my = new Eat(); bind(my); my = new Drink(); bind(my); my = new Run(); bind(my); } static void bind(MyInterfaces my){ my.doting(); } }以上就是本文的全部內容,希望對大家的學習有所幫助。 🎜🎜更多理解Java中的靜態綁定和動態綁定相關文章請關注PHP中文網! 🎜

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生產性。 1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允許CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

JVMhasacloserelationshipwiththeOSasittranslatesJavabytecodeintomachine-specificinstructions,managesmemory,andhandlesgarbagecollection.ThisrelationshipallowsJavatorunonvariousOSenvironments,butitalsopresentschallengeslikedifferentJVMbehaviorsandOS-spe

Java實現“一次編寫,到處運行”通過編譯成字節碼並在Java虛擬機(JVM)上運行。 1)編寫Java代碼並編譯成字節碼。 2)字節碼在任何安裝了JVM的平台上運行。 3)使用Java原生接口(JNI)處理平台特定功能。儘管存在挑戰,如JVM一致性和平台特定庫的使用,但WORA大大提高了開發效率和部署靈活性。

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允許Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

JavaispoperfulduetoitsplatFormitiondence,對象與偏見,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

Java的頂級功能包括:1)面向對象編程,支持多態性,提升代碼的靈活性和可維護性;2)異常處理機制,通過try-catch-finally塊提高代碼的魯棒性;3)垃圾回收,簡化內存管理;4)泛型,增強類型安全性;5)ambda表達式和函數式編程,使代碼更簡潔和表達性強;6)豐富的標準庫,提供優化過的數據結構和算法。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版
視覺化網頁開發工具