亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java靜態綁定與動態綁定

2019-11-14 09:31:02
字體:
來源:轉載
供稿:網友
程序綁定的概念:綁定指的是一個方法的調用與方法所在的類(方法主體)關聯起來。對java來說,綁定分為靜態綁定和動態綁定;或者叫做前期綁定和后期綁定.靜態綁定:在程序執行前方法已經被綁定(也就是說在編譯過程中就已經知道這個方法到底是哪個類中的方法),此時由編譯器或其它連接程序實現。例如:C。針對java簡單的可以理解為程序編譯期的綁定;這里特別說明一點,java當中的方法只有final,static,PRivate和構造方法是前期綁定動態綁定:后期綁定:在運行時根據具體對象的類型進行綁定。若一種語言實現了后期綁定,同時必須提供一些機制,可在運行期間判斷對象的類型,并分別調用適當的方法。也就是說,編譯器此時依然不知道對象的類型,但方法調用機制能自己去調查,找到正確的方法主體。不同的語言對后期綁定的實現方法是有所區別的。但我們至少可以這樣認為:它們都要在對象中安插某些特殊類型的信息。動態綁定的過程:虛擬機提取對象的實際類型的方法表;虛擬機搜索方法簽名;調用方法。關于final,static,private和構造方法是前期綁定的理解對于private的方法,首先一點它不能被繼承,既然不能被繼承那么就沒辦法通過它子類的對象來調用,而只能通過這個類自身的對象來調用。因此就可以說private方法和定義這個方法的類綁定在了一起。final方法雖然可以被繼承,但不能被重寫(覆蓋),雖然子類對象可以調用,但是調用的都是父類中所定義的那個final方法,(由此我們可以知道將方法聲明為final類型,一是為了防止方法被覆蓋,二是為了有效地關閉java中的動態綁定)。構造方法也是不能被繼承的(網上也有說子類無條件地繼承父類的無參數構造函數作為自己的構造函數,不過個人認為這個說法不太恰當,因為我們知道子類是通過super()來調用父類的無參構造方法,來完成對父類的初始化, 而我們使用從父類繼承過來的方法是不用這樣做的,因此不應該說子類繼承了父類的構造方法),因此編譯時也可以知道這個構造方法到底是屬于哪個類。對于static方法,具體的原理我也說不太清。不過根據網上的資料和我自己做的實驗可以得出結論:static方法可以被子類繼承,但是不能被子類重寫(覆蓋),但是可以被子類隱藏。(這里意思是說如果父類里有一個static方法,它的子類里如果沒有對應的方法,那么當子類對象調用這個方法時就會使用父類中的方法。而如果子類中定義了相同的方法,則會調用子類的中定義的方法。唯一的不同就是,當子類對象上轉型為父類對象時,不論子類中有沒有定義這個靜態方法,該對象都會使用父類中的靜態方法。因此這里說靜態方法可以被隱藏而不能被覆蓋。這與子類隱藏父類中的成員變量是一樣的。隱藏和覆蓋的區別在于,子類對象轉換成父類對象后,能夠訪問父類被隱藏的變量和方法,而不能訪問父類被覆蓋的方法)由上面我們可以得出結論,如果一個方法不可被繼承或者繼承后不可被覆蓋,那么這個方法就采用的靜態綁定。java的編譯與運行java的編譯過程是將java源文件編譯成字節碼(jvm可執行代碼,即.class文件)的過程,在這個過程中java是不與內存打交道的,在這個過程中編譯器會進行語法的分析,如果語法不正確就會報錯。Java的運行過程是指jvm(java虛擬機)裝載字節碼文件并解釋執行。在這個過程才是真正的創立內存布局,執行java程序。java字節碼的執行有兩種方式: (1)即時編譯方式:解釋器先將字節編譯成機器碼,然后再執行該機器碼;(2)解釋執行方式:解釋器通過每次解釋并執行一小段代碼來完成java字節碼程序的所有操作。(這里我們可以看出java程序在執行過程中其實是進行了兩次轉換,先轉成字節碼再轉換成機器碼。這也正是java能一次編譯,到處運行的原因。在不同的平臺上裝上對應的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),依次類推。

JAVA 虛擬機調用一個類方法時(靜態方法),它會基于對象引用的類型(通常在編譯時可知)來選擇所調用的方法。相反,當虛擬機調用一個實例方法時,它會基于對象實際的類型(只能在運行時得知)來選擇所調用的方法,這就是動態綁定,是多態的一種。動態綁定為解決實際的業務問題提供了很大的靈活性,是一種非常優美的機制。與方法不同,在處理java類中的成員變量(實例變量和類變量)時,并不是采用運行時綁定,而是一般意義上的靜態綁定。所以在向上轉型的情況下,對象的方法可以找到子類,而對象的屬性(成員變量)還是父類的屬性(子類對父類成員變量的隱藏)。Java代碼 [java] view plain copy 在CODE上查看代碼片public class Father {      protected String name = "父親屬性";  }        public class Son extends Father {      protected String name = "兒子屬性";        public static void main(String[] args) {          Father sample = new Son();          System.out.println("調用的屬性:" + sample.name);      }  }  結論,調用的成員為父親的屬性。這個結果表明,子類的對象(由父類的引用handle)調用到的是父類的成員變量。所以必須明確,運行時(動態)綁定針對的范疇只是對象的方法?,F在試圖調用子類的成員變量name,該怎么做?最簡單的辦法是將該成員變量封裝成方法getter形式。代碼如下:Java代碼 [java] view%20plain copy 派生到我的代碼片public class Father {      protected String name = "父親屬性";        public String getName() {          return name;      }  }      public class Son extends Father {      protected String name = "兒子屬性";        public String getName() {          return name;      }        public static void main(String[] args) {          Father sample = new Son();          System.out.println("調用的屬性:" + sample.getName());      }  }  結果:調用的是兒子的屬性java因為什么對屬性要采取靜態的綁定方法。這是因為靜態綁定是有很多的好處,它可以讓我們在編譯期就發現程序中的錯誤,而不是在運行期。這樣就可以提高程序的運行效率!而對方法采取動態綁定是為了實現多態,多態是java的一大特色。多態也是面向對象的關鍵技術之一,所以java是以效率為代價來實現多態這是很值得的。

注:以上內容大部分來自互聯網,小部分是個人見解,絕非權威性言論。如有語言表達不當或者表述不正確的地方,萬望指教。

轉自:http://blog.csdn.net/zhangjk1993/article/details/24066085


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品偷伦免费视频观看的| 久久久国产一区二区| 97涩涩爰在线观看亚洲| 色小说视频一区| 国产v综合v亚洲欧美久久| 久久精品99国产精品酒店日本| 久久99精品久久久久久噜噜| 日韩日本欧美亚洲| 国产丝袜一区二区三区| 国产91ⅴ在线精品免费观看| 日韩电影中文 亚洲精品乱码| 91精品视频免费看| 久久久久www| 亚洲人成免费电影| 国产婷婷成人久久av免费高清| 亚洲欧美在线播放| 亚洲成人1234| 国产ts人妖一区二区三区| 狠狠躁夜夜躁人人爽天天天天97| 久久久成人精品| 欧美精品精品精品精品免费| 亚洲v日韩v综合v精品v| 欧美自拍视频在线| 国产亚洲欧洲高清一区| 日韩欧美亚洲成人| 日韩hd视频在线观看| 欧美日韩国产成人高清视频| 亚洲一区二区精品| 8x海外华人永久免费日韩内陆视频| 九九九久久久久久| 国产美女久久精品香蕉69| 亚洲天堂免费在线| 成人国产精品久久久| 一区二区三区四区在线观看视频| 国产精品入口免费视频一| 性欧美办公室18xxxxhd| 午夜精品久久久久久久99热浪潮| 久久久人成影片一区二区三区观看| 色视频www在线播放国产成人| 成人字幕网zmw| 国产精品h在线观看| 亚洲影院在线看| 亚洲精品国产综合久久| 欧美成人手机在线| 国产日韩精品在线观看| 韩剧1988免费观看全集| 精品一区二区三区电影| 亚洲男人天堂2023| 川上优av一区二区线观看| 一区二区欧美日韩视频| 久久久久久久亚洲精品| 亚洲影院在线看| 欧美综合在线第二页| 色噜噜国产精品视频一区二区| 国产精品视频在线观看| 亚洲日本欧美中文幕| 久久精品国产亚洲7777| 精品国产一区二区三区在线观看| 欧美片一区二区三区| 亚洲精品999| 97国产精品免费视频| 狠狠躁18三区二区一区| 川上优av一区二区线观看| 青草青草久热精品视频在线观看| 国产在线一区二区三区| 国产精品久久久久久久久久ktv| 欧美激情小视频| 亚洲人成电影在线观看天堂色| 97国产成人精品视频| 国产精品成人免费电影| 热久久视久久精品18亚洲精品| 久久久精品在线| 性色av一区二区三区红粉影视| 日韩黄色av网站| 色妞色视频一区二区三区四区| 国内揄拍国内精品少妇国语| 欧美性xxxxx极品| 91麻豆国产精品| 久久精品视频播放| 92福利视频午夜1000合集在线观看| 国产欧美日韩免费看aⅴ视频| 国产精品日韩欧美大师| 国产91|九色| 国产精品爱久久久久久久| 日韩最新中文字幕电影免费看| 岛国av一区二区在线在线观看| 中文字幕av一区中文字幕天堂| 日韩视频免费在线观看| 欧美性极品少妇精品网站| 久久久久久久久久久91| 欧美电影免费观看电视剧大全| 国产精品久久久久久久久久久久久久| 久久久精品欧美| 亚洲精品美女久久久| 国产日韩欧美91| 91国内免费在线视频| 亚洲人永久免费| 精品无人区太爽高潮在线播放| 伊人青青综合网站| 亚洲男人天堂视频| 国产精品久久久久久超碰| 黑人极品videos精品欧美裸| 亚洲女在线观看| 68精品久久久久久欧美| 亚洲91精品在线观看| 国产在线精品播放| 欧美精品电影在线| 国产小视频91| 91av在线播放| 国产精品一区二区久久久久| 亚洲成人黄色网| 亚洲欧洲在线播放| 亚洲国产成人在线播放| 亚洲专区在线视频| 最近免费中文字幕视频2019| 日韩av片免费在线观看| 91久久精品久久国产性色也91| 国产精品444| 国产一区二区三区直播精品电影| 亚洲精品国精品久久99热| 亚洲夜晚福利在线观看| 亚洲免费视频网站| 啪一啪鲁一鲁2019在线视频| 九九久久久久99精品| 91精品在线观| 亚洲精品国产免费| 欧美性猛交xxxx免费看漫画| 亚洲午夜女主播在线直播| 韩日欧美一区二区| 久久久99久久精品女同性| 成人观看高清在线观看免费| 久久久影视精品| 91在线视频成人| 国内精品久久久久伊人av| 在线视频亚洲欧美| 这里只有精品视频在线| 亚洲天堂男人天堂| 欧美成人手机在线| 一区二区三区视频免费在线观看| 欧美成人精品一区二区三区| 亚洲人成网站免费播放| 成人精品久久av网站| 日韩免费中文字幕| 韩国美女主播一区| 色综合久综合久久综合久鬼88| 免费97视频在线精品国自产拍| 国产一区二区成人| 日本中文字幕不卡免费| 国产精品欧美一区二区三区奶水| 清纯唯美亚洲激情| 亚洲成人激情视频| 成人免费网站在线| 欧美在线观看日本一区| 91精品久久久久| 麻豆成人在线看| 日本精品免费一区二区三区| 国产精品久久久久久久久久久新郎| 亚洲视频欧美视频| 欧美性猛交xxxx乱大交蜜桃| 91青草视频久久| 欧美成人剧情片在线观看| 久久久精品一区二区| 精品无人国产偷自产在线| 国产成人精品久久久|