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

java枚舉類型入門

開發 后端
Tiger 中的一個重要新特性是枚舉構造,它是一種新的類型,允許用常量來表示特定的數據片斷,而且全部都以類型安全的形式來表示。一起來看看本文。

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

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

清單 1. public static final

  1. public class OldGrade {  
  2. public static final int A = 1;  
  3. public static final int B = 2;  
  4. public static final int C = 3;  
  5. public static final int D = 4;  
  6. public static final int F = 5;  
  7. 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. public enum Grade   
  3. {  
  4. A, B, C, D, F, INCOMPLETE  
  5. }; 

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

清單 3. 使用枚舉類型

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

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

使用枚舉值

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

遍歷枚舉值

下面我們用一個示例顯示如何遍歷枚舉類型的值。清單 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. switch (student1.getGrade()) {  
  4. case A:  
  5. outputText.append(" excelled with a grade of A");  
  6. break;  
  7. case B: // fall through to C  
  8. case C:  
  9. outputText.append(" passed with a grade of ")  
  10. .append(student1.getGrade().toString());  
  11. break;  
  12. case D: // fall through to F  
  13. case F:  
  14. outputText.append(" failed with a grade of ")  
  15. .append(student1.getGrade().toString());  
  16. break;  
  17. case INCOMPLETE:  
  18. outputText.append(" did not complete the class.");  
  19. break;  
  20. }  
  21. 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. switch (student1.getGrade()) {  
  4. case A:  
  5. outputText.append(" excelled with a grade of A");  
  6. break;  
  7. case B: // fall through to C  
  8. case C:  
  9. outputText.append(" passed with a grade of ")  
  10. .append(student1.getGrade().toString());  
  11. break;  
  12. case D: // fall through to F  
  13. case F:  
  14. outputText.append(" failed with a grade of ")  
  15. .append(student1.getGrade().toString());  
  16. break;  
  17. case INCOMPLETE:  
  18. outputText.append(" did not complete the class.");  
  19. break;  
  20. default:  
  21. outputText.append(" has a grade of ")  
  22. .append(student1.getGrade().toString());  
  23. break;  
  24. }  
  25. out.println(outputText.toString());  

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

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

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

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

枚舉和集合

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

清單 9. Ant 狀態碼

  1. package com.oreilly.tiger.ch03;  
  2. public enum AntStatus {  
  3. INITIALIZING,  
  4. COMPILING,  
  5. COPYING,  
  6. JARRING,  
  7. ZIPPING,  
  8. DONE,  
  9. 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<AntStatus, String> antMessages =  
  4. new EnumMap<AntStatus, String>(AntStatus.class);  
  5. // Initialize the map  
  6. antMessages.put(AntStatus.INITIALIZING, "Initializing Ant...");  
  7. antMessages.put(AntStatus.COMPILING, "Compiling Java classes...");  
  8. antMessages.put(AntStatus.COPYING, "Copying files...");  
  9. antMessages.put(AntStatus.JARRING, "JARring up files...");  
  10. antMessages.put(AntStatus.ZIPPING, "ZIPping up files...");  
  11. antMessages.put(AntStatus.DONE, "Build complete.");  
  12. antMessages.put(AntStatus.ERROR, "Error occurred.");  
  13. // Iterate and print messages  
  14. for (AntStatus status : AntStatus.values() ) {  
  15. out.println("For status " + status + ", message is: " +  
  16. antMessages.get(status));  
  17. }  

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

枚舉的 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實現,允許您使用位操作符。另外,可以為枚舉添加方法,用它們實現接口,定義叫作特定值的類的實體,在該實體中,特定的代碼被附加到枚舉的具體值上。這些特性超出了本文的范圍,但是在其他地方,有詳細介紹它們的文檔(請參閱參考資料)。

使用枚舉,但是不要濫用

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

【編輯推薦】

  1. C#枚舉值出現邏輯錯誤的相關解決方案
  2. 總結C#枚舉在開發項目中的應用
  3. C++的中的結構體和枚舉
  4. 列舉Jave枚舉的幾種操作方法
  5. 9.2.2 包含枚舉方面的限制

 

責任編輯:于鐵 來源: LUPA
相關推薦

2009-06-25 14:20:01

Java枚舉類型

2011-07-11 15:02:54

枚舉

2021-09-02 12:10:52

Go語言枚舉類型

2011-12-26 15:58:01

枚舉

2009-08-18 12:52:33

C#枚舉類型

2009-08-18 10:35:46

C#枚舉類型

2009-08-18 10:47:40

C#枚舉類型

2009-08-18 10:17:25

C#枚舉類型

2024-01-18 00:16:07

2023-11-14 10:05:52

Java開發工具

2012-07-22 15:49:25

Java

2009-08-18 09:37:14

C#枚舉類型

2018-03-20 13:56:12

數據庫MySQL枚舉類型

2009-08-18 13:00:59

C#枚舉類型

2010-02-01 16:40:14

C++枚舉子

2023-11-28 13:20:00

Rust匹配枚舉

2009-08-18 10:59:46

C#枚舉類型

2010-03-02 14:12:30

WCF枚舉類型

2010-02-01 16:22:56

C++枚舉類型

2009-08-18 09:51:18

C#枚舉類型
點贊
收藏

51CTO技術棧公眾號

在线播放第一页| 亚洲黄色网址在线观看| 亚洲精品毛片一区二区三区| 欧美综合另类| 日韩亚洲欧美在线| 青青青免费在线| av在线播放av| 丁香桃色午夜亚洲一区二区三区| 青青草原成人在线视频| 蜜桃av.com| 欧美天堂影院| 欧美日韩电影在线| 国产精品国产亚洲精品看不卡| 国产黄在线播放| 懂色av一区二区三区免费看| 日韩美女视频中文字幕| 欧美成人综合色| 国产一区二区三区探花 | 欧美日本黄视频| 日本xxx在线播放| 99综合久久| 色哦色哦哦色天天综合| www.激情网| 成年人在线视频免费观看| av电影一区二区三区| 国产精品自拍99| 香蕉久久网站| 亚洲男人天堂视频| 蜜臀av粉嫩av懂色av| 国产91在线播放精品| 五月天激情综合| 成年人三级视频| 国产对白叫床清晰在线播放| aaa亚洲精品| a级国产乱理论片在线观看99| 黄色大全在线观看| 国产精品毛片在线看| 美日韩精品免费视频| 日本免费www| 一本色道久久综合亚洲精品酒店 | 亚洲一区二区视频在线| 伊人久久大香线蕉精品| 成人77777| 久久夜色精品国产噜噜av| 成人xxxxx色| 国产suv一区二区| 国产一区二区在线影院| 国产男人精品视频| 亚洲视屏在线观看| 日韩国产高清影视| 国产精品成人免费电影| 男人日女人网站| 亚洲另类黄色| 久久久亚洲网站| 国产在线视频99| 欧美三级免费| 欧美日本中文字幕| 久久久久久久久久久久久久免费看| 99久久精品费精品国产| 日韩中文字幕网站| 国产精品成人69xxx免费视频| 久久综合av| 日韩视频在线免费| 男人在线观看视频| 一区二区在线| 欧美激情一区二区三区久久久| 久久久.www| 亚洲黄网站黄| 浅井舞香一区二区| 伊人久久久久久久久久久久| 日本亚洲欧美天堂免费| 国产精品自产拍高潮在线观看| 波多野结衣一本一道| 日本免费在线视频不卡一不卡二| 国产欧美日韩丝袜精品一区| 国产女人18毛片水真多| 国产伦精品一区二区三区免费| 亚洲自拍偷拍第一页| 亚洲精品综合网| 99久久精品国产毛片| 欧美日韩喷水| 男女啪啪在线观看| 悠悠色在线精品| 男人天堂1024| 国产激情欧美| 精品国产制服丝袜高跟| 无遮挡aaaaa大片免费看| 欧美人与物videos另类xxxxx| 少妇高潮 亚洲精品| 老妇女50岁三级| 国产精品乱看| 91久久精品美女| 天天操天天操天天干| 亚洲国产精品黑人久久久| 黄色网zhan| 乡村艳史在线观看| 欧美另类z0zxhd电影| 少妇极品熟妇人妻无码| 精品久久久久中文字幕小说 | 一级免费黄色录像| 在线观看视频免费一区二区三区| 国产成人91久久精品| 国产视频一二三四区| 91麻豆国产在线观看| 二级片在线观看| 理论不卡电影大全神| 欧美精品成人一区二区三区四区| 成人午夜精品无码区| 日韩国产欧美| 4438全国亚洲精品在线观看视频| 国产精品久久久久久久久久久久久久久久 | 亚洲黄色在线播放| 中文字幕av一区 二区| 欧美久久久久久久久久久久久久| 日韩精品影片| 亚洲成人黄色在线| 中国一级片在线观看| 日韩黄色片在线观看| 国产精品v欧美精品∨日韩| 国产区视频在线播放| 午夜一区二区三区在线观看| 污污网站在线观看视频| 亚洲精品进入| 性色av一区二区三区免费| 国产一区二区在线视频聊天| 久久综合999| 国产欧美日韩小视频| 亚洲国产综合在线观看| 亚洲天堂av综合网| 日产精品久久久| 国产一二精品视频| 亚洲日本精品| 精品亚洲美女网站| 亚洲欧美日韩久久久久久| 久久露脸国语精品国产91| 国产盗摄一区二区三区| 一本二本三本亚洲码| 国产亚洲精品精品国产亚洲综合| 亚洲男人av在线| 中文字幕精品三级久久久| 国产91高潮流白浆在线麻豆| 女人床在线观看| 国产精品777777在线播放| 久久精品人人做人人爽| 国产精品国产精品国产| 久久久精品免费免费| 欧美成人免费高清视频| 亚洲妇女av| 欧美最近摘花xxxx摘花| 香蕉久久国产av一区二区| 亚洲大尺度视频在线观看| 中国极品少妇xxxx| 亚洲三级国产| 久久久久久欧美精品色一二三四| 日韩av一卡| 亚洲欧美国产精品久久久久久久| 久久久久99精品成人片我成大片| 97久久人人超碰| 欧美视频免费播放| 国产一区二区精品福利地址| 国产精品看片资源| 精品美女在线观看视频在线观看 | 久久久久久久久久毛片| 婷婷综合久久| 91中文字精品一区二区| 欧美xxxx视频| 精品亚洲一区二区三区在线观看| 丰满人妻老熟妇伦人精品| 久久久久久久电影| 亚洲欧洲日本精品| 91精品国产91久久综合| 国产传媒欧美日韩| 亚洲欧美小说色综合小说一区| 亚洲欧美日韩中文视频| 中文字幕乱码在线观看| 亚洲精品中文在线影院| 岛国精品资源网站| 日韩成人精品在线观看| 中文字幕在线乱| 福利片在线一区二区| 欧美一区二区三区图| 2019中文字幕在线视频| 日韩欧美一区二区免费| 日韩 欧美 中文| 欧美极品aⅴ影院| 日本少妇xxx| 免费国产自线拍一欧美视频| 亚洲国产日韩综合一区| 午夜精品在线| 国产精品第100页| 18+激情视频在线| 国产丝袜一区视频在线观看 | 东京一区二区| 久久精品在线播放| 亚洲av成人无码久久精品老人| 在线日韩一区二区| 欧美极品aaaaabbbbb| 久久精品人人爽人人爽| 三上悠亚 电影| 日韩1区2区3区| 欧妇女乱妇女乱视频| 国产一区二区区别| 国产精品日韩二区| se69色成人网wwwsex| 久久久亚洲网站| 黄色成人在线| 亚洲欧美国产一本综合首页| www.看毛片| 欧美日韩一区三区| 国产精品久久久久久久久久久久久久久久久| 国产精品久久久久aaaa| 中文字幕av观看| 国产成人8x视频一区二区| 9久久婷婷国产综合精品性色| 亚洲天堂成人| 在线观看成人免费| 日韩久久精品网| 免费国产一区二区| 成人av地址| 亚洲一区二区三区四区在线播放| 日韩精品三区| **欧美日韩vr在线| 精精国产xxxx视频在线中文版| 丝袜美腿亚洲一区二区| 男女视频在线观看免费| 欧美大胆人体bbbb| 国产日韩一级片| 欧美日韩国产一区| 亚洲无码精品一区二区三区| 黑人与娇小精品av专区| 日本少妇性高潮| 亚洲一区二区综合| 欧美日韩免费做爰视频| √…a在线天堂一区| 青青青视频在线播放| 国产日韩亚洲欧美综合| 法国伦理少妇愉情| 99re成人在线| 亚洲专区区免费| 92国产精品观看| 国产美女视频免费观看下载软件| 国产高清不卡一区二区| 国产又粗又猛大又黄又爽| 九色|91porny| 99热一区二区| 久久99国产精品久久99果冻传媒| 色一情一乱一伦一区二区三区日本| 亚洲永久免费精品| 成人免费在线小视频| 国产精品视区| 国产日产欧美视频| 六月天综合网| 韩国中文字幕av| 美女性感视频久久| 最新av免费在线观看| 激情综合五月天| 日批视频在线看| 丁香婷婷综合色啪| 国产肉体xxxx裸体784大胆| 久久亚洲精品国产精品紫薇| 国产交换配乱淫视频免费| 国产人妖乱国产精品人妖| 欧美做受xxxxxⅹ性视频| 国产视频亚洲色图| 日韩在线观看免| 亚洲精品成a人| 国产午夜免费视频| 欧美午夜美女看片| 最近中文字幕av| 日韩一区二区麻豆国产| 免费看黄色一级视频| 日韩成人在线视频| 草碰在线视频| 欧美成人精品一区二区| wwwww亚洲| 国产经典一区二区| 精品久久免费| 免费精品视频一区| 国产精品毛片一区二区在线看| 亚洲中文字幕无码一区二区三区| 亚洲精品精选| 亚洲污视频在线观看| 国产传媒一区在线| 欧美狂猛xxxxx乱大交3| 综合久久久久久| 波多野结衣国产| 欧美军同video69gay| 欧美一区二区黄片| 在线精品播放av| 污污的网站在线看| 国产精品久久久91| 中文字幕日韩高清在线| 日本精品一区| 亚洲视频精品| mm131国产精品| 91香蕉视频mp4| 69av视频在线| 欧洲一区二区av| www三级免费| 在线播放国产一区二区三区| 羞羞视频在线观看免费| 国产精品99久久久久久久久| 日韩黄色av| 日本欧洲国产一区二区| 亚洲午夜av| 天天综合天天添夜夜添狠狠添| 97久久人人超碰| www.5588.com毛片| 色狠狠av一区二区三区| 日韩在线视频第一页| 搡老女人一区二区三区视频tv| a'aaa级片在线观看| 成人亲热视频网站| 精品av一区二区| 999在线观看视频| 国产精品系列在线播放| 毛片久久久久久| 欧美日韩国产一区中文午夜| 亚洲爆乳无码一区二区三区| 色婷婷综合久久久久| 亚洲小少妇裸体bbw| 俄罗斯精品一区二区| 婷婷激情综合| 久久久久国产一区| 久久久亚洲精品一区二区三区 | 亚洲高清自拍| 永久免费黄色片| 国产精品久久午夜夜伦鲁鲁| 亚洲大片免费观看| 日韩电影在线观看永久视频免费网站 | 久久久三级国产网站| 欧美亚洲天堂网| 精品av久久707| 免费毛片在线看片免费丝瓜视频 | 日韩在线黄色| 国产综合中文字幕| 成人一区二区三区在线观看| 99精品久久久久| 欧美一级在线观看| 国产不卡在线| 亚洲a∨日韩av高清在线观看| 欧美疯狂party性派对| 邪恶网站在线观看| 日本一区二区三区四区在线视频| 精品国产一区二区三区四| 日韩经典中文字幕| 午夜伦理福利在线| 欧美日韩国产免费一区二区三区 | 999成人网| 老司机午夜性大片| 日韩毛片一二三区| av中文字幕免费在线观看| 欧美精品在线免费观看| 一区二区三区四区精品视频| 97超碰国产精品| 不卡的看片网站| 五月婷婷亚洲综合| 国产亚洲精品久久久久动| 成人日韩av| 欧美三级午夜理伦三级老人| 国产传媒一区在线| 日韩免费不卡视频| 日韩精品一区二区三区第95| 午夜影院一区| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 久久国产福利国产秒拍| 麻豆成人在线视频| 日韩精品久久久久 | 欧美视频中文一区二区三区在线观看 | 国产精品第5页| 中文字幕亚洲一区| 老司机亚洲精品一区二区| 欧美图片激情小说| 久久久久久亚洲综合影院红桃| 中文在线观看免费高清| 久久亚洲精品一区| 久久精品66| 婷婷丁香激情网| 亚洲精品国产视频| 亚洲欧美日韩动漫| 国产精品嫩草影院久久久| 欧美一区精品| 国产精品1000部啪视频| 欧美高清一级片在线| cao在线视频| 亚洲国产一区二区三区在线| 国产传媒日韩欧美成人| av手机天堂网| 欧美—级a级欧美特级ar全黄| 夜夜春成人影院| 下面一进一出好爽视频| 黑人巨大精品欧美一区二区一视频 | 97在线播放免费观看| 97视频在线观看视频免费视频| 欧美三级三级| 韩国三级hd两男一女| 欧美日韩综合色| 黄色在线免费观看网站| 免费看啪啪网站| 国产午夜亚洲精品午夜鲁丝片|