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

比較與分析Groovy與Java

開發 后端
本文對Groovy與java兩者之間的相同之處、不同之處及其聯系進行了總結,希望大家從中有所收獲。

Groovy與Java的比較(上)

1.支持函數式編程,不需要main函數

2.默認導入常用的包,包括:

java.io

java.math

java.net

java.util

groovy.lang

groovy.util

3.斷言不支持jvm的-ea參數進行開關

4.支持對對象進行布爾求值

支持對對象進行布爾求值

5.類不支持default作用域,且默認作用域為public

6.受檢查類型異常(Checked Exception)也可以不用捕獲

7.一些新的運算符

一些新的運算符

8.groovy中基本類型也是對象,可以直接調用對象的方法,如:

  1. assert (-12345).abs() == 12345

但浮點運算是基于BigDecimal類

  1. assert 0.25 instanceof BigDecimal
  2. assert 0.1 * 3 == 0.3
  3. assert 1.1 + 0.1 == 1.2
  4. assert 1 / 0.25 == 4

Groovy與Java的比較(中)

9.字符串的處理

String對象和java類似,但沒有character的概念,沒有迭代每個字符的方法。

使用單引號定義普通字符串,雙引號定義的字符串可以包含Groovy運算符,$符號則需要轉義("\$"),如:

  1. String name = "Ben"
  2. String greeting = "Good morning, ${name}"
  3. assert greeting == 'Good morning, Ben'
  4. String output = "The result of 2 + 2 is: ${2 + 2}"
  5. assert output == "The result of 2 + 2 is: 4"

還可以使用三個連續的"來定義多行字符串,如:

  1. String getEmailBody(String name) {
  2. return """Dear ${name},
  3. Thank you for your recent inquiry. One of our team members
  4. will process it shortly and get back to you. Some time in
  5. the next decade. Probably.
  6. Warmest and best regards,
  7. Customer Services
  8. """
  9. }

char類型的使用方法:

  1. char ch = 'D'
  2. assert ch instanceof Character
  3. String str = "Good morning Ben"
  4. str = str.replace(' ' as char, '+' as char)
  5. assert str == "Good+morning+Ben"

10.as運算符,用于沒有集成關系的類型間強制類型轉換,如:

  1. assert 543667 as String == "543667"
  2. assert 1234.compareTo("34749397" as int) < 0

可通過實現asType(Class) 方法來實現自定義的as行為,默認的方法包括:

默認的方法

11.一些集合類型的語法甜頭(Syntax sugar for lists, maps, and ranges)

從語言層面支持List\Map\Range類型,而不是通過SDK中的類

使用[]創建創建和初始化List、Map,如:

  1. List myList = [ "apple", "orange", "lemon" ]
  2. Map myMap = [ 3: "three", 6: "six", 2: "two" ]
  3. assert 3 == [ 5, 6, 7 ].size()

List\Map支持數組風格的用法

  1. List numbers = [ 5, 10, 15, 20, 25 ]
  2. assert numbers[0] == 5 //獲取List中的對象
  3. assert numbers[3] == 20
  4. assert numbers[-1] == 25 //逆序獲取List對象
  5. assert numbers[-3] == 15
  6. numbers[2] = 3 //更新List對象
  7. assert numbers[2] == 3
  8. numbers < < 30 //添加數據
  9. assert numbers[5] == 30
  10. Map items = [ "one": "apple",
  11. "two": "orange",
  12. "three": "pear",
  13. "four": "cherry" ]
  14. assert items["two"] == "orange" //從Map中獲得對象
  15. assert items["four"] == "cherry"
  16. items["one"] = "banana" //更新Map中對象
  17. assert items["one"] == "banana"
  18. items["five"] = "grape" //增加對象到中
  19. assert items["five"] == "grape"

新的類型:Range

Range實現了java.util.List,可以作為List使用,并擴展了包含(..)和排除(..< )運算符

  1. // an inclusive range
  2. def range = 5..8
  3. assert range.size() == 4
  4. assert range.get(2) == 7
  5. assert range[2] == 7
  6. assert range instanceof java.util.List
  7. assert range.contains(5)
  8. assert range.contains(8)
  9. // lets use an exclusive range
  10. range = 5..< 8
  11. assert range.size() == 3
  12. assert range.get(2) == 7
  13. assert range[2] == 7
  14. assert range instanceof java.util.List
  15. assert range.contains(5)
  16. assert ! range.contains(8)
  17. //get the end points of the range without using indexes
  18. def range = 1..10
  19. assert range.from == 1
  20. assert range.to == 10
  21. List fruit = [
  22. "apple",
  23. "pear",
  24. "lemon",
  25. "orange",
  26. "cherry" ]
  27. for (int i in 0..< fruit.size()) { //Iterates through an exclusive range B
  28. println "Fruit number $i is '${fruit[i]}'"
  29. }
  30. List subList = fruit[1..3] //Extracts a list slice C

12.一些省時的特性

行末的分號(;)不是必須的。在沒有分號的情況下,groovy計算一行如果是有效的表達式,則認為下一行是新的表達式,否則將聯合下一行共同作為一個表達式。分隔多行的表達式,可以用/符號,如:

  1. String fruit = "orange, apple, pear, " \
  2. + "banana, cherry, nectarine"

方法調用時的圓括號()不是必須的(但建議保留)。但在無參方法調用,或第一個參數是集合類型定義時還是必須的:

  1. println "Hello, world!"
  2. println()
  3. println([1, 2, 3, 4])

方法定義中的return語句不是必須的,沒有return的情況下,將返回方法體中最后一行的值,如下面的方法返回value+1:

int addOne(int value) { value + 1 }

Groovy與Java的比較(下)

13.語言級別的正則表達式支持

使用斜線(/)定義正則表達式,避免java中的多次轉義,如"\\\\\\w"相當于/\\\w/。

如果要作為java中的Pattern對象使用,可以使用~符號表示,如:

  1. assert ~"London" instanceof java.util.regex.Pattern
  2. assert ~/\w+/ instanceof java.util.regex.Pattern

使用=~運算符進行匹配

  1. assert "Speaking plain English" =~ /plain/

使用==~運算符進行精確匹配

  1. assert !("Speaking plain English" ==~ /plain/)
  2. assert "Speaking plain English" ==~ /.*plain.*/

捕獲分組,如:

  1. import java.util.regex.Matcher
  2. String str = "The rain in Spain falls mainly on the plain"
  3. Matcher m = str =~ /\b(\w*)ain(\w*)\b/
  4. if (m) {
  5. for (int i in 0..< m.count) {
  6. println "Found: '${m[i][0]}' - " +
  7. "prefix: '${m[i][1]}'" +
  8. ", suffix: '${m[i][2]}'"
  9. }
  10. }

輸出:

  1. Found: 'rain' - prefix: 'r', suffix: ''
  2. Found: 'Spain' - prefix: 'Sp', suffix: ''
  3. Found: 'mainly' - prefix: 'm', suffix: 'ly'
  4. Found: 'plain' - prefix: 'pl', suffix: ''

14.簡化的javabean

直接使用“.屬性名”的方法代替getter,如:

  1. Date now = new Date()
  2. println "Current time in milliseconds: ${ now.time }"
  3. now.time = 103467843L
  4. assert now.time == 103467843L

屬性定義不需要setter/getter。未指定作用域的屬性,groovy自動認為是private并生為其成setter/getter,也可以根據需要進行覆寫。如下除了最后一個字段,都是屬性:

  1. class MyProperties {
  2. static String classVar
  3. final String constant = "constant"
  4. String name
  5. public String publicField
  6. private String privateField
  7. }

簡化bean的初始化,可以使用Map進行初始化,或鍵值對的方法,如

  1. DateFormat format = new SimpleDateFormat(
  2. lenient: false,
  3. numberFormat: NumberFormat.getIntegerInstance(),
  4. timeZone: TimeZone.getTimeZone("EST"))

可以使用屬性的方式讀取map:

  1. Map values = [ fred: 1, peter: 5, glen: 42 ]
  2. assert values.fred == 1
  3. values.peter = 10
  4. assert values.peter == 10

注:groovy將map的key作為字符串處理,除非是數字或者用圓括號包含。這里的fred就是字符串"fred",但引號不是必須的,只有在key包含空格、句點或其他不能作為Groovy標示符的字符存在時才需要。如果需要使用一個變量的值作為key,則使用圓括號,如 [ (fred): 1 ]。

15.groovy不具備的java特性

不能用單引號定義字符類型,但可以使用as運算符將一個字母的字符串轉換為字符類型

for循環中不能用逗號分隔多個運算符,如下面的代碼是不允許的:

  1. for (int i = 0, j = 0; i < 10; i++, j++) { ... }

不支持DO...WHILE循環,但可以使用while...for運算代替

不支持內部類和匿名類,但支持閉包和在一個文件中定義多個類

16.groovy的重要特性——閉包:

可以看作一個匿名方法定義,可以賦予給一個變量名、作為參數傳遞給方法調用、或者被方法返回。也可以想象為只有一個方法定義的匿名類。

閉包的語法{ < arguments> -> < body> },如:

  1. List fruit = [ "apple", "Orange", "Avocado", "pear", "cherry" ]
  2. fruit.sort { String a, String b -> a.compareToIgnoreCase(b) }
  3. println "Sorted fruit: ${fruit}"

注:sort方法只有一個閉包類型的參數,省略了圓括號;閉包中使用了默認的return值

當沒有參數傳入時,仍然需要保留箭頭的存在{-> ... }

只有一個參數傳入時,可以省略箭頭,隱式的創建一個it參數,引用當前對象,如:

  1. [ "apple", "pear", "cherry" ].each { println it }

可以將閉包賦予一個變量,如

  1. Closure comparator = { String a, String b ->
  2. a.compareToIgnoreCase(b)
  3. }
  4. List fruit = [ "apple", "Orange", "Avocado", "pear", "cherry" ]
  5. fruit.sort(comparator)
  6. println "Sorted fruit: ${fruit}"
  7. assert comparator("banana", "Lemon") < 0

只有一個參數的閉包,可以不傳入參數,運行時隱式的傳入null參數

當閉包是一個方法的最后一個參數時,可以寫在圓括號外面,如:

  1. List list = [ 1, 3, 5, 6 ]
  2. list.inject(0, { runningTotal, value -> runningTotal + value })

可以這樣寫:

  1. assert 15 == list.inject(0) { runningTotal, value -> runningTotal + value }

便于閉包中具有多行時代碼更加清晰

不要濫用閉包。當閉包作為一個屬性時,不要在子類中覆寫,實在需要這樣做,使用方法。使用閉包也無法利用java中很多AOP框架的特性

17.groovy的重要特性——動態編程

動態的使用屬性,如下的java代碼:

  1. public void sortPeopleByGivenName(List< Person> personList) {
  2. Collections.sort(personList, new Comparator< Person>() {
  3. public int compare(Person p1, Person p2) {
  4. return p1.getFamilyName().compareTo(p2.getFamilyName());
  5. }
  6. } ) ;
  7. }

可使用下面的代替,當需要使用其他字段比較時,不需要修改代碼

  1. def sortPeople(people, property) {
  2. people.sort { p1, p2 -> p1."${property}" < => p2."${property}" }
  3. }

將一個String作為屬性或方法名進行調用,如:

  1. peopleList.sort()
  2. peopleList."sort"()

動態類型(duck typing:"if it walks like a duck and talks like a duck, it’s probably a duck):運行期解析對象的屬性和方法,允許在運行時增加對象的屬性和方法而不修改源代碼,因此可能出現調用未定義方法的情況。

動態編程帶來的危險:

編譯器不能檢查到類型錯誤、方法或屬性的錯誤調用,應該養成編寫測試的習慣

難以調試,使用“單步跳入(step into)”經常進入一些反射中,使用“運行到光標處(run to cursor)”代替

動態的類型定義使代碼難以閱讀,使用良好的命名、注釋,盡量明確定義變量類型,便于IDE檢測ht potential type errors in the call潛在的錯誤。

18.Groovy JDK中的增強

Collection/Array/String具有size()方法

Collection/Array/String具有each(closure)方法,方便的進行遍歷

Collection/Array/String具有find(closure)、findAll(closure)方法,find返回第一個符合條件的對象,findAll返回所有符合條件對象列表,如:

  1. def glen = personList.find { it.firstName == "Glen" }

Collection/Array/String具有collect(closure)方法,對集合中每個對象執行一段方法后,返回結果集,如:

  1. def names = [ "Glen", "Peter", "Alice", "Graham", "Fiona" ]
  2. assert [ 4, 5, 5, 6, 5 ] == names.collect { it.size() }

Collection/Array/String具有sort(closure)方法,包括:

一個參數的閉包,如:

  1. def names = [ "Glen", "Peter", "Ann", "Graham", "Veronica" ]
  2. def sortedNames = names.sort { it.size() }
  3. assert [ "Ann", "Glen", "Peter", "Graham", "Veronica" ] == sortedNames

兩個參數的閉包,如:

  1. def names = [ "Glen", "Peter", "Ann", "Graham", "Veronica" ]
  2. def sortedNames = names.sort { name1, name2 ->
  3. name1.size() < => name2.size()
  4. }
  5. assert [ "Ann", "Glen", "Peter", "Graham", "Veronica" ] == sortedNames

Collection/Array具有join(String)方法

  1. def names = [ "Glen", "Peter", "Alice", "Fiona" ]
  2. assert "Glen, Peter, Alice, Fiona" == names.join(", ")

File.text屬性讀取文件內容作為字符串返回

File.size()方法返回文件的byte值,相當于File.length()方法

File.withWriter(closure)方法,從文件創建一個Writer對象傳給閉包,閉包執行完畢后,依賴的輸出流自動安全關閉。另外還有若干with...方法查看文檔

Matcher.count返回相應Matcher的匹配數量

Number.abs()方法,對數字求絕對值

Number.times(closure)執行n次閉包,將當前執行的次數作為參數傳給閉包

19.XML的處理

示例的XML:

  1. < root>
  2. < item qty="10">
  3. < name>Orange< /name>
  4. < type>Fruit< /type>
  5. < /item>
  6. < item qty="6">
  7. < name>Apple< /name>
  8. < type>Fruit< /type>
  9. < /item>
  10. < item qty="2">
  11. < name>Chair< /name>
  12. < type>Furniture< /type>
  13. < /item>
  14. < /root>

處理程序

  1. import groovy.xml.MarkupBuilder
  2. import groovy.util.XmlSlurper
  3. def file = new File("test.xml")
  4. def objs = [
  5. [ quantity: 10, name: "Orange", type: "Fruit" ],
  6. [ quantity: 6, name: "Apple", type: "Fruit" ],
  7. [ quantity: 2, name: "Chair", type: "Furniture" ] ]
  8. def b = new MarkupBuilder(new FileWriter(file)) 創建MarkupBuilder對象
  9. b.root {
  10. 動態調用root方法,但builder對象并沒有該方法,把它作為一個新的XML對象的根節點,并且把方法名作為根節點名稱
  11. objs.each { o ->
  12. item(qty: o.quantity) {
  13. name(o.name)
  14. type(o.type)
  15. }
  16. }
  17. }
  18. 遍歷集合,創建節點,其中item/name/type也是動態的方法,以方法名作為節點名,方法參數作為節點的屬性
  19. def xml = new XmlSlurper().parse(file)
  20. 使用XmlSlurper對象解析內存中的XML文件
  21. assert xml.item.size() == 3
  22. assert xml.item[0].name == "Orange"
  23. assert xml.item[0].@qty == "10"
  24. 使用動態的屬性名讀取XML節點
  25. 使用@字符讀取節點屬性
  26. println "Fruits: ${xml.item.findAll {it.type == 'Fruit'}*.name }"
  27. println "Total: ${xml.item.@qty.list().sum {it.toInteger()} }"

20.最佳實踐

使用地道的Groovy語法:盡可能使用groovy中簡化后的語法風格,減少代碼量

實驗:使用groovy console或shell可以方便的實驗groovy代碼

盡可能使用方法,而不是閉包。方法易于理解,也利于和java交互

在方法簽名中盡可能的使用確定的類型,便于代碼閱讀和IDE的錯誤檢測。在使用動態類型時要有清晰完善的文檔注釋

【編輯推薦】

  1. 多核時代考驗Java代碼編寫習慣
  2. JSR通過JavaEE 6依賴注入標準 各方觀點不一
  3. Sun發布JDK 7早期預覽版 JVM性能大幅提升
  4. 來自一年前的預測:Java平臺與死亡相去甚遠
  5. Java新型垃圾回收器G1深入探索
責任編輯:book05 來源: popoer
相關推薦

2017-04-27 10:38:28

排序算法比較分析

2012-07-02 14:47:38

HTML5

2009-08-03 10:44:51

Groovy 1.7Groovy

2011-09-22 13:49:44

XML基準測試

2012-10-11 10:51:39

開源IaaS云

2013-12-10 23:06:58

開源云平臺云計算

2018-11-01 09:14:42

CNNRNN神經網絡

2017-03-07 09:05:05

JavaScriptJavaPHP

2009-07-07 17:23:08

Java Servle

2023-01-10 08:04:31

2010-07-14 10:15:31

2009-09-14 18:39:41

MCSE與CCNA

2020-08-11 10:05:16

Qlik SenseTableau數據分析

2010-05-12 11:24:16

2023-02-07 09:17:19

Java注解原理

2010-08-23 14:44:06

思科

2009-08-07 10:27:45

Eclipse和Net

2009-07-14 16:30:41

Swing與SWT

2009-07-03 12:48:24

Java Servle

2010-03-11 10:51:19

Python編程語言
點贊
收藏

51CTO技術棧公眾號

国产成人ay| 中文字幕在线免费观看视频| 国产成人一区二区精品非洲| 2023亚洲男人天堂| 免费看的黄色录像| 亚洲一区二区三区四区电影| 一本色道**综合亚洲精品蜜桃冫| 永久域名在线精品| 午夜小视频在线播放| 美日韩一区二区| 91精品国产91久久久| 大胸美女被爆操| 精品国产18久久久久久洗澡| 欧美日韩国产一级片| 亚洲一区二区三区av无码| 国产三级在线免费观看| 成人一区二区三区视频 | 在线免费观看毛片| 日本不卡高清| 日韩av一区在线| 亚洲图片 自拍偷拍| xx欧美视频| 亚洲国产欧美一区二区三区丁香婷| 日韩欧美精品一区二区| 欧美视频久久久| 韩国v欧美v亚洲v日本v| 欧洲日本亚洲国产区| 麻豆国产尤物av尤物在线观看| 亚洲成人一品| 精品国产精品网麻豆系列| 玖玖爱视频在线| 日韩久久一区二区三区| 黑人狂躁日本妞一区二区三区| 亚洲精品在线视频观看| 深夜福利视频在线观看| 成人精品视频网站| 147欧美人体大胆444| 在线免费观看高清视频| 久久久久一区| 18一19gay欧美视频网站| 久久久久亚洲av无码专区| 婷婷中文字幕一区| 色系列之999| 国产伦精品一区二区三区视频女| 欧美天堂社区| 日韩精品在线影院| 中文字幕一区二区人妻电影丶| 亚州一区二区| 日韩精品一区二区三区视频在线观看 | 黑人巨大精品欧美一区| 国产精品久久久久久搜索| 精品成人无码久久久久久| 日韩啪啪电影网| 中文字幕精品一区二区精品| 欧美精品日韩在线| 日韩精品一区二区三区免费观看| 亚洲天堂成人在线视频| 一级片久久久久| 超碰成人久久| 色yeye香蕉凹凸一区二区av| 美女福利视频网| 国产精品国产一区| 久久亚洲综合国产精品99麻豆精品福利 | 性欧美lx╳lx╳| 日韩毛片中文字幕| 男女做爰猛烈刺激| 成人精品视频| 精品国产一区二区三区四区在线观看 | 在线观看免费黄色| 国产精品久久久久久一区二区三区 | 国产电影一区二区在线观看| 色偷偷综合社区| 欧美日韩中文字幕在线观看 | 欧美精品激情blacked18| 国产在线视频99| 午夜在线视频一区二区区别| 国产精品1234| 国产区精品在线| 成人免费毛片app| 欧美lavv| 国产激情在线视频| 亚洲v日本v欧美v久久精品| 欧美性大战久久久久xxx | 999亚洲国产精| 日本成人黄色片| 国产精品天天操| 不卡高清视频专区| 亚洲视频sss| 888av在线视频| 色8久久人人97超碰香蕉987| 中文字幕在线综合| 白嫩白嫩国产精品| 国产亚洲成精品久久| 超碰手机在线观看| 三级成人在线视频| aaa级精品久久久国产片| 日本一区视频| 亚洲精品欧美二区三区中文字幕| 大荫蒂性生交片| jizz欧美| 日韩精品在线视频| 精品97人妻无码中文永久在线| 久久高清国产| 高清国产在线一区| 草草影院在线观看| 亚洲国产一区二区在线播放| 亚洲这里只有精品| 精品国内亚洲2022精品成人| 日韩一二三在线视频播| 国产专区第一页| 国产成人综合自拍| 亚洲国产另类久久久精品极度| 蜜臀av国内免费精品久久久夜夜| 欧美亚洲日本国产| 最近中文字幕无免费| 亚洲深深色噜噜狠狠爱网站| 国产精品96久久久久久又黄又硬| 亚洲伦理在线观看| 国产精品福利影院| 能看的毛片网站| 老司机凹凸av亚洲导航| 欧美大成色www永久网站婷| 最近中文字幕在线视频| 91浏览器在线视频| 国产精品入口芒果| 欧美日韩黄色| 精品国偷自产在线视频| 波多野结衣毛片| 2021中文字幕一区亚洲| 水蜜桃色314在线观看| 国产成人精品久久| 欧美精品少妇| 激情懂色av一区av二区av| 久久久久久无码精品人妻一区二区| 久久91麻豆精品一区| 97欧美精品一区二区三区| www国产一区| 亚洲精品免费播放| 中国老熟女重囗味hdxx| 综合久久久久| 99国产视频| sm国产在线调教视频| 欧美丰满嫩嫩电影| www日韩在线| 狠狠色综合日日| 中文字幕第一页亚洲| 四虎国产精品免费久久| 日韩中文av在线| 91在线公开视频| 国产精品不卡视频| 亚洲妇熟xx妇色黄蜜桃| 国产精品成人a在线观看| 国产欧美一区二区三区四区| 日本中文字幕在线播放| 欧美妇女性影城| 日本老熟俱乐部h0930| 国产乱码一区二区三区| 激情六月天婷婷| 精品国内亚洲2022精品成人| 欧美一级高清免费| 男女污视频在线观看| 91福利精品视频| 亚洲女人毛茸茸高潮| 国内成人自拍视频| 黄网站色视频免费观看| 女同久久另类99精品国产| 欧美一乱一性一交一视频| 九色在线播放| 欧美日韩激情在线| 免费无遮挡无码永久在线观看视频| 国产91精品久久久久久久网曝门| 日韩精品在线中文字幕| 婷婷成人在线| 国产在线精品成人一区二区三区| 国产视频中文字幕在线观看| 精品久久久久99| 国产一级免费视频| 亚洲欧洲精品一区二区三区| 特黄特色免费视频| 老司机午夜精品视频在线观看| 性刺激综合网| 91亚洲无吗| 国产精品第三页| 污视频网站在线免费| 亚洲精品色婷婷福利天堂| 亚洲系列在线观看| 亚洲午夜激情网页| 免费在线观看a视频| 国产91综合网| 亚洲老女人av| 一本一本久久| 在线观看污视频| 精品国产一区二区三区噜噜噜| 亚洲影院高清在线| 欧美成人资源| 久久久久久久久国产精品| 国产青青草在线| 精品国产伦一区二区三区免费| 免费看污视频的网站| 一区二区三区日韩欧美精品| 国产熟女一区二区| 99久久99精品久久久久久| 男女视频在线看| 国产亚洲一级| 亚洲色图都市激情| 成人久久久久| 你懂的网址一区二区三区| 中文在线综合| 成人免费观看网址| 精品欧美一区二区三区在线观看| 欧美成人免费网| 国产高清美女一级毛片久久| 亚洲国产精品va在看黑人| 国产精品视频久久久久久| 欧洲精品一区二区三区在线观看| 国产一级一片免费播放| 日韩毛片在线免费观看| 波多野结衣一二三四区| 99re这里只有精品视频首页| 激情小说欧美色图| 精品夜夜嗨av一区二区三区| www黄色在线| 久久亚洲综合| 欧美性大战久久久久xxx| 亚洲国产午夜| 少妇大叫太大太粗太爽了a片小说| 国产精品久久久久蜜臀| 亚洲成人网上| 国产麻豆精品久久| 久久久久久九九| 丁香5月婷婷久久| 99理论电影网| 91夜夜蜜桃臀一区二区三区| 97在线中文字幕| 粉嫩一区二区三区在线观看| 国产在线a不卡| 成人国产精品久久| 成人黄色免费网站在线观看| 久久影视精品| 成人国产在线激情| 日韩欧美激情| 91网站在线看| 精品国产伦一区二区三区观看说明 | 亚洲另类激情图| 内衣办公室在线| 亚洲图片制服诱惑| 成人免费一区二区三区视频网站| 亚洲欧洲在线免费| 国产人成在线视频| 最近的2019中文字幕免费一页| yourporn在线观看中文站| 中文字幕欧美视频在线| 91电影在线播放| 久久精品国产清自在天天线 | 国产成人1区| 亚洲国产日韩综合一区| 99热国内精品永久免费观看| 亚洲色婷婷久久精品av蜜桃| 伊人成人在线视频| 69堂免费视频| 青青草视频一区| 手机在线免费毛片| 成人毛片老司机大片| 野花社区视频在线观看| 国产人成一区二区三区影院| 天堂а√在线中文在线鲁大师| 综合久久一区二区三区| 黄色一级视频免费观看| 欧美视频在线看| 中文字幕你懂的| 日韩一区二区三区电影在线观看| 亚洲国产精品久久久久久久| 亚洲欧美国产精品| 欧美私人网站| 久久久久久国产| 偷拍中文亚洲欧美动漫| 国产精品香蕉在线观看| 日韩在线精品强乱中文字幕| 精品一区二区三区视频日产| re久久精品视频| 九九热只有这里有精品| 日韩精品电影在线| 永久av免费在线观看| 91婷婷韩国欧美一区二区| 色偷偷男人天堂| 亚洲成人一区二区在线观看| 最近中文字幕在线观看视频| 精品欧美一区二区久久| 国产女主播在线写真| 欧美另类精品xxxx孕妇| 成人片免费看| 99超碰麻豆| 欧美一级精品| 免费av观看网址| 国产乱码精品一品二品| 无码少妇精品一区二区免费动态| 亚洲综合在线观看视频| 亚洲国产无线乱码在线观看| 亚洲第一福利在线观看| 麻豆传媒在线完整视频| 5566日本婷婷色中文字幕97| 激情不卡一区二区三区视频在线| 欧美深深色噜噜狠狠yyy| 欧美日韩三级| 在线观看免费不卡av| 久久一区二区三区国产精品| 欧美日韩三级在线观看| 欧美日韩另类国产亚洲欧美一级| 人人妻人人澡人人爽人人欧美一区 | 久久久久久久久免费看无码| 亚洲欧美国产三级| 免费在线观看av的网站| 亚洲精品97久久| 调教一区二区| 国产一区欧美二区三区| 奇米狠狠一区二区三区| 霍思燕三级露全乳照| 国产伦理精品不卡| 少妇愉情理伦三级| 日韩欧美一区二区在线| 三级视频在线看| 欧美高清一级大片| avtt久久| 国产麻豆电影在线观看| 琪琪一区二区三区| 中文字幕第4页| 色综合天天综合网国产成人综合天| 丰满熟女一区二区三区| 欧美激情国产精品| 韩国三级大全久久网站| 91九色国产ts另类人妖| 韩日欧美一区二区三区| 国产黄色录像视频| 欧美性大战久久| 五十路六十路七十路熟婆| 色无极亚洲影院| 六月丁香婷婷在线| 99re热视频精品| 久久久久久久久久久久久久av| 精品国产一区二区三区不卡| 羞羞视频在线免费国产| 99国产超薄肉色丝袜交足的后果| 亚洲一区二区三区无吗| 九九九久久久久久久| 亚洲免费av高清| 精品国产伦一区二区三区| 久操成人在线视频| 亚洲视频国产| 黄色国产一级视频| 97久久超碰国产精品| 永久免费无码av网站在线观看| 亚洲欧美三级伦理| 成人在线免费av| 国产人妻互换一区二区| 国产成人精品网址| 日本熟女一区二区| 日韩av在线播放资源| 日韩成人av电影| 亚洲一区三区电影在线观看| 激情国产一区二区 | 亚洲综合图片区| 天堂成人在线观看| 热久久99这里有精品| 日韩精品免费一区二区在线观看| 中文国产在线观看| 亚洲国产精品久久人人爱 | 久久久久亚洲精品中文字幕| 亚洲av综合色区| www.亚洲激情.com| 99re国产在线| 精品久久国产精品| 成人h动漫免费观看网站| 中国丰满人妻videoshd| 国产精品污污网站在线观看| 国产露脸无套对白在线播放| 午夜精品久久17c| 国产成人ay| 日本成人在线免费观看| 精品日本美女福利在线观看| 福利视频在线导航| 亚洲一区二区三区xxx视频| 99国产一区| 日韩亚洲欧美中文字幕| 亚洲精品动漫久久久久| 成人在线视频免费看| 精品国产一区二区三区无码| 国产视频一区在线观看| 亚洲av无码国产精品永久一区 | 国产免费一级视频| 久久亚洲一区二区三区四区五区高| 国产精品久久久网站| 国产精品视频中文字幕| 亚洲va韩国va欧美va精品| 天堂地址在线www| 久久99久久精品国产| 国产一级精品在线| 伊人久久久久久久久久久久| 欧美激情一二三| 国产精品99一区二区三区| 性久久久久久久久久|