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

Java枚舉類型入門

開發 后端
這里就將為大家談談Java枚舉類型,static final通常跟的是一個int類型的常數,所以有時候可以用int型代替枚舉。在Java中,枚舉確實是一個類。

Tiger中的一個重要新特性是枚舉構造,它是一種新的Java枚舉類型,允許用常量來表示特定的數據片斷,而且全部都以類型安全的形式來表示。Tiger 專家、developerWorks 的多產作者 Brett McLaughlin將解釋枚舉的定義,介紹如何在應用程序中運用枚舉,以及它為什么能夠讓您拋棄所有舊的public static final 代碼。

您已經知道,Java 代碼的兩個基本的構造塊是類 和接口。現在 Tiger 又引入了枚舉,一般簡稱它為 enum。這個新類型允許您表示特定的數據點,這些數據點只接受分配時預先定義的值集合。 當然,熟練的程序員可以用靜態常量實現這項功能,如清單 1 所示:

清單 1. public static final 的常量

  1. public class OldGrade {  
  2.  
  3. public static final int A = 1;  
  4. public static final int B = 2;  
  5. public static final int C = 3;  
  6. public static final int D = 4;  
  7. public static final int F = 5;  
  8. public static final int INCOMPLETE = 6;  

說明:我要感謝 O'Reilly 媒體公司,該公司允許在本文中使用我撰寫的 Java 1.5 Tiger:A Developer's Notebook 一書中“枚舉”這一章中的代碼示例(請參閱參考資料)。

然后您就可以讓類接受像 OldGrade.B 這樣的常量,但是在這樣做的時候,請記住這類常量是 Java 中 int 類型的常量,這意味著該方法可以接受任何 int 類型的值,即使它和OldGrade 中定的所有級別都不對應。因此,您需要檢測上界和下界,在出現無效值的時候,可能還要包含一個 IllegalArgumentException。而且,如果后來又添加另外一個級別(例如OldGrade.WITHDREW_PASSING),那么必須改變所有代碼中的上界,才能接受這個新值。

換句話說,在使用這類帶有整型常量的類時,該解決方案也許可行,但并不是非常有效。幸運的是,枚舉提供了更好的方法。

定義枚舉清單 2 使用了一個可以提供與清單 1 相似的功能的枚舉:

清單 2. 簡單的枚舉類型

  1. package com.oreilly.tiger.ch03;  
  2.  
  3. public enum Grade {  
  4. A, B, C, D, F, INCOMPLETE  
  5. }; 

在這里,我使用了新的關鍵字 enum,為 enum 提供了一個名稱,并指定了允許的值。然后,Grade 就變成了一個枚舉類型,您可以按清單 3 所示的方法使用它:

清單 3. 使用枚舉類型

  1. package com.oreilly.tiger.ch03;  
  2.  
  3. public class Student {  
  4.  
  5. private String firstName;  
  6. private String lastName;  
  7. private Grade grade;  
  8.  
  9. public Student(String firstName, String lastName) {  
  10. this.firstName = firstName;  
  11. this.lastName = lastName;  
  12. }  
  13.  
  14. public void setFirstName(String firstName) {  
  15. this.firstName = firstName;  
  16. }  
  17.  
  18. public String getFirstName() {  
  19. return firstName;  
  20. }  
  21.  
  22. public void setLastName(String lastName) {  
  23. this.lastName = lastName;  
  24. }  
  25.  
  26. public String getLastName() {  
  27. return lastName;  
  28. }  
  29.  
  30. public String getFullName() {  
  31. return new StringBuffer(firstName)  
  32. .append(" ")  
  33. .append(lastName)  
  34. .toString();  
  35. }  
  36.  
  37. public void assignGrade(Grade grade) {  
  38. this.grade = grade;  
  39. }  
  40.  
  41. public Grade getGrade() {  
  42. return grade;  
  43. }  

用以前定義過的類型建立一個新的枚舉(grade)之后,您就可以像使用其他成員變量一樣使用它了。當然,枚舉只能分配枚舉值中的一個(例如,A、C 或 INCOMPLETE)。而且,在assignGrade() 中是沒有進行錯誤檢測的代碼,也沒有考慮邊界情況,請注意這是如何做到。

使用Java枚舉值

迄今為止,您所看到的示例都相當簡單,但是枚舉類型提供的東西遠不止這些。您可以逐個遍歷枚舉值,也可以在 switch 語句中使用枚舉值,枚舉是非常有價值的。

遍歷Java枚舉值

下面我們用一個示例顯示如何遍歷枚舉類型的值。清單 4 所示的這項技術,適用于調試、快速打印任務以及把枚舉加載到集合(我很快將談到)中的工具:

清單 4. 遍歷枚舉值

  1. public void listGradeValues(PrintStream out) throws IOException {  
  2. for (Grade g : Grade.values()) {  
  3. out.println("Allowed value: '" + g + "'");  
  4. }  

運行這段代碼,將得到清單 5 所示的輸出:

清單 5. 迭代操作的輸出

  1. Allowed Value: 'A'  
  2. Allowed Value: 'B'  
  3. Allowed Value: 'C'  
  4. Allowed Value: 'D'  
  5. Allowed Value: 'F'  
  6. Allowed Value: 'INCOMPLETE' 

這里有許多東西。首先,我使用了 Tiger 的新的 for/in 循環(也叫作 foreach 或 增強的 for)。另外,您可以看到 values() 方法返回了一個由獨立的 Grade 實例構成的數組,每個數組都有一個枚舉類型的值。換句話說,values() 的返回值是 Grade[]。

在枚舉間切換

能夠在枚舉的值之間移動很好,但是更重要的是根據枚舉的值進行決策。您當然可以寫一堆if (grade.equals(Grade.A)) 類型的語句,但那是在浪費時間。Tiger 能夠很方便地把枚舉支持添加到過去的好東西 switch 語句上,所以它很容易使用,而且適合您已知的內容。清單 6向將展示如何解決這個難題:

清單 6. 在枚舉之間切換

  1. public void testSwitchStatement(PrintStream out) throws IOException {  
  2. StringBuffer outputText = new StringBuffer(student1.getFullName());  
  3.  
  4. switch (student1.getGrade()) {  
  5. case A:  
  6. outputText.append(" excelled with a grade of A");  
  7. break;  
  8. case B: // fall through to C  
  9. case C:  
  10. outputText.append(" passed with a grade of ")  
  11. .append(student1.getGrade().toString());  
  12. break;  
  13. case D: // fall through to F  
  14. case F:  
  15. outputText.append(" failed with a grade of ")  
  16. .append(student1.getGrade().toString());  
  17. break;  
  18. case INCOMPLETE:  
  19. outputText.append(" did not complete the class.");  
  20. break;  
  21. }  
  22.  
  23. out.println(outputText.toString());  

在這里,枚舉值被傳遞到 switch 語句中(請記住,getGrade() 是作為 Grade 的實例返回的),而每個 case 子句將處理一個特定的值。該值在提供時沒有枚舉前綴,這意味著不用將代碼寫成 case Grade.A,只需將其寫成 case A 即可。如果您不這么做,編譯器不會接受有前綴的值。

現在,您應該已經了解使用 switch 語句時的基本語法,但是還有一些事情您需要知道。在使用 switch 之前進行計劃正如您所期待的,在使用枚舉和 switch 時,您可以使用 default 語句。清單 7 顯示了這個用法:

清單 7. 添加一個 default 塊

  1. public void testSwitchStatement(PrintStream out) throws IOException {  
  2. StringBuffer outputText = new StringBuffer(student1.getFullName());  
  3.  
  4. switch (student1.getGrade()) {  
  5. case A:  
  6. outputText.append(" excelled with a grade of A");  
  7. break;  
  8. case B: // fall through to C  
  9. case C:  
  10. outputText.append(" passed with a grade of ")  
  11. .append(student1.getGrade().toString());  
  12. break;  
  13. case D: // fall through to F  
  14. case F:  
  15. outputText.append(" failed with a grade of ")  
  16. .append(student1.getGrade().toString());  
  17. break;  
  18. case INCOMPLETE:  
  19. outputText.append(" did not complete the class.");  
  20. break;  
  21. default:  
  22. outputText.append(" has a grade of ")  
  23. .append(student1.getGrade().toString());  
  24. break;  
  25. }  
  26.  
  27. out.println(outputText.toString());  

研究以上代碼可以看出,任何沒有被 case 語句處理的枚舉值都會被 default 語句處理。這項技術您應當堅持采用。原因是:假設 Grade 枚舉被您的小組中其他程序員修改(而且他忘記告訴您這件事)成清單 8 所示的版本:

清單 8. 給 Grade 枚舉添加一個值

  1. package com.oreilly.tiger.ch03;  
  2.  
  3. public enum Grade {  
  4. A, B, C, D, F, INCOMPLETE,  
  5. WITHDREW_PASSING, WITHDREW_FAILING  
  6. }; 

現在,如果使用清單 6 的代碼所示的新版 Grade,那么這兩個新值會被忽略。更糟的是,您甚至看不到錯誤!在這種情況下,存在某種能夠通用的 default 語句是非常重要的。清單 7 無法很好地處理這些值,但是它會提示您還有其他值,您需要處理這些值。一旦完成處理,您就會有一個繼續運行的應用程序,而且它不會忽略這些值,甚至還會指導您下一步的動作。所以這是一個良好的編碼習慣。

枚舉和集合您所熟悉的使用 public static final 方法進行編碼的那些東西,可能已經轉而采用枚舉的值作為映射的鍵。如果您不知道其中的含義,請參見清單 9,它是一個公共錯誤信息的示例,在使用 Ant 的 build 文件時,可能會彈出這樣的消息,如下所示:

清單 9. Ant 狀態碼

  1. package com.oreilly.tiger.ch03;  
  2.  
  3. public enum AntStatus {  
  4. INITIALIZING,  
  5. COMPILING,  
  6. COPYING,  
  7. JARRING,  
  8. ZIPPING,  
  9. DONE,  
  10. ERROR  

為每個狀態碼分配一些人們能讀懂的錯誤信息,從而允許人們在 Ant 提供某個代碼時查找合適的錯誤信息,將這些信息顯示在控制臺上。這是映射(Map)的一個絕好用例,在這里,每個映射(Map)的鍵都是一個枚舉值,而每個值都是鍵的錯誤信息。清單 10 演示了該映射的工作方式:

清單 10. 枚舉的映射(Map)

  1. public void testEnumMap(PrintStream out) throws IOException {  
  2. // Create a map with the key and a String message  
  3. EnumMap antMessages =  
  4. new EnumMap(AntStatus.class);  
  5.  
  6. // Initialize the map  
  7. antMessages.put(AntStatus.INITIALIZING, "Initializing Ant...");  
  8. antMessages.put(AntStatus.COMPILING, "Compiling Java classes...");  
  9. antMessages.put(AntStatus.COPYING, "Copying files...");  
  10. antMessages.put(AntStatus.JARRING, "JARring up files...");  
  11. antMessages.put(AntStatus.ZIPPING, "ZIPping up files...");  
  12. antMessages.put(AntStatus.DONE, "Build complete.");  
  13. antMessages.put(AntStatus.ERROR, "Error occurred.");  
  14.  
  15. // Iterate and print messages  
  16. for (AntStatus status : AntStatus.values() ) {  
  17. out.println("For status " + status + ", message is: " +  
  18. antMessages.get(status));  
  19. }  

該代碼使用了泛型(generics)(請參閱參考資料)和新的 EnumMap 構造來建立新映射。而且,枚舉值是通過其 Class 對象提供的,同時提供的還有映射值的類型(在該例中,它只是一個簡單的字符串)。該方法的輸出如清單 11 所示:

Java枚舉類型中的 Class 對象您可能已經注意到,清單 10 中的示例代碼實際上表明 Tiger 把枚舉當作類,這可以從AntStatus 的 Class 對象那里得到證明,該對象不僅可用,而且正被實際使用。這是真的。歸根到底, Tiger 還是把枚舉看成是特殊的類類型。有關枚舉的具體實現細節,請參閱Java 5.0 Tiger: A Developer's Notebook 的第三章(請參閱參考資料)。

清單 11. 清單 10 的輸出

  1. [echo] Running AntStatusTester...  
  2. [java] For status INITIALIZING, message is: Initializing Ant...  
  3. [java] For status COMPILING, message is: Compiling Java classes...  
  4. [java] For status COPYING, message is: Copying files...  
  5. [java] For status JARRING, message is: JARring up files...  
  6. [java] For status ZIPPING, message is: ZIPping up files...  
  7. [java] For status DONE, message is: Build complete.  
  8. [java] For status ERROR, message is: Error occurred. 

更進一步枚舉也可以與集合結合使用,而且非常像新的 EnumMap 構造,Tiger 提供了一套新的EnumSet實現,允許您使用位操作符。另外,可以為枚舉添加方法,用它們實現接口,定義叫作特定值的類的實體,在該實體中,特定的代碼被附加到枚舉的具體值上。這些特性超出了本文的范圍,但是在其他地方,有詳細介紹它們的文檔(請參閱參考資料)。

使用Java枚舉類型,但是不要濫用

學習任何新版語言的一個危險就是瘋狂使用新的語法結構。如果這樣做,那么您的代碼就會突然之間有 80% 是泛型、標注和枚舉。所以,應當只在適合使用枚舉的地方才使用它。那么,枚舉在什么地方適用呢?一條普遍規則是,任何使用常量的地方,例如目前用 switch代碼切換常量的地方。如果只有單獨一個值(例如,鞋的***尺寸,或者籠子中能裝猴子的***數目),則還是把這個任務留給常量吧。但是,如果定義了一組值,而這些值中的任何一個都可以用于特定的數據類型,那么將枚舉用在這個地方最適合不過。

【編輯推薦】

  1. 程序員必備Java API
  2. Java之父:我們看中的并非Java語言,而是JVM
  3. 成為Java高手需要注意的25個學習目標
  4. Java內存模型詳解
  5. JavaScript函數中arguments對象
責任編輯:彭凡 來源: javaeye
相關推薦

2011-06-01 16:31:23

枚舉

2011-07-11 15:02:54

枚舉

2021-09-02 12:10:52

Go語言枚舉類型

2009-08-18 10:47:40

C#枚舉類型

2009-08-18 10:17:25

C#枚舉類型

2024-01-18 00:16:07

2011-12-26 15:58:01

枚舉

2009-08-18 12:52:33

C#枚舉類型

2009-08-18 10:35:46

C#枚舉類型

2012-07-22 15:49:25

Java

2023-11-14 10:05:52

Java開發工具

2009-08-18 13:00:59

C#枚舉類型

2010-02-01 16:40:14

C++枚舉子

2009-08-18 09:37:14

C#枚舉類型

2018-03-20 13:56:12

數據庫MySQL枚舉類型

2009-12-22 09:48:58

WCF枚舉類型

2023-11-28 13:20:00

Rust匹配枚舉

2009-08-18 10:59:46

C#枚舉類型

2010-02-01 16:22:56

C++枚舉類型

2010-03-02 14:12:30

WCF枚舉類型
點贊
收藏

51CTO技術棧公眾號

日本色护士高潮视频在线观看| 这里只有精品6| 黄色免费在线播放| 美美哒免费高清在线观看视频一区二区 | 久久久久国产精品厨房| 国产日韩精品在线观看| 国产性猛交普通话对白| 国产在线观看91一区二区三区| 欧美日韩色综合| 好吊妞www.84com只有这里才有精品| 一级片中文字幕| 久久免费大视频| 亚洲国产精久久久久久久| 午夜dv内射一区二区| 黄色视屏免费在线观看| xnxx国产精品| 国产乱肥老妇国产一区二| 日韩av黄色片| 久久在线播放| 亚洲欧美日韩第一区| 四川一级毛毛片| 日本免费在线观看| 99re视频这里只有精品| 成人欧美一区二区三区黑人孕妇 | 动漫3d精品一区二区三区| 四虎影院在线免费播放| 亚洲黄色av| 欧美成人午夜激情视频| 欧美日韩生活片| 亚洲v天堂v手机在线| 日韩一区二区三区在线视频| 欧美大尺度做爰床戏| 黄频免费在线观看| 一级中文字幕一区二区| 91日本视频在线| 91精品一区二区三区蜜桃| 婷婷精品在线| 亚洲成人精品视频| 日本美女视频网站| 免费一级欧美在线大片| 欧美日韩精品系列| 国产精品99久久免费黑人人妻| www欧美xxxx| 亚洲美女屁股眼交| 国产精品免费在线播放| 91精品国自产| 久久精品久久精品| 国产精品吹潮在线观看| 樱花视频在线免费观看| 久久精品免费一区二区三区| 亚洲欧美另类中文字幕| 三上悠亚ssⅰn939无码播放| 成人软件在线观看| 狠狠做深爱婷婷久久综合一区| 成人免费在线视频播放| free性欧美hd另类精品| 亚洲人成精品久久久久久| 中文字幕剧情在线观看一区| 国产模特av私拍大尺度| 精品无人区卡一卡二卡三乱码免费卡 | 欧美一区二区三区免费在线看 | 翔田千里一区二区| 欧美一区深夜视频| 亚洲激情图片网| 第一社区sis001原创亚洲| 国产一区二区三区18| 欧美黄色一级生活片| 成人噜噜噜噜| 欧美一区二区视频在线观看2020 | 国产在线观看第一页| 99久久99热这里只有精品| 正在播放欧美一区| 久久视频一区二区三区| 亚洲精品成人| 久久97久久97精品免视看| 久久精品视频9| 亚洲少妇自拍| 国产精品免费观看在线| 国产精品一区二区av白丝下载| 国产精品白丝jk黑袜喷水| 国产精品免费在线播放| 国产精品久久一区二区三区不卡| 国产精品久久久久aaaa樱花| 精品视频在线观看一区二区| mm视频在线视频| 在线观看视频一区二区| 久久婷婷中文字幕| 成人激情视屏| 日韩女优视频免费观看| 黄色在线观看av| 欧美成人milf| 97视频在线观看免费| 91麻豆精品在线| 国产激情偷乱视频一区二区三区| 久久99精品久久久久久青青日本| 91社区在线观看| 亚洲综合一区二区精品导航| 久久国产乱子伦免费精品| 999精品视频在线观看| 亚洲精品久久久久久久久| www男人天堂| 国产一区二区三区探花| 久久久久久高潮国产精品视| 综合久久中文字幕| 国产99一区视频免费| 日韩久久在线| 超碰资源在线| 日韩一区二区高清| 波多野结衣片子| 亚洲成人中文| 91国在线精品国内播放| ,亚洲人成毛片在线播放| 99精品欧美一区二区三区综合在线| 亚洲永久激情精品| 天堂av在线网| 精品福利二区三区| 91精品国产闺蜜国产在线闺蜜| 久久国产免费| 国产精品免费一区二区| 麻豆网站视频在线观看| 91福利区一区二区三区| 日韩精品一区二区三区不卡| 日韩精品一级| 日韩中文字幕国产精品| 欧产日产国产69| va亚洲va日韩不卡在线观看| 久久国产精品亚洲va麻豆| 国产精品久久麻豆| 欧美性三三影院| 在线不卡av电影| 9色国产精品| 国产精品一区二区三区四区五区 | 天天操天天操天天操| 亚洲精品日产精品乱码不卡| 五月激情婷婷在线| 成人3d精品动漫精品一二三| 青青草精品毛片| 天天综合网在线| 午夜电影久久久| 黄色在线免费播放| 国内自拍一区| 国产精品久久精品国产| 视频在线观看入口黄最新永久免费国产| 欧美日韩亚州综合| 精品国产国产综合精品| 久久精品国产一区二区三| 亚洲国产欧美一区二区三区不卡| 唐人社导航福利精品| 亚洲欧美在线磁力| 波多野结衣mp4| 欧美激情自拍偷拍| 男人添女人下面免费视频| 欧美精品一区二区三区中文字幕 | 加勒比色综合久久久久久久久 | 五月天婷婷丁香| 丁香六月综合激情| 99在线精品免费视频| 国产色噜噜噜91在线精品| 国语自产精品视频在线看一大j8 | 99国产精品久久久久久久久久久| 欧美日韩不卡在线视频| 奇米影视777在线欧美电影观看| 欧美一级大胆视频| 成人在线免费公开观看视频| 国产精品久久久久婷婷| 亚洲国产精品无码观看久久| 红杏一区二区三区| 欧美在线观看日本一区| h网站在线免费观看| 欧美久久久影院| 久久亚洲av午夜福利精品一区| 成人精品视频一区二区三区| 好吊妞无缓冲视频观看| 伊人久久精品| 久久69精品久久久久久久电影好| 天堂网av在线播放| 欧美亚洲精品一区| 国产免费无码一区二区视频| 成人午夜私人影院| 久久精品香蕉视频| 亚洲第一偷拍| 国产综合18久久久久久| 欧美大片1688网站| 欧美猛男性生活免费| 亚欧在线观看视频| 欧美欧美午夜aⅴ在线观看| 久久国产露脸精品国产| 久久精品视频免费观看| 91欧美一区二区三区| 国产精品美女久久久浪潮软件| 午夜一区二区三视频在线观看| 欧美国产亚洲精品| 日韩免费观看视频| 50度灰在线| 在线中文字幕日韩| 天天综合天天色| 91精品午夜视频| 少妇高潮av久久久久久| 亚洲色图在线播放| 国精品无码人妻一区二区三区| 韩国av一区二区三区在线观看| 国产素人在线观看| 五月精品视频| 手机成人在线| 免费看成人人体视频| 成人网中文字幕| 国产亚洲一区二区手机在线观看| 欧美激情精品久久久久久大尺度| 成年网站在线| 日韩精品免费综合视频在线播放 | 精品av久久707| 一二三四区在线| 一本一本久久a久久精品综合麻豆| 国产大学生自拍| 国产精品视频看| 熟女少妇一区二区三区| youjizz国产精品| 操人视频免费看| 久久成人麻豆午夜电影| 99精品免费在线观看| 亚洲激情另类| av在线com| 一个色综合网| 亚洲一区二区三区免费观看| 深爱激情久久| 久久国产一区| 欧美黄色影院| 国产伦精品一区二区三区视频孕妇| 电影一区二区三区久久免费观看| 国产精品久久久久aaaa九色| 欧美成人a交片免费看| 性视频1819p久久| av中文字幕电影在线看| 欧美乱人伦中文字幕在线| fc2ppv国产精品久久| 久久精品国产亚洲7777| aaa级黄色片| 欧美日韩国产一级| 中文字幕一区二区三区四区免费看| 亚洲国产高清不卡| 国产三级av在线播放| 久久先锋影音av| 伊人网在线综合| 蜜臀av性久久久久av蜜臀妖精| 女性隐私黄www网站视频| 国产伦理一区| 久久久久狠狠高潮亚洲精品| 亚洲欧美久久久| 丰满少妇被猛烈进入高清播放| 国产欧美一区二区色老头| 免费看国产曰批40分钟| 亚洲三级国产| 国产亚洲天堂网| 日韩精品一二区| 色悠悠久久综合网| 青草av.久久免费一区| gai在线观看免费高清| 国产一区二区伦理片| 精品人妻人人做人人爽夜夜爽| 国产成人在线视频网址| 白嫩情侣偷拍呻吟刺激| 久久先锋影音av鲁色资源网| 欧美午夜激情影院| 专区另类欧美日韩| 久久黄色小视频| 狠狠色狠色综合曰曰| 波多野结衣视频免费观看| 欧美日韩一区小说| 国产欧美久久久精品免费| 欧美v日韩v国产v| 天堂中文在线观看视频| 在线成人免费网站| 国产超级va在线视频| 国语自产精品视频在线看| 日韩网站中文字幕| 91精品综合视频| 美女视频免费精品| 亚洲乱码一区二区三区| 欧美三区视频| 欧美黄色一级片视频| 国产一区二区精品久久| 久久久久亚洲AV成人网人人小说| 久久只精品国产| 99久久久免费精品| 婷婷丁香久久五月婷婷| 日本午夜在线观看| 婷婷久久综合九色综合伊人色| japanese国产在线观看| 日韩欧美国产一区二区三区 | 黄色一级视频免费看| 欧美久久一二三四区| 天天摸夜夜添狠狠添婷婷| 中文字幕av日韩| av中文字幕在线观看第一页| 国产精品色悠悠| 老牛影视av一区二区在线观看| 亚洲国产高清国产精品| 精久久久久久| 国产亚洲视频一区| www精品美女久久久tv| 全网免费在线播放视频入口| 中文字幕不卡的av| 青青草国产在线观看| 欧美在线一区二区三区| 色婷婷av一区二区三| 久久久精品亚洲| 欧美成人黑人| 国产九区一区在线| 91精品精品| 一区二区三区入口| 成人精品国产免费网站| 久久久久亚洲av无码专区体验| 色狠狠色狠狠综合| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | **性色生活片久久毛片| 国产免费一级视频| 亚洲激情视频网站| 三级福利片在线观看| 国产精品一二区| 亚洲精品3区| 久草热视频在线观看| 国产99久久久精品| 国产精品 欧美激情| 欧美网站一区二区| 成年人视频网站在线| 日产精品久久久一区二区福利| 欧美wwwwww| 蜜臀精品一区二区| 国产成人精品aa毛片| 亚洲一区电影在线观看| 欧美日韩成人综合在线一区二区| 岛国在线大片| 国产xxx69麻豆国语对白| 亚洲精品国产动漫| 成人免费观看视频在线观看| eeuss国产一区二区三区| 国产午夜激情视频| 亚洲电影免费观看高清完整版在线观看| 成人日韩欧美| 97中文在线| 韩国在线视频一区| 亚洲精品久久一区二区三区777| 一区二区三区在线视频免费观看| 国产绿帽刺激高潮对白| 久久精品久久精品亚洲人| 999精品嫩草久久久久久99| 中文字幕第一页亚洲| 国产精品888| 久久婷婷国产麻豆91| 亚洲国产高清自拍| 国产高清不卡| 午夜一区二区三区| 久国产精品韩国三级视频| 精品国产精品国产精品| 日韩一区二区在线免费观看| 免费在线观看av电影| 国产在线精品一区二区三区》| 国产一级一区二区| 91精彩刺激对白露脸偷拍| 欧美性三三影院| av文字幕在线观看| 国产精品午夜av在线| 国产精品美女| 免费成人深夜蜜桃视频| 欧美一区二区三区免费在线看| 欧美日韩经典丝袜| 久久草.com| 奇米777欧美一区二区| 麻豆精品国产免费| 精品少妇一区二区| 成人爱爱网址| 中文字幕乱码一区二区三区| 国产suv精品一区二区三区| 久久久久久久久久影院| 一区二区三区黄色| 亚洲精品高潮| 日本在线观看a| 国产精品久久福利| 欧美一区二区黄片| 国产精品永久免费| 欧美久久一区| 波多野结衣av在线观看| 欧美一区二区美女| 亚洲涩涩在线| 樱空桃在线播放| 99精品久久只有精品| 97人妻人人澡人人爽人人精品| 欧美大秀在线观看| 精品美女视频| 精品一区二区三区四区五区六区| 91久久免费观看| 日韩激情美女| 视频一区二区三区免费观看| 国产成人无遮挡在线视频| 国产精品乱码一区二区视频| 欧美另类交人妖| 欧州一区二区| 国产又粗又猛又色| 在线不卡中文字幕播放| 综合日韩av|