精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從Java靜態綁定和動態綁定中得到優化啟示

開發 后端
一個Java程序的執行要經過編譯和執行(解釋)這兩個步驟,同時Java又是面向對象的編程語言。當子類和父類存在同一個方法,子類重寫了父類的方法,程序在運行時調用方法是調用父類的方法還是子類的重寫方法呢,這應該是我們在初學Java時遇到的問題。這里首先我們將確定這種調用何種方法實現或者變量的操作叫做綁定。

一個Java程序的執行要經過編譯和執行(解釋)這兩個步驟,同時Java又是面向對象的編程語言。當子類和父類存在同一個方法,子類重寫了父類的方法,程序在運行時調用方法是調用父類的方法還是子類的重寫方法呢,這應該是我們在初學Java時遇到的問題。這里首先我們將確定這種調用何種方法實現或者變量的操作叫做綁定。

在Java中存在兩種綁定方式,一種為靜態綁定,又稱作早期綁定。另一種就是動態綁定,亦稱為后期綁定。

區別對比

  • 靜態綁定發生在編譯時期,動態綁定發生在運行時
  • 使用private或static或final修飾的變量或者方法,使用靜態綁定。而虛方法(可以被子類重寫的方法)則會根據運行時的對象進行動態綁定。
  • 靜態綁定使用類信息來完成,而動態綁定則需要使用對象信息來完成。
  • 重載(Overload)的方法使用靜態綁定完成,而重寫(Override)的方法則使用動態綁定完成。

重載方法的示例

這里展示一個重載方法的示例。

  1. public class TestMain { 
  2.   public static void main(String[] args) { 
  3.       String str = new String(); 
  4.       Caller caller = new Caller(); 
  5.       caller.call(str); 
  6.   } 
  7.  
  8.   static class Caller { 
  9.       public void call(Object obj) { 
  10.           System.out.println("an Object instance in Caller"); 
  11.       } 
  12.        
  13.       public void call(String str) { 
  14.           System.out.println("a String instance in in Caller"); 
  15.       } 
  16.   } 

執行的結果為

  1. 22:19 $ java TestMain 
  2. a String instance in in Caller 

在上面的代碼中,call方法存在兩個重載的實現,一個是接收Object類型的對象作為參數,另一個則是接收String類型的對象作為參數。str是一個String對象,所有接收String類型參數的call方法會被調用。而這里的綁定就是在編譯時期根據參數類型進行的靜態綁定。

驗證

光看表象無法證明是進行了靜態綁定,使用javap發編譯一下即可驗證。

  1. 22:19 $ javap -c TestMain 
  2. Compiled from "TestMain.java" 
  3. public class TestMain { 
  4.   public TestMain(); 
  5.     Code: 
  6.        0: aload_0 
  7.        1: invokespecial #1                  // Method java/lang/Object."<init>":()V 
  8.        4return 
  9.  
  10.   public static void main(java.lang.String[]); 
  11.     Code: 
  12.        0new           #2                  // class java/lang/String 
  13.        3: dup 
  14.        4: invokespecial #3                  // Method java/lang/String."<init>":()V 
  15.        7: astore_1 
  16.        8new           #4                  // class TestMain$Caller 
  17.       11: dup 
  18.       12: invokespecial #5                  // Method TestMain$Caller."<init>":()V 
  19.       15: astore_2 
  20.       16: aload_2 
  21.       17: aload_1 
  22.       18: invokevirtual #6                  // Method TestMain$Caller.call:(Ljava/lang/String;)V 
  23.       21return 

看到了這一行18: invokevirtual #6 // Method TestMain$Caller.call:(Ljava/lang/String;)V確實是發生了靜態綁定,確定了調用了接收String對象作為參數的caller方法。

重寫方法的示例

  1. public class TestMain { 
  2.   public static void main(String[] args) { 
  3.       String str = new String(); 
  4.       Caller caller = new SubCaller(); 
  5.       caller.call(str); 
  6.   } 
  7.    
  8.   static class Caller { 
  9.       public void call(String str) { 
  10.           System.out.println("a String instance in Caller"); 
  11.       } 
  12.   } 
  13.    
  14.   static class SubCaller extends Caller { 
  15.       @Override 
  16.       public void call(String str) { 
  17.           System.out.println("a String instance in SubCaller"); 
  18.       } 
  19.   } 

執行的結果為

  1. 22:27 $ java TestMain 
  2. a String instance in SubCaller 

上面的代碼,Caller中有一個call方法的實現,SubCaller繼承Caller,并且重寫了call方法的實現。我們聲明了一個Caller類型的變量callerSub,但是這個變量指向的時一個SubCaller的對象。根據結果可以看出,其調用了SubCaller的call方法實現,而非Caller的call方法。這一結果的產生的原因是因為在運行時發生了動態綁定,在綁定過程中需要確定調用哪個版本的call方法實現。

驗證

使用javap不能直接驗證動態綁定,然后如果證明沒有進行靜態綁定,那么就說明進行了動態綁定。

  1. 22:27 $ javap -c TestMain 
  2. Compiled from "TestMain.java" 
  3. public class TestMain { 
  4.   public TestMain(); 
  5.     Code: 
  6.        0: aload_0 
  7.        1: invokespecial #1                  // Method java/lang/Object."<init>":()V 
  8.        4return 
  9.  
  10.   public static void main(java.lang.String[]); 
  11.     Code: 
  12.        0new           #2                  // class java/lang/String 
  13.        3: dup 
  14.        4: invokespecial #3                  // Method java/lang/String."<init>":()V 
  15.        7: astore_1 
  16.        8new           #4                  // class TestMain$SubCaller 
  17.       11: dup 
  18.       12: invokespecial #5                  // Method TestMain$SubCaller."<init>":()V 
  19.       15: astore_2 
  20.       16: aload_2 
  21.       17: aload_1 
  22.       18: invokevirtual #6                  // Method TestMain$Caller.call:(Ljava/lang/String;)V 
  23.       21return 

正如上面的結果,18: invokevirtual #6 // Method TestMain$Caller.call:(Ljava/lang/String;)V這里是TestMain$Caller.call而非TestMain$SubCaller.call,因為編譯期無法確定調用子類還是父類的實現,所以只能丟給運行時的動態綁定來處理。

當重載遇上重寫

下面的例子有點變態哈,Caller類中存在call方法的兩種重載,更復雜的是SubCaller集成Caller并且重寫了這兩個方法。其實這種情況是上面兩種情況的復合情況。

下面的代碼首先會發生靜態綁定,確定調用參數為String對象的call方法,然后在運行時進行動態綁定確定執行子類還是父類的call實現。

  1. public class TestMain { 
  2.   public static void main(String[] args) { 
  3.       String str = new String(); 
  4.       Caller callerSub = new SubCaller(); 
  5.       callerSub.call(str); 
  6.   } 
  7.    
  8.   static class Caller { 
  9.       public void call(Object obj) { 
  10.           System.out.println("an Object instance in Caller"); 
  11.       } 
  12.        
  13.       public void call(String str) { 
  14.           System.out.println("a String instance in in Caller"); 
  15.       } 
  16.   } 
  17.    
  18.   static class SubCaller extends Caller { 
  19.       @Override 
  20.       public void call(Object obj) { 
  21.           System.out.println("an Object instance in SubCaller"); 
  22.       } 
  23.        
  24.       @Override 
  25.       public void call(String str) { 
  26.           System.out.println("a String instance in in SubCaller"); 
  27.       } 
  28.   } 

執行結果為

  1. 22:30 $ java TestMain 
  2. a String instance in in SubCaller 

驗證

由于上面已經介紹,這里只貼一下反編譯結果啦

  1. 22:30 $ javap -c TestMain 
  2. Compiled from "TestMain.java" 
  3. public class TestMain { 
  4.   public TestMain(); 
  5.     Code: 
  6.        0: aload_0 
  7.        1: invokespecial #1                  // Method java/lang/Object."<init>":()V 
  8.        4return 
  9.  
  10.   public static void main(java.lang.String[]); 
  11.     Code: 
  12.        0new           #2                  // class java/lang/String 
  13.        3: dup 
  14.        4: invokespecial #3                  // Method java/lang/String."<init>":()V 
  15.        7: astore_1 
  16.        8new           #4                  // class TestMain$SubCaller 
  17.       11: dup 
  18.       12: invokespecial #5                  // Method TestMain$SubCaller."<init>":()V 
  19.       15: astore_2 
  20.       16: aload_2 
  21.       17: aload_1 
  22.       18: invokevirtual #6                  // Method TestMain$Caller.call:(Ljava/lang/String;)V 
  23.       21return 

好奇問題

非動態綁定不可么?

其實理論上,某些方法的綁定也可以由靜態綁定實現。比如

  1. public static void main(String[] args) { 
  2.       String str = new String(); 
  3.       final Caller callerSub = new SubCaller(); 
  4.       callerSub.call(str); 

比如這里callerSub持有subCaller的對象并且callerSub變量為final,立即執行了call方法,編譯器理論上通過足夠的分析代碼,是可以知道應該調用SubCaller的call方法。

但是為什么沒有進行靜態綁定呢?
假設我們的Caller繼承自某一個框架的BaseCaller類,其實現了call方法,而BaseCaller繼承自SuperCaller。SuperCaller中對call方法也進行了實現。

假設某框架1.0中的BaseCaller和SuperCaller

  1. static class SuperCaller { 
  2.   public void call(Object obj) { 
  3.       System.out.println("an Object instance in SuperCaller"); 
  4.   } 
  5.    
  6. static class BaseCaller extends SuperCaller { 
  7.   public void call(Object obj) { 
  8.       System.out.println("an Object instance in BaseCaller"); 
  9.   } 

而我們使用框架1.0進行了這樣的實現。Caller繼承自BaseCaller,并且調用了super.call方法。

  1. public class TestMain { 
  2.   public static void main(String[] args) { 
  3.       Object obj = new Object(); 
  4.       SuperCaller callerSub = new SubCaller(); 
  5.       callerSub.call(obj); 
  6.   } 
  7.    
  8.   static class Caller extends BaseCaller{ 
  9.       public void call(Object obj) { 
  10.           System.out.println("an Object instance in Caller"); 
  11.           super.call(obj); 
  12.       } 
  13.        
  14.       public void call(String str) { 
  15.           System.out.println("a String instance in in Caller"); 
  16.       } 
  17.   } 
  18.    
  19.   static class SubCaller extends Caller { 
  20.       @Override 
  21.       public void call(Object obj) { 
  22.           System.out.println("an Object instance in SubCaller"); 
  23.       } 
  24.        
  25.       @Override 
  26.       public void call(String str) { 
  27.           System.out.println("a String instance in in SubCaller"); 
  28.       } 
  29.   } 

然后我們基于這個框架的1.0版編譯出來了class文件,假設靜態綁定可以確定上面Caller的super.call為BaseCaller.call實現。

然后我們再次假設這個框架1.1版本中BaseCaller不重寫SuperCaller的call方法,那么上面的假設可以靜態綁定的call實現在1.1版本就會出現問題,因為在1.1版本上super.call應該是使用SuperCall的call方法實現,而非假設使用靜態綁定確定的BaseCaller的call方法實現。

所以,有些實際可以靜態綁定的,考慮到安全和一致性,就索性都進行了動態綁定。

得到的優化啟示?

由于動態綁定需要在運行時確定執行哪個版本的方法實現或者變量,比起靜態綁定起來要耗時。

所以在不影響整體設計,我們可以考慮將方法或者變量使用private,static或者final進行修飾。

參考文章

一本書

  • Java核心技術,Java領域最有影響力和價值的著作之一,擁有20多年教學與研究經驗的資深Java技術專家撰寫(獲Jolt大獎),與《Java編程思想》齊名,10余年全球暢銷不衰,廣受好評。

責任編輯:張偉 來源: 技術小黑屋
相關推薦

2012-01-09 11:26:15

Java

2009-07-22 08:52:05

Scala動態綁定

2011-08-22 09:34:50

Objective-C多態動態類型

2016-12-14 14:29:30

Java動態綁定機制

2014-04-02 09:21:52

2013-08-19 14:27:49

2016-09-27 16:26:58

2011-12-30 09:40:28

2017-08-07 16:39:03

JSX動態數據

2022-02-18 08:28:49

域名公網IP

2016-10-11 20:33:17

JavaScriptThisWeb

2010-07-30 10:45:08

Flex數據綁定

2021-12-12 20:10:49

域名動態IP

2011-03-30 09:13:13

靜態類Windows Pho

2022-01-18 10:39:29

自動駕駛數據人工智能

2011-07-27 08:56:32

Oracle數據庫綁定變量軟解析

2023-10-07 11:04:58

WPF數據UI

2023-10-20 09:51:00

編程開發

2021-07-06 06:39:22

Java靜態代理動態代理

2009-06-18 14:40:44

TreeView動態綁
點贊
收藏

51CTO技術棧公眾號

噜噜噜天天躁狠狠躁夜夜精品 | 亚洲少妇视频| 97久久精品人人爽人人爽蜜臀| 欧美一级免费看| 国产精品成人无码免费| 在线日韩三级| 无吗不卡中文字幕| 亚洲精品8mav| 人人妻人人玩人人澡人人爽| 日本伊人午夜精品| 欧美国产日韩一区| 性欧美一区二区| 日本高清久久| 91久久久免费一区二区| 青青草影院在线观看| 青青视频在线观| 韩日av一区二区| 69视频在线免费观看| 黄色激情小视频| 日韩美脚连裤袜丝袜在线| 欧美日韩成人综合天天影院| 农民人伦一区二区三区| 69久久精品| 99精品国产视频| 亚洲xxxx18| 日批视频免费观看| 亚洲日韩成人| 欧美老妇交乱视频| 乐播av一区二区三区| 白嫩白嫩国产精品| 69久久夜色精品国产69蝌蚪网| 国产v片免费观看| 搞黄网站在线观看| 国产精品麻豆久久久| 好吊色欧美一区二区三区| 国产精品一二三四五区| 日韩中文字幕亚洲一区二区va在线| 欧美福利视频在线| 欧美xxxooo| 成人影院天天5g天天爽无毒影院| 亚洲第一偷拍网| 在线免费黄色网| 成人自拍视频网| 色哟哟国产精品| 日韩国产一级片| 色操视频在线| 亚洲三级小视频| 男女啪啪的视频| 日本高清在线观看wwwww色| 国产三区在线成人av| 久久久久久久久久久久久久一区| 男人天堂手机在线观看| 国产精品88av| 亚洲综合小说区| 精品人妻一区二区三区四区不卡 | 99久久久国产精品美女| 国产一区二区精品丝袜| 色欲av无码一区二区三区| 婷婷亚洲精品| 亚洲精品资源在线| 中文人妻一区二区三区| 在线观看欧美理论a影院| 精品亚洲夜色av98在线观看| 日本丰满少妇裸体自慰| 亚洲人亚洲人色久| 在线成人激情视频| 国产成人在线网址| 我不卡手机影院| 久久好看免费视频| 极品久久久久久| 黑人一区二区| 4p变态网欧美系列| 不卡av电影在线| 麻豆一区二区99久久久久| 国产欧美日韩中文字幕在线| 97久久人国产精品婷婷| 国产精品69毛片高清亚洲| 亚洲影影院av| 人妻与黑人一区二区三区| 久久综合色8888| 亚洲bbw性色大片| sm国产在线调教视频| 亚洲国产va精品久久久不卡综合| 国产美女网站在线观看| 成人免费影院| 欧美人体做爰大胆视频| 在线免费黄色网| 精品无人区一区二区| 亚洲天堂第二页| 国产黄色录像片| 极品少妇一区二区三区| 日本欧美黄网站| 97av免费视频| 不卡av免费在线观看| 日本10禁啪啪无遮挡免费一区二区| av在线电影播放| 亚洲精品视频免费看| 欧美在线观看www| 色猫猫成人app| 精品日韩99亚洲| av女人的天堂| 黄色成人精品网站| 国产成人鲁鲁免费视频a| 99久久久无码国产精品免费| 99综合电影在线视频| 一本一道久久a久久综合精品| 青草在线视频| 欧美午夜片在线观看| 国产乱淫av麻豆国产免费| 亚洲人亚洲人色久| 欧美激情综合亚洲一二区| 天堂网一区二区| 高清在线不卡av| 天天久久人人| 碰碰在线视频| 日韩欧美国产wwwww| 手机免费看av| 99热这里只有成人精品国产| 国产在线精品播放| 韩国免费在线视频| 婷婷丁香久久五月婷婷| 欧美一区二区三区影院| 日韩成人综合| 国产成人精品优优av| 人妻精品无码一区二区| 一区二区三区四区在线| 污视频网址在线观看| 国产剧情在线观看一区| 97人人爽人人喊人人模波多| 国产高中女学生第一次| 国产精品嫩草影院com| 国产精品wwwww| 图片婷婷一区| 国内精品久久久久久影视8| www.狠狠干| 亚洲男人的天堂av| 99国产精品久久久久久| 教室别恋欧美无删减版| 青青草一区二区| 日韩专区第一页| 亚洲综合在线观看视频| 亚洲制服在线观看| 不卡中文一二三区| 国产成人avxxxxx在线看| 日本天堂影院在线视频| 性感美女极品91精品| 精品无码av一区二区三区| 欧美三级在线| 国产福利久久精品| 牛牛精品视频在线| 精品播放一区二区| xxxxxx国产| 99亚偷拍自图区亚洲| 波多野结衣之无限发射| 久久人人爽人人爽人人片av不| 欧美精品久久久久久久久| av中文字幕免费在线观看| 亚洲欧美视频在线观看| 伊人五月天婷婷| 欧美精品首页| 国产一区二区三区色淫影院| 超碰激情在线| 亚洲网址你懂得| 中文字幕第31页| 亚洲欧洲性图库| 三级av免费看| 亚洲黄色大片| 欧美激情导航| 国产a亚洲精品| 久久精品视频在线播放| 亚洲精品字幕在线| 香蕉加勒比综合久久| 手机av免费看| 久久国产精品露脸对白| 日韩中文字幕亚洲精品欧美| 国产精品17p| 国产99视频在线观看| 91在线品视觉盛宴免费| 欧美一区二区三区在线电影| 激情综合网五月婷婷| 久久人人爽人人爽| 亚洲欧美日韩一级| 国产精品第十页| 欧美中日韩一区二区三区| 久久久久伊人| 九九热最新视频//这里只有精品| 天天摸天天碰天天爽天天弄| 欧美少妇一区二区| 国内偷拍精品视频| 久久日一线二线三线suv| 亚洲黄色av片| 亚洲中字在线| 992tv成人免费观看| 偷拍亚洲精品| 99re视频在线| 最新日韩一区| 欧美精品福利视频| 日本免费视频在线观看| 亚洲精品av在线| 91国偷自产中文字幕久久| 午夜电影一区二区三区| 99精品中文字幕| 91丨porny丨户外露出| 国产亚洲视频一区| 亚洲深爱激情| 麻豆视频传媒入口| 国产欧美日韩免费观看| 不卡日韩av| 欧美天堂一区| 欧美在线影院在线视频| 欧美人体视频xxxxx| 中文字幕亚洲国产| 天堂在线观看av| 欧美一级高清大全免费观看| 中文字幕一区二区三区四区欧美| 亚洲自拍偷拍欧美| 精品视频第一页| 国产欧美中文在线| 波多野结衣影院| 成人精品视频一区二区三区 | 国产麻豆精品视频| 久久久久久久少妇| 日韩视频三区| av日韩一区二区三区| 亚洲深深色噜噜狠狠爱网站| 欧美一区二区三区四区夜夜大片| 在线精品视频一区| 国产欧美日韩高清| 欧美xnxx| 国产精品国产三级国产aⅴ9色| 97人澡人人添人人爽欧美| 欧美成人精品三级在线观看| av资源网在线观看| 亚洲欧美在线一区二区| 无码精品在线观看| 精品国产乱子伦一区| 国产视频第一页| 欧美日韩高清一区二区三区| 久草热在线观看| 一本大道久久精品懂色aⅴ| 国产免费观看av| 天天综合天天综合色| 日本熟妇色xxxxx日本免费看| 亚洲综合色丁香婷婷六月图片| 日本精品在线免费观看| 亚洲欧美怡红院| 日韩精品久久久久久久的张开腿让| 国产亚洲婷婷免费| 国产伦精品一区二区三区视频女| 久久免费午夜影院| 亚洲人成人无码网www国产 | 白浆视频在线观看| 午夜精品一区二区三区在线 | 婷婷精品进入| 视频一区二区视频| 午夜精品国产| 人体内射精一区二区三区| 亚洲黄色av| 成人免费观看毛片| 首页综合国产亚洲丝袜| 日本爱爱免费视频| 精品在线观看免费| 亚洲天堂一区二区在线观看| 成人一级黄色片| 51调教丨国产调教视频| 久久精品夜色噜噜亚洲a∨| 欧美三级视频网站| 亚洲精品网站在线观看| 久热精品在线观看| 亚洲r级在线视频| 国产 日韩 欧美 在线| 日韩欧美在线视频观看| 亚洲 欧美 中文字幕| 日韩欧美在线免费| 伊人网站在线观看| 精品毛片乱码1区2区3区| 涩爱av在线播放一区二区| 一区二区三区视频在线| 在线中文字幕视频观看| 97婷婷涩涩精品一区| 四虎影视4hu4虎成人| 51成人做爰www免费看网站| 大伊香蕉精品在线品播放| 欧美日韩一区二区三区免费| 99视频精品全国免费| 人妻无码久久一区二区三区免费| 欧美中文字幕| 色婷婷激情视频| 91视频国产资源| 成人无码精品1区2区3区免费看| 一区二区三区不卡视频在线观看| 可以免费在线观看的av| 欧美色图一区二区三区| 欧美视频xxx| 中文字幕免费精品一区| 国产羞羞视频在线播放| 国产精品高潮呻吟久久av野狼 | 男女性色大片免费观看一区二区| 原创真实夫妻啪啪av| wwwwxxxxx欧美| 欧美三级日本三级| 91久久精品一区二区| 亚洲精品97久久中文字幕| 亚洲天堂av在线免费| 国产极品人妖在线观看| 国产精品视频公开费视频| 久久悠悠精品综合网| 午夜啪啪福利视频| 久久精品伊人| 国产黑丝在线观看| 中文字幕一区二区三区不卡| 日韩精品在线观看免费| 欧美一区二区三区男人的天堂| 九九热视频在线观看| 国模吧一区二区三区| 四虎永久精品在线| 欧美日韩一区在线播放| 亚洲国产精品一区| 香蕉视频xxxx| 中文字幕巨乱亚洲| 美女又爽又黄免费视频| 精品久久人人做人人爰| 精品黄色免费中文电影在线播放| 国产成人精品在线观看| 亚洲黄页在线观看| 国产资源在线免费观看| 韩国av一区二区| 又嫩又硬又黄又爽的视频| 一本一道久久a久久精品| 天天干天天色天天| 欧美激情videos| 日韩在线视频一区二区三区| 综合视频免费看| 麻豆91在线观看| 日本二区在线观看| 色拍拍在线精品视频8848| 午夜av免费在线观看| 午夜精品视频在线| 成功精品影院| 男人天堂a在线| 东方aⅴ免费观看久久av| 久久久久久久久久综合| 日韩女优av电影在线观看| 91一区二区三区在线| 亚洲aaa激情| 午夜精品偷拍| 师生出轨h灌满了1v1| 亚洲一区二区三区精品在线| 午夜老司机福利| 欧美激情a在线| 久久99精品国产自在现线| 久久久久久久久久久99| 日韩成人av影视| 手机看片国产日韩| 欧美三片在线视频观看| 男人资源在线播放| 国产精品久久久久久av福利软件| 日韩亚洲一区在线| 一级做a免费视频| 亚洲精品视频一区二区| 日本高清视频免费观看| 91大神福利视频在线| 奇米亚洲欧美| 一区二区三区韩国| 亚洲色图欧美激情| 国产亚洲人成a一在线v站| 国产美女性感在线观看懂色av| 国产成人a亚洲精品| 成人在线免费小视频| 91香蕉国产线在线观看| 亚洲第一精品在线| 青青色在线视频| 国产欧美一区二区三区视频| 亚洲欧美综合久久久| 一级少妇精品久久久久久久| 黑人巨大精品欧美一区免费视频 | 在线免费观看亚洲| 男女激情免费视频| 久久网站最新地址| 一区二区三区日| 欧美高清视频在线观看| 天天躁日日躁狠狠躁欧美巨大小说| 午夜免费一区二区| 亚洲激情综合网| 青青国产在线| 亚洲综合一区二区不卡| 一区二区三区国产在线| 青青草自拍偷拍| 亚洲第一免费网站| 九九九精品视频| 精品少妇人妻av免费久久洗澡| 亚洲国产高清不卡| 国产综合视频在线| 国产精品福利观看| 亚洲精品在线二区| 久久久久人妻一区精品色| 日韩电视剧在线观看免费网站| 欧美一级做a| 欧美啪啪免费视频| 亚洲人成精品久久久久久|