日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

学习笔记之Java程序设计实用教程

發(fā)布時(shí)間:2023/12/15 java 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习笔记之Java程序设计实用教程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java程序設(shè)計(jì)實(shí)用教程 by 朱戰(zhàn)立 & 沈偉

學(xué)習(xí)筆記之JAVA多線程(http://www.cnblogs.com/pegasus923/p/3995855.html)

國(guó)慶休假前學(xué)習(xí)了多線程,休假花了兩天時(shí)間把整本書學(xué)完了。看書還就得一鼓作氣。

?第一章  概述

  • 1995年SUN正式發(fā)布Java,前身是Oak。
  • 1998年發(fā)布帶有JDK1.2的Java 2。
  • JDK(JAVA DEVELOPMENT KIT),也稱作JAVA SDK(JAVA SOFTWARE DEVELOPMENT KIT)。
  • J2ME(JAVA 2 MICRO EDITION)
  • J2SE(JAVA 2 STANDARD EDITION)
  • J2EE(JAVA 2 ENTERPRISE EDITION)
  • 簡(jiǎn)單、面向?qū)ο蠛团c現(xiàn)有高級(jí)語(yǔ)言形式類似。
  • 魯棒性和安全性。可靠性依靠JAVA的編譯時(shí)檢查和運(yùn)行時(shí)檢查兩層檢查機(jī)制實(shí)現(xiàn)。主要用于分布式的網(wǎng)絡(luò)環(huán)境。
  • 結(jié)構(gòu)中立。JAVA先編譯產(chǎn)生字節(jié)碼(不依賴于任何硬件和操作系統(tǒng)的中間代碼),然后用解釋的方法產(chǎn)生最終在具體計(jì)算機(jī)上運(yùn)行的機(jī)器碼。
  • 高性能。解釋性程序設(shè)計(jì)語(yǔ)言運(yùn)行速度慢,JAVA是半解釋型,但JAVA的解釋執(zhí)行能全速進(jìn)行,不用檢查運(yùn)行時(shí)的環(huán)境(因該環(huán)境已在編譯時(shí)保證)。自動(dòng)垃圾回收線程定義成優(yōu)先級(jí)很低的后臺(tái)線程,只在系統(tǒng)空閑時(shí)啟動(dòng)執(zhí)行,也保證了運(yùn)行速度。
  • 解釋型、多線程和動(dòng)態(tài)性。只要安裝JAVA解釋器,JAVA字節(jié)碼就能在任何計(jì)算機(jī)上解釋執(zhí)行。JAVA的多線程機(jī)制可提高復(fù)雜應(yīng)用程序的運(yùn)行速度,并且有系統(tǒng)提供的同步功能做安全保證。JAVA的對(duì)象綁定是動(dòng)態(tài)的,類在被要求的時(shí)候才被從指定任意位置導(dǎo)入。
  • 和C++等相比,JAVA是純面向?qū)ο蟮母呒?jí)語(yǔ)言。
  • 獨(dú)立于各種操作平臺(tái)。先按編譯方式翻譯到字節(jié)碼,然后把字節(jié)碼按解釋方式翻譯到具體機(jī)器的機(jī)器語(yǔ)言。這種半編譯、半解釋的高級(jí)語(yǔ)言翻譯方式,使獨(dú)立于硬件環(huán)境和操作系統(tǒng)平臺(tái)。
  • 安全性好。
  • 多線程。操作系統(tǒng)多任何和分時(shí),允許同一時(shí)間運(yùn)行多個(gè)程序。主要有多進(jìn)程和多線程兩種方式,多線程效率更高。同步機(jī)制能保證多線程正確運(yùn)行。
  • 字節(jié)碼(BYTECODE)是和任何具體機(jī)器環(huán)境無(wú)關(guān)的中間代碼。
  • JAVA程序文件為.JAVA,字節(jié)碼文件.CLASS。
  • JAVA虛擬機(jī)(JAVA VIRTUAL MACHINE, JVM)上有JAVA解釋器。
  • JAVA一次編寫,任意運(yùn)行(WRITE ONCE, RUN ANYWHERE),解決了硬件環(huán)境和操作系統(tǒng)平臺(tái)的異構(gòu)問題。
  • 網(wǎng)絡(luò)環(huán)境下應(yīng)用軟件的開發(fā)模式多是B/S(BROWSE/SERVER)模式,即應(yīng)用軟件放在服務(wù)器端,客戶端通過瀏覽器來(lái)進(jìn)行應(yīng)用。B/S模式的應(yīng)用系統(tǒng)特別需要異構(gòu)環(huán)境的支持。
  • 嵌入HTML的JAVA程序稱作APPLET程序(小程序)。
  • 如果把JAVA源程序在瀏覽器上按解釋方式運(yùn)行,客戶計(jì)算機(jī)的運(yùn)行速度將非常慢。
  • 當(dāng)JAVA虛擬機(jī)采用硬件直接實(shí)現(xiàn)時(shí),運(yùn)行速度將大大快于目前的運(yùn)行速度。
  • JDK的文件夾結(jié)構(gòu):BIN,包含編譯器、解釋器等可執(zhí)行文件;DEMO,程序示例;INCLUDE,頭文件,用于本地機(jī)的C語(yǔ)言;INCLUDE-OLD,頭文件,用于兼容支持舊接口;JRE,JAVA運(yùn)行時(shí)環(huán)境的根路徑;LIB,可執(zhí)行程序使用的包文件。
  • set path設(shè)置了JAVA編譯運(yùn)行程序的路徑。
  • set classpath設(shè)置了JAVA包的路徑,最前面的“.”表示在當(dāng)前工作路徑下可執(zhí)行JAVA程序。
  • JAVA源程序文件名必須和類名完全一樣;JAVA文件名的命名也是大小寫敏感;JAVA源程序文件名后綴必須為.JAVA。
  • 編譯命令JAVAC將編譯.JAVA,若編譯正確,產(chǎn)生相應(yīng)字節(jié)碼文件(類文件).CLASS。
  • 運(yùn)行命令JAVA可運(yùn)行.CLASS。
  • JAVA程序主要有兩種:JAVA APPLICATION(應(yīng)用程序)和JAVA APPLET(小程序)。
  • JAVA APPLET是嵌入在網(wǎng)頁(yè)中、用瀏覽器加載后才能解釋執(zhí)行的程序。

?第二章  JAVA語(yǔ)言基礎(chǔ)

  • JAVA語(yǔ)言的字符使用UNICODE編碼標(biāo)準(zhǔn)。
  • 標(biāo)識(shí)符由字母數(shù)字下劃線_和美元符$組成,必須以字母_或$開頭,字符個(gè)數(shù)有限的字符序列。字母符號(hào)大小寫敏感,區(qū)分大小寫。
  • JAVA有47個(gè)固定含義的標(biāo)識(shí)符,關(guān)鍵字。
  • 變量必須先定義(聲明),才能賦值。
  • 變量定義是指示編譯器為特定數(shù)據(jù)類型的數(shù)值保存在內(nèi)存中分配適當(dāng)?shù)膬?nèi)存空間。
  • 變量的使用范圍稱作變量的作用域。
  • 常見的程序塊形式是if、while、for等后面跟隨的一對(duì)花括號(hào)。
  • 整個(gè)程序運(yùn)行期間保持不變的變量稱為常量。
  • 定義常量用關(guān)鍵字final。
  • 常量名通常全大寫字母。
  • 數(shù)據(jù)類型規(guī)定一類數(shù)據(jù)的數(shù)據(jù)位長(zhǎng)度(字符個(gè)數(shù)),取值范圍,以及對(duì)該類數(shù)據(jù)所能進(jìn)行的操作。
  • JAVA定義了8種基本數(shù)據(jù)類型:整型,byte/short/int/long;浮點(diǎn)型,float/double;邏輯型,boolean;字符型,char。
  • byte 8 bits, short 16 bits, int 32 bits, long 64 bits.
  • 十進(jìn)制首位不能為0;八進(jìn)制以0打頭;十六進(jìn)制以0x或0X打頭。
  • 字面值是程序中用到的顯示數(shù)據(jù)值。所有整型字面值都隱含為int型。若要表示為long型時(shí),在后面加L或l,如12345L。
  • 浮點(diǎn)型由整數(shù)部分和小數(shù)部分組成。兩種表示方式標(biāo)準(zhǔn)記數(shù)法和科學(xué)記數(shù)法,指數(shù)部分由e(E)后跟帶正負(fù)號(hào)的整數(shù)表示。
  • float 32 bits, double 64 bits.
  • 所有浮點(diǎn)型數(shù)的字面值隱含為double。若要表示為float,需加F或f,如123.123F。
  • 邏輯型用來(lái)定義保存邏輯值的變量,也稱布爾型。
  • 一個(gè)UNICODE標(biāo)準(zhǔn)下的編碼稱作一個(gè)字符。
  • 字符型字面值用一對(duì)單引號(hào)括起來(lái)。
  • 轉(zhuǎn)義字符:\r 回車,\\ 反斜杠,\' 單引號(hào),\“ 雙引號(hào)。
  • JAVA是強(qiáng)類型語(yǔ)言。強(qiáng)類型語(yǔ)言是指對(duì)數(shù)據(jù)類型的匹配要求十分嚴(yán)格。如果表達(dá)式的數(shù)據(jù)類型不一致,則編譯器給出類型不一致的出錯(cuò)信息。
  • 賦值語(yǔ)句的類型匹配有兩種:類型相同和類型兼容。類型兼容是指賦值號(hào)左端的數(shù)據(jù)類型比賦值號(hào)右端的數(shù)據(jù)類型長(zhǎng)。數(shù)據(jù)類型長(zhǎng),是指數(shù)據(jù)類型的位數(shù)長(zhǎng)。
  • 類型不兼容時(shí),可以重新定義賦值號(hào),或用強(qiáng)制類型轉(zhuǎn)換。強(qiáng)制類型轉(zhuǎn)換可能丟失數(shù)據(jù)或損失數(shù)據(jù)的精度。
  • JAVA在基本關(guān)鍵字、運(yùn)算符、表達(dá)式、賦值語(yǔ)句、流程控制語(yǔ)句等方面,是和C/C++基本相同的。
  • JAVA運(yùn)算符分為四類:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符。
  • 算術(shù)運(yùn)算符分為一元和二元,操作數(shù)必須是數(shù)值類型。
  • 一元運(yùn)算符:+/-/++/--。一元運(yùn)算符與其前后的操作數(shù)之間不允許有空格,否則編譯出錯(cuò)。
  • 二元運(yùn)算符:+/-/×///%。取余運(yùn)算符可用于整數(shù)和浮點(diǎn)數(shù)的情況。
  • 二元運(yùn)算的所得結(jié)果的數(shù)據(jù)類型與精度較高(位數(shù)更長(zhǎng))的那種數(shù)據(jù)類型一致。
  • 關(guān)系運(yùn)算符:==/!=/>/>=/</<=。
  • 邏輯運(yùn)算符:&&/||/!/^/&/|。
  • &和|運(yùn)算是把邏輯表達(dá)式全部計(jì)算完,而&&和||運(yùn)算具有短路計(jì)算功能。短路計(jì)算,指系統(tǒng)從左至右進(jìn)行邏輯表達(dá)式的計(jì)算,一旦出現(xiàn)計(jì)算結(jié)果已經(jīng)確定的情況,則計(jì)算過程即被終止。短路計(jì)算功能可以提高程序的運(yùn)算速度。在程序設(shè)計(jì)時(shí)使用&&和||運(yùn)算符,而不使用&和|。
  • 位運(yùn)算是以二進(jìn)制位為單位進(jìn)行的運(yùn)算,其操作數(shù)和運(yùn)算結(jié)果都是整型值。
  • 位運(yùn)算符:&/|/~/^/>>/<</>>>。位運(yùn)算相應(yīng)的操作數(shù)和運(yùn)算結(jié)果都是二進(jìn)制整數(shù),而邏輯運(yùn)算相應(yīng)的操作數(shù)和運(yùn)算結(jié)果都是邏輯值。
  • 右移是將一個(gè)二進(jìn)制數(shù)按指定位數(shù)向右移位,移掉的被丟棄,左邊移進(jìn)的部分補(bǔ)0(該數(shù)為正時(shí)),或者補(bǔ)1(該數(shù)為負(fù)時(shí))。整數(shù)在機(jī)器內(nèi)部采用補(bǔ)碼表示法,正數(shù)符號(hào)位為0,負(fù)數(shù)的符號(hào)位為1。
  • 0填充的右移>>>:不論正負(fù),左邊移進(jìn)的部分一律補(bǔ)0。
  • 賦值運(yùn)算符還可以與二元算術(shù)運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符組合成簡(jiǎn)捷運(yùn)算符,如 +=。
  • []是數(shù)組運(yùn)算符,其中數(shù)值為數(shù)組下標(biāo)。
  • ()用于改變表達(dá)式中運(yùn)算符的優(yōu)先級(jí)。
  • 操作數(shù)是字符串時(shí),+運(yùn)算符用來(lái)合并兩個(gè)字符串;當(dāng)一邊是字符串,一邊是數(shù)值時(shí),機(jī)器自動(dòng)將數(shù)值轉(zhuǎn)換為字符串。
  • 條件運(yùn)算符(?:)
  • 對(duì)象運(yùn)算符instanceof用來(lái)測(cè)試一個(gè)指定對(duì)象是否是指定類(或其子類)的實(shí)例。
  • 點(diǎn)運(yùn)算符(.)功能:一是引用類中成員;二是指示包的層次等級(jí)。
  • 用運(yùn)算符和圓括號(hào)把運(yùn)算對(duì)象連接起來(lái)的、符合JAVA語(yǔ)言語(yǔ)法規(guī)則的式子稱作表達(dá)式。
  • 表達(dá)式按照運(yùn)算符優(yōu)先級(jí)高的先運(yùn)算;同一優(yōu)先級(jí)的運(yùn)算符,按照運(yùn)算符的結(jié)合性(從左向右還是從右向左)的次序進(jìn)行運(yùn)算。大多數(shù)從左向右,少數(shù)(賦值、條件運(yùn)算等)是從右向左。
  • 表達(dá)式還可以是某個(gè)類的方法調(diào)用。
  • 流程控制語(yǔ)句用來(lái)控制程序的執(zhí)行流程:條件選擇,循環(huán),和轉(zhuǎn)移語(yǔ)句。
  • 基本結(jié)構(gòu):順序結(jié)構(gòu),分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
  • 一個(gè)以;結(jié)束的符號(hào)串稱為語(yǔ)句。
  • JAVA流程控制語(yǔ)句有:分支語(yǔ)句,if, switch;循環(huán)語(yǔ)句,for, while, do-while;轉(zhuǎn)移語(yǔ)句,break, continue。
  • 函數(shù)或類的成員函數(shù)運(yùn)行結(jié)束后需要返回原調(diào)用處,并可能需要帶回返回值的流程控制用return語(yǔ)句。
  • if實(shí)現(xiàn)二路分支,switch多路分支。
  • if-else中,else語(yǔ)句是任選的。
  • JAVA規(guī)定:else總是與最近的一個(gè)if語(yǔ)句匹配。
  • switch, case, default是關(guān)鍵字,default語(yǔ)句是可選的。
  • switch表達(dá)式和case常量值的類型可以是byte,short,int,long和char,但不能為boolean,并且要求兩者的數(shù)據(jù)類型必須一致。
  • switch語(yǔ)句中的break語(yǔ)句結(jié)束switch語(yǔ)句的執(zhí)行。
  • for語(yǔ)句中的循環(huán)初始化,循環(huán)條件判斷和循環(huán)變量修改都可以任選,即for (;;)。
  • 循環(huán)過程永不結(jié)束,為死循環(huán)。
  • do-while至少執(zhí)行一次循環(huán)體,while可以一次也不執(zhí)行。
  • break通常和switch或循環(huán)語(yǔ)句配合使用;continue通常和循環(huán)語(yǔ)句配合使用。
  • continue語(yǔ)句僅跳過當(dāng)前層中循環(huán)體的剩余語(yǔ)句。
  • 若函數(shù)為void類型,則return語(yǔ)句后沒有返回值;若為非void,則return語(yǔ)句后需要有返回值,且返回值的累心個(gè)必須和函數(shù)的類型一致。
  • 當(dāng)return語(yǔ)句不帶返回值,并且位于函數(shù)的最后時(shí),它可以省略。
  • 單行注釋以//開頭,至行尾;多行注釋以/*開頭,以*/結(jié)束;文件注釋用來(lái)自動(dòng)生成一個(gè)HTML文檔,為程序自動(dòng)提供網(wǎng)絡(luò)環(huán)境下的文檔說(shuō)明,以/**開頭,以*/結(jié)束。
  • 數(shù)組是連續(xù)內(nèi)存單元中一組名字和數(shù)據(jù)類型相同的數(shù)據(jù)元素的有限集合。數(shù)組中每個(gè)數(shù)據(jù)元素稱作數(shù)組元素。JAVA還可以構(gòu)造不規(guī)則數(shù)組。
  • JAVA使用一維數(shù)組分三步:定義一堆數(shù)組變量、為數(shù)組分配內(nèi)存單元和使用數(shù)組元素。
  • 數(shù)組定義后,系統(tǒng)將給數(shù)組標(biāo)識(shí)符分配一個(gè)內(nèi)存單元,用于指示數(shù)組在內(nèi)存中的實(shí)際存放位置。由于數(shù)組變量定義時(shí),數(shù)組元素本身在內(nèi)存中的實(shí)際存放位置還沒給出,所以此時(shí)該數(shù)組名的值為空NULL。
  • new運(yùn)算符:向系統(tǒng)申請(qǐng)指定數(shù)據(jù)類型所需的內(nèi)存單元空間。new運(yùn)算符返回所申請(qǐng)內(nèi)存單元的首地址。
  • JAVA規(guī)定,在數(shù)組分配內(nèi)存單元后,系統(tǒng)將自動(dòng)給每個(gè)數(shù)組元素賦初值,數(shù)值型為0,邏輯型為false,類類型為null。
  • 數(shù)組下標(biāo)由0開始。
  • 數(shù)組名是指向內(nèi)存中存放數(shù)組元素的一片連續(xù)內(nèi)存單元的首地址。
  • 數(shù)組名的類型是引用類型。引用類型是指該類型的標(biāo)識(shí)符所表示的是一片內(nèi)存連續(xù)地址的首地址。字符串名和數(shù)組名,所有對(duì)象名都是引用類型。
  • 數(shù)組的定義和為數(shù)組分配內(nèi)存空間兩步可以結(jié)合起來(lái)。數(shù)組元素的初始化賦值也可以結(jié)合一起。
  • JAVA提供了length成員變量返回?cái)?shù)組元素的個(gè)數(shù)。
  • 如果一維數(shù)組的每個(gè)數(shù)組元素都是一個(gè)一維數(shù)組,則構(gòu)成二維數(shù)組。若二維數(shù)組中的每個(gè)一維數(shù)組定義為不同的元素個(gè)數(shù),就構(gòu)成不規(guī)則的二維數(shù)組。
  • 字符串是N(N>=0)個(gè)字符組成的序列。JAVA中字符串用雙引號(hào)括起來(lái),字符個(gè)數(shù)稱作字符串長(zhǎng)度。
  • JAVA字符串變量用String來(lái)定義。String是JAVA API中定義的一個(gè)類。
  • 一對(duì)雙引號(hào)括起來(lái)的任何字符序列都是一個(gè)字符串常量。
  • 把一片連續(xù)內(nèi)存單元的首地址賦給字符串變量名,是讓字符串變量指向存放字符串的內(nèi)存單元的首地址。
  • JAVA提供了特殊的字符串運(yùn)算符+,把兩個(gè)字符串連接起來(lái)。
  • System.out.print()和Sytem.out.println()要求的參數(shù)是字符串或字符串表達(dá)式。

第三章  類和對(duì)象

  • 類是對(duì)具有相同屬性和方法的一組相似對(duì)象的抽象。對(duì)象是類的實(shí)例。包是JAVA組織和管理類的一種方法。
  • 類的封裝性、多態(tài)性和繼承性是OOP的重要特點(diǎn)。
  • 類的設(shè)計(jì)分為類聲明和類主體設(shè)計(jì)兩部分。
  • 接口名多于一個(gè)時(shí)用逗號(hào)分隔開。
  • 類聲明的修飾符分為訪問控制符和類型說(shuō)明符兩部分。一起使用時(shí),訪問控制符在前,類型說(shuō)明符在后。
  • 訪問控制符為public,被定義為公共類,能被任何類訪問。包中的類能互相訪問,不在一個(gè)包中的類不能直接訪問,必須用import導(dǎo)入到該包中。被導(dǎo)入的類必須是public。
  • 沒有public時(shí),即是默認(rèn)類(缺省類)。默認(rèn)類表示該類只能被同一個(gè)包中的類訪問,不能被其他包的類訪問。JAVA文件中可以有很多類,但最多只能有一個(gè)公共類,其他為默認(rèn)類。
  • 類說(shuō)明符為abstract時(shí),為抽象類。抽象類不能用來(lái)定義對(duì)象,通常被設(shè)計(jì)成一些具有類似成員變量和方法的子類的父類。
  • 類說(shuō)明符為final時(shí),為最終類,不能用來(lái)再派生子類。
  • 由于JAVA中所有方法必定屬于某個(gè)類,即方法一定是成員方法,所以成員方法簡(jiǎn)稱方法。
  • 聲明成員變量的修飾符有private, public和protected。private成員變量只能被該類本身訪問。不加任何修飾符,定義為默認(rèn)修飾符,該成員變量只能被該類本身和同一個(gè)包的類訪問。protected除可以被該類本身和同一個(gè)包的類訪問外,還可以被它的子類(包括同一個(gè)包中的子類和不同包中的子類)訪問。public可以被所有類訪問。
  • static指明是類成員變量,final指明該成員變量是常量,transient為臨時(shí)變量,很少使用。
  • 聲明成員方法的修飾符有private, public和protected。static指明該方法是一個(gè)類方法。
  • 方法聲明中必須給出方法名和方法的返回值類型,如果沒有返回值,用關(guān)鍵字void標(biāo)記。方法名后的()是必須的,即使參數(shù)列表為空,也要加上。
  • 方法體是方法的具體實(shí)現(xiàn)。
  • 定義在類中的都是成員變量,定義在方法內(nèi)的都是變量,還有定義在方法參數(shù)中的虛參變量。成員變量和變量的類型既可以是基本數(shù)據(jù)類型,也可以是已定義的類。
  • 專門用來(lái)進(jìn)行對(duì)象初始化的方法稱為構(gòu)造方法(構(gòu)造函數(shù))。一個(gè)類中至少要有一個(gè)構(gòu)造方法。
  • 構(gòu)造方法的名字必須與類名完全相同,沒有返回值,連表示空類型void的返回值都沒有。一般應(yīng)定義為public。
  • 創(chuàng)建對(duì)象時(shí),將調(diào)用類中的構(gòu)造方法為對(duì)象的成員變量進(jìn)行初始化賦值。
  • 一個(gè)類對(duì)應(yīng)一個(gè).CLASS文件,一個(gè)程序文件中可以有一個(gè)或多個(gè)類,但只允許一個(gè)類被定義成public。類中可以沒有main方法。但要運(yùn)行的類必須有main方法。程序就是從main方法開始執(zhí)行。
  • 對(duì)象和數(shù)組一樣也是引用類型,即對(duì)象定義后,系統(tǒng)將給對(duì)象標(biāo)識(shí)符分配一個(gè)內(nèi)存單元,用于存放實(shí)際對(duì)象在內(nèi)存中的存放位置。
  • new運(yùn)算符申請(qǐng)對(duì)象所需的內(nèi)存空間,返回所申請(qǐng)的內(nèi)存空間的首地址。賦值語(yǔ)句把new運(yùn)算符分配的連續(xù)地址的首地址賦給對(duì)象名。
  • 程序設(shè)計(jì)時(shí)最經(jīng)常使用的方法,是在定義對(duì)象的同時(shí)為對(duì)象分配內(nèi)存空間和進(jìn)行初始化賦值。
  • 對(duì)象可以像變量一樣賦值。不同的是,對(duì)象賦值不是把取值賦給另一個(gè)對(duì)象,而是讓另一個(gè)對(duì)象名存儲(chǔ)的對(duì)象的首地址和這個(gè)對(duì)象名存儲(chǔ)的對(duì)象的首地址相同,即對(duì)象的賦值是對(duì)象的首地址的賦值。
  • 對(duì)象也可以像變量一樣,作為方法的參數(shù)使用。不同的是,變量作為實(shí)參時(shí),系統(tǒng)把實(shí)參的數(shù)值復(fù)制給虛參;對(duì)象作為實(shí)參時(shí),系統(tǒng)把實(shí)參對(duì)象名(該對(duì)象必須已創(chuàng)建)指示的對(duì)象的首地址賦給虛參對(duì)象名。
  • 變量的內(nèi)存空間是系統(tǒng)在變量定義時(shí)自動(dòng)分配的;當(dāng)變量超出作用范圍時(shí),系統(tǒng)將自動(dòng)回收該變量的內(nèi)存空間。
  • 對(duì)象的內(nèi)存空間是用new創(chuàng)建的。對(duì)象也有作用范圍,超出作用范圍的對(duì)象(不再使用的對(duì)象)為垃圾對(duì)象。JAVA中,收集和釋放內(nèi)存由自動(dòng)垃圾回收線程負(fù)責(zé)。自動(dòng)垃圾回收線程在系統(tǒng)空閑時(shí)自動(dòng)運(yùn)行,這個(gè)線程監(jiān)視用戶程序中所以對(duì)象的有效作用范圍;當(dāng)某個(gè)對(duì)象超出其作用范圍時(shí),該線程就對(duì)這樣的對(duì)象做上垃圾對(duì)象標(biāo)識(shí),并在適當(dāng)?shù)臅r(shí)候一次性回收這些垃圾對(duì)象。
  • 類有實(shí)例成員變量與類成員變量。類成員變量也稱作靜態(tài)成員變量。
  • 類定義中沒用關(guān)鍵字static的成員變量就是實(shí)例成員變量,不同對(duì)象的實(shí)例成員變量的值不相同。
  • 用static的成員變量稱為類成員變量。一個(gè)類的所以對(duì)象共享該類的類成員變量,類成員變量可以用來(lái)保存和類相關(guān)的信息,或用來(lái)在一個(gè)類的對(duì)象間交流信息。
  • 類有實(shí)例方法與類方法。類方法稱作靜態(tài)方法。
  • 沒用static的方法就是實(shí)例方法。它只能通過對(duì)象來(lái)調(diào)用。實(shí)例方法可以訪問類成員變量和類變量。
  • 用static的方法是類方法。類方法通過類名來(lái)調(diào)用,也可以用對(duì)象,但類名調(diào)用類方法程序的可讀性更好。類方法只能訪問類變量,不能訪問實(shí)例變量。類防范主要用來(lái)處理和整個(gè)類相關(guān)的數(shù)據(jù)。
  • 類的各種方法(包括構(gòu)造方法)都允許重寫(重載)。方法重寫overloading,指一個(gè)方法名定義多個(gè)方法實(shí)現(xiàn)。不同的方法,其參數(shù)類型或參數(shù)個(gè)數(shù)要有所不同。這就是C++提到的函數(shù)簽名。
  • 方法重寫必須要么參數(shù)個(gè)數(shù)不同,要么參數(shù)類型不同,僅返回值類型的不同則是不允許的。
  • OOP一個(gè)特點(diǎn)是公共類資源可以重用。
  • 包package是JAVA提供的文件(公共類)的組織方式。一個(gè)包對(duì)應(yīng)一個(gè)文件夾,一個(gè)包可以有很多類文件。包中還可以有子包,稱為包等級(jí)。
  • JAVA可以把類文件存放在可以有包等級(jí)的不同的包中。
  • 同一個(gè)包中的文件名必須唯一,不同包中的文件名可以相同。
  • package指出該語(yǔ)句所在文件所有的類屬于哪個(gè)包。
  • 如果一個(gè)JAVA文件中有package語(yǔ)句,則必須寫在源文件的第一行。
  • 當(dāng)多個(gè)JAVA源文件中都有package語(yǔ)句,且包名相同時(shí),說(shuō)明這些類同屬一個(gè)包。
  • 包中存放的是編譯后的類文件.CLASS。通過import,可以導(dǎo)入某個(gè)包中的某個(gè)類,也可以導(dǎo)入某個(gè)包中的全部類,但不包含其子包。
  • Windows文件用\表示一條路徑下的子路徑,JAVA用.表示一個(gè)包的子包。
  • JDK規(guī)定:在一個(gè)樹形結(jié)構(gòu)的包中,上層包可以導(dǎo)入下層包,而下層包不可以導(dǎo)入上層包。下層包的類要使用上層包的類時(shí),要在類前面加上包名。
  • 圖形用戶界面設(shè)計(jì),需要導(dǎo)入系統(tǒng)包java.awt中的所有類;事件處理,需要導(dǎo)入事件處理包java.awt.event中的所有類。
  • 一個(gè)類被嵌套定義在另一個(gè)類中,稱為內(nèi)部類INNER CLASSES或內(nèi)隱類。包含內(nèi)部類的類稱為外部類。
  • 當(dāng)一個(gè)類只在某個(gè)類中使用,并且不允許除外部類外的其他類訪問時(shí),可考慮設(shè)計(jì)成內(nèi)部類。
  • 在外部類中,一般通過一個(gè)內(nèi)部類的對(duì)象來(lái)訪問內(nèi)部類的成員變量或方法;在內(nèi)部類中,可以直接訪問外部類的所有成員變量和方法。
  • 當(dāng)外部類引用內(nèi)部類時(shí),必須給出完整的名稱,且內(nèi)部類的類名不能與外部類的類名相同。
  • 內(nèi)部類主要用來(lái)實(shí)現(xiàn)接口。
  • JAVA是按類劃分程序模塊的,很好的實(shí)現(xiàn)了類的封裝性。
  • OOP中,保證模塊正確性的基本方法是類的封裝性。類的封裝性是指類把成員變量和方法封裝為一個(gè)整體,這就劃分了模塊的界限。
  • 保證模塊正確性的措施是由信息的隱藏性實(shí)現(xiàn)的。允許其他包程序訪問修改的成員變量/方法定義為public,只允許同一包中的其他類以及該類的子類訪問修改的成員變量/方法定義為protected,不允許其他類(內(nèi)部類除外)訪問修改的成員變量/方法定義為private。
  • 和其他OOP語(yǔ)言C++相比,JAVA增加了包的概念。這樣同一包中類之間的信息傳遞就比較方便。
1 package classAndObject; 2 3 public class MyMatrix 4 { 5 private int[][] table; 6 private int height; 7 private int width; 8 9 private void init(int m, int n) 10 { 11 table = new int[m][n]; 12 13 for (int i = 0; i < m; i ++) 14 for (int j = 0; j < n; j ++) 15 { 16 table[i][j] = (int)(Math.random() * 100); 17 } 18 } 19 20 public MyMatrix(int n) 21 { 22 height = n; 23 width = n; 24 this.init(height, width); 25 } 26 27 public MyMatrix(int m, int n) 28 { 29 height = m; 30 width = n; 31 this.init(height, width); 32 } 33 34 public int getHeight() 35 { 36 return height; 37 } 38 39 public int getWidth() 40 { 41 return width; 42 } 43 44 public int[][] getTable() 45 { 46 return table; 47 } 48 49 public MyMatrix add(MyMatrix b) 50 { 51 if (this.getHeight() != b.getHeight() && this.getWidth() != b.getWidth()) 52 { 53 System.out.println("the two matrix don't match"); 54 return null; 55 } 56 57 MyMatrix result = new MyMatrix(b.getHeight(), b.getWidth()); 58 for (int i = 0; i < b.getHeight(); i ++) 59 for (int j = 0; j < b.getWidth(); j ++) 60 { 61 result.table[i][j] = this.table[i][j] + b.table[i][j]; 62 } 63 64 return result; 65 } 66 67 public MyMatrix subtract(MyMatrix b) 68 { 69 if (this.getHeight() != b.getHeight() && this.getWidth() != b.getWidth()) 70 { 71 System.out.println("the two matrix don't match"); 72 return null; 73 } 74 75 MyMatrix result = new MyMatrix(b.getHeight(), b.getWidth()); 76 for (int i = 0; i < b.getHeight(); i ++) 77 for (int j = 0; j < b.getWidth(); j ++) 78 { 79 result.table[i][j] = this.table[i][j] - b.table[i][j]; 80 } 81 82 return result; 83 } 84 } 1 package classAndObject; 2 3 public class TestMyMatrix 4 { 5 public static void main(String[] args) 6 { 7 MyMatrix mm1 = new MyMatrix(4, 4); 8 MyMatrix mm2 = new MyMatrix(4, 4); 9 MyMatrix mm3 = new MyMatrix(4, 5); 10 MyMatrix mm4 = new MyMatrix(4, 5); 11 12 MyMatrix add_result = mm1.add(mm2); 13 int [][] add_table = add_result.getTable(); 14 MyMatrix subtract_result = mm3.subtract(mm4); 15 int [][] subtract_table = subtract_result.getTable(); 16 17 System.out.println("two matrix add result: "); 18 for (int i = 0; i < add_result.getHeight(); i ++) 19 { 20 for (int j = 0; j < add_result.getWidth(); j ++) 21 { 22 System.out.println(add_table[i][j] + " "); 23 } 24 System.out.println(); 25 } 26 27 System.out.println("two matrix subtract result: "); 28 for (int i = 0; i < subtract_result.getHeight(); i ++) 29 { 30 for (int j = 0; j < subtract_result.getWidth(); j ++) 31 { 32 System.out.println(subtract_table[i][j] + " "); 33 } 34 System.out.println(); 35 } 36 } 37 }

?第四章  類與繼承

  • 繼承就是一個(gè)新類擁有全部被繼承類的成員變量和方法,它使得大型應(yīng)用程序的維護(hù)和設(shè)計(jì)變得更加簡(jiǎn)單。
  • OOP的繼承機(jī)制提供了一種重復(fù)利用原有程序模塊資源的途徑。通過新類對(duì)原有類的繼承,既可以擴(kuò)充舊的程序模塊功能以適應(yīng)新用戶需求,也可以滿足新的應(yīng)用系統(tǒng)的功能要求。
  • 由繼承而得到的新類為子類,被繼承的類為父類超類。子類直接的上層父類為直接父類,簡(jiǎn)稱父類。一個(gè)子類只能有一個(gè)直接父類。
  • JAVA所有類都是由OBJECT類繼承派生而來(lái)。
  • 繼承有兩種:多繼承和單繼承。JAVA只支持單繼承,但接口使JAVA實(shí)際上實(shí)現(xiàn)了多繼承。
  • JAVA所有類構(gòu)成一顆類的層次樹結(jié)構(gòu)。
  • 定義類有兩種:不指明父類和顯示的指明父類。若定義時(shí)不指明父類,則其父類是OBJECT類。顯示指明父類,用extends。
  • 子類繼承原則:能繼承public和protected的成員變量方法,不能繼承private和默認(rèn)的成員變量方法。若子類聲明一個(gè)與父類同名的成員變量方法,則不能繼承,稱子類的成員變量隱藏了父類的同名成員變量,子類方法重寫了父類的同名方法。子類不能繼承父類的構(gòu)造方法。
  • JAVA中,每個(gè)對(duì)象都有對(duì)自身引用的訪問權(quán),為this引用。
  • super可以引用被子類隱藏的父類的成員變量方法,為super引用。經(jīng)常用在子類的構(gòu)造方法中。
  • 子類隱藏父類的成員變量,不提倡,很少見;父類的某個(gè)方法不適合子類時(shí),子類可以重定義它,為子類對(duì)父類方法的覆蓋overriding,這是OOP常用的設(shè)計(jì)方法。
  • 方法的重寫overloading和方法的覆蓋overriding是不同的概念,實(shí)現(xiàn)的功能也不同。
  • 子類覆蓋父類方法時(shí),參數(shù)個(gè)數(shù)和參數(shù)類型必須相同。
  • 子類對(duì)父類方法繼承有:完全繼承、完全覆蓋和修改繼承。
  • JAVA以及所有OOP語(yǔ)言中,對(duì)象訪問方法的匹配原則是:從對(duì)象定義的類開始,逐層向上匹配尋找對(duì)象要訪問的方法。
  • 繼承一方面可以大大簡(jiǎn)化程序設(shè)計(jì)的代碼,另一方面使得大型軟件的功能修改和功能擴(kuò)充較傳統(tǒng)的軟件設(shè)計(jì)方法容易許多。
  • 方法的多態(tài)polymorphism指若以父類定義對(duì)象,并動(dòng)態(tài)綁定對(duì)象,則該對(duì)象的方法隨綁定對(duì)象不同而不同。
  • 對(duì)象名和實(shí)際對(duì)象的這種聯(lián)系稱作對(duì)象的綁定binding。
  • 對(duì)象的動(dòng)態(tài)綁定,指定一位類樹上層的對(duì)象名,可以綁定為所定義層類以及下層類的對(duì)象。對(duì)象的動(dòng)態(tài)綁定和類的繼承相結(jié)合使對(duì)象的方法有多態(tài)性。
  • 方法的多態(tài)性支持Vector類的copyInto()方法用Object類參數(shù)(Object []anArrary)定義一次,就可以適合于所有類的對(duì)象。
  • 構(gòu)造方法不能被聲明為抽象的。
  • 不能有abstract static方法。
  • 任何包含抽象方法的類必須被聲明為抽象類。抽象類不能直接用來(lái)定義對(duì)象。抽象類主要用于定義為若干個(gè)功能類同的類的父類。
  • 抽象類一定是某個(gè)類或某些類的父類。若干個(gè)抽象類的子類要實(shí)現(xiàn)一些同名的方法。
  • 用final指明不能被子類覆蓋的方法,為最終方法。
  • 最終類可以保證一些關(guān)鍵類的所有方法,不會(huì)再以后的程序維護(hù)中,由于不經(jīng)意的定義子類而被修改;最終方法可以保證一些類的關(guān)鍵方法,不會(huì)在以后的程序維護(hù)中,由于不經(jīng)意的定義子類和覆蓋子類的方法而被修改。
  • abstract和final不能合用。習(xí)慣上,public放在abstract/final的前面。
  • 單繼承有結(jié)構(gòu)簡(jiǎn)單,層次清楚,易于管理,安全可靠的特點(diǎn)。多繼承則功能強(qiáng)大。
  • 接口和抽象類非常相似,都是只定義了類中的方法,沒有給出方法的實(shí)現(xiàn)。
  • 接口定義修飾符為缺省時(shí),只能被同一包中的方法訪問;public時(shí),接口被任何類的方法訪問。
  • 若接口定義為默認(rèn)型訪問權(quán)限,則接口中的成員變量全部隱含為final static型。意味著它們不能被實(shí)現(xiàn)接口方法的類改變,并且為默認(rèn)訪問權(quán)限。
  • 接口中定義的所有成員變量必須設(shè)置初值。
  • 接口定義為public時(shí),接口中的所有方法和成員變量全部隱含為public型。
  • 保存接口的文件名必須與接口名相同。一個(gè)文件可以包含若干個(gè)接口,但最多只能有一個(gè)public,其他必須為默認(rèn)。
  • 為了實(shí)現(xiàn)接口,類必須實(shí)現(xiàn)定義在接口中的所有方法。若要實(shí)現(xiàn)多個(gè)接口,則用逗號(hào)分隔開接口名。
  • JAVA API中定義了許多接口。
1 package classAndInherit; 2 3 class Shape 4 { 5 public void draw() 6 { 7 System.out.println("Draw a Shape"); 8 } 9 } 10 11 class Circle extends Shape 12 { 13 public void draw() 14 { 15 System.out.println("draw a Circle"); 16 } 17 } 18 19 class Ellipse extends Shape 20 { 21 public void draw() 22 { 23 System.out.println("draw a Ellipse"); 24 } 25 } 26 27 public class FInherit 28 { 29 public static void main(String args[]) 30 { 31 Shape s = new Shape(); 32 Shape c = new Circle(); 33 Shape e = new Ellipse(); 34 35 s.draw(); 36 c.draw(); 37 e.draw(); 38 } 39 } 1 package classAndInherit; 2 3 public class MyInter implements PrintMessage 4 { 5 private String[] v; 6 private int i; 7 8 public MyInter() 9 { 10 v = new String[3]; 11 i = 0; 12 this.putMessage("Hello world!"); 13 this.putMessage("Hello China!"); 14 this.putMessage("Hello XSYU!"); 15 } 16 17 public void putMessage(String str) 18 { 19 v[i ++] = str; 20 } 21 22 @Override 23 public void printAllMessage() 24 { 25 for (int k = 0; k < v.length; k ++) 26 { 27 System.out.println(v[k]); 28 } 29 } 30 31 @Override 32 public void printLastMessage() 33 { 34 System.out.println(v[v.length - 1]); 35 } 36 37 @Override 38 public void printFirstMessage() 39 { 40 System.out.println(v[0]); 41 } 42 43 public static void main(String[] args) 44 { 45 MyInter mi = new MyInter(); 46 System.out.println("print all messages"); 47 mi.printAllMessage(); 48 System.out.println("print the first messages"); 49 mi.printFirstMessage(); 50 System.out.println("print the last messages"); 51 mi.printLastMessage(); 52 } 53 }

?第五章  JAVA API基礎(chǔ)

  • JAVA語(yǔ)言的內(nèi)核非常小,僅包含基本數(shù)據(jù)類型和語(yǔ)句,強(qiáng)大功能主要體現(xiàn)在JAVA完備豐富、功能強(qiáng)大的JAVA API上。
  • JAVA API(JAVA APPLICATION PROGRAMMING INTERFACE, JAVA應(yīng)用程序接口),是JAVA提供的組織成包結(jié)構(gòu)的許多類和接口的集合。
  • JAVA API包含在JDK中。
  • JAVA API語(yǔ)言包java.lang,包括Object類、Class類、Runtime類、Float類、String類和Math類;實(shí)用包java.util包括Arrays類、Vector類、Data類和Enumeration接口。
  • java.lang包是使用最頻繁的包。為了簡(jiǎn)化編程,系統(tǒng)固定的默認(rèn)導(dǎo)入java.lang包,所以使用它時(shí)不用import。
  • Object類是JAVA總所有類的根,在Object類中定義的成員變量和方法,在其他類中都可以使用。
  • 當(dāng)兩個(gè)值比較、對(duì)象或變量與值比較、兩個(gè)變量比較時(shí),使用==;當(dāng)兩個(gè)對(duì)象比較時(shí),使用Object.equal()方法。
  • System類提供了許多獲取或重新設(shè)置系統(tǒng)資源的靜態(tài)方法。
  • System類中定義了三個(gè)和輸入輸出流有關(guān)的靜態(tài)成員變量in, out和err。
1 package javaAPI; 2 3 public class SystemTest 4 { 5 public static void main(String[] args) 6 { 7 System.out.println("java.version: " + System.getProperty("java.version")); 8 9 System.out.println("java.vm.version: " + System.getProperty("java.vm.version")); 10 11 System.out.println("java.class.path: " + System.getProperty("java.class.path")); 12 13 System.out.println("os.version: " + System.getProperty("os.version")); 14 15 System.out.println("user.name: " + System.getProperty("user.name")); 16 17 System.out.println("user.dir: " + System.getProperty("user.dir")); 18 19 System.out.println("user.home: " + System.getProperty("user.home")); 20 } 21 22 }
  • Class類的實(shí)例代表一個(gè)正在運(yùn)行的JAVA應(yīng)用程序的類或接口。JAVA的基本數(shù)據(jù)類型,數(shù)組和關(guān)鍵字void都是由Class對(duì)象來(lái)表達(dá)。
  • Class類沒有公共的構(gòu)造方法,Class對(duì)象由Java虛擬機(jī)自動(dòng)構(gòu)造。
  • Class類的forName()方法可用于安裝驅(qū)動(dòng)程序。
  • 每個(gè)JAVA應(yīng)用程序都有一個(gè)Runtime類的實(shí)例,從而允許應(yīng)用程序與其運(yùn)行的環(huán)境進(jìn)行交互。可利用Runtime類直接訪問運(yùn)行時(shí)環(huán)境資源。
1 package javaAPI; 2 3 public class RuntimeTest 4 { 5 public static void main(String[] args) 6 { 7 Runtime rtime = Runtime.getRuntime(); 8 long totalMemory = rtime.totalMemory() / 1024; 9 long freeMemory = rtime.freeMemory() / 1024; 10 11 System.out.println("totalMemory: " + totalMemory + "KB"); 12 System.out.println("freeMemory: " + freeMemory + "KB"); 13 } 14 }
  • 語(yǔ)言包中提供了8個(gè)數(shù)據(jù)類型包裝類的類,把JAVA語(yǔ)言的8個(gè)基本數(shù)據(jù)類型(byte/short/int/long/float/double/char/boolean)包裝成相應(yīng)的類:Byte, Short, Integer, Long, Float, Double, Character, Boolean。
  • Math類包含了一組基本的數(shù)學(xué)運(yùn)算的方法和常數(shù)。Math類中所有方法都定義為靜態(tài)的。還把E和PI定義為類的靜態(tài)成員變量。
  • Math類是最終類final,所有不能從Math類中派生其他的新類。
  • random()方法非常有用。把random()的返回值乘上一個(gè)整數(shù),可以得到任意區(qū)間的double類型的隨機(jī)數(shù);若轉(zhuǎn)換成int類型,可以得到任意區(qū)間的int類型的隨機(jī)數(shù)。
  • java.util包主要包含集合框架、事件模型、日期和時(shí)間機(jī)制、國(guó)際化等的類和接口。
  • Arrays類中包含有數(shù)組操作的一些常用方法,如排序和查找。
  • 在使用binarySearch()方法時(shí),要求數(shù)組a中的元素已經(jīng)有序排列,否則返回值未定義。
  • Vector類稱作向量類,實(shí)現(xiàn)了動(dòng)態(tài)的數(shù)組,用于元素?cái)?shù)量變化的對(duì)象數(shù)組。Vector類也用從0開始的下標(biāo),但和數(shù)組不同的是,當(dāng)Vector對(duì)象創(chuàng)建后,數(shù)組的元素個(gè)數(shù)會(huì)隨著Vector對(duì)象元素個(gè)數(shù)的增大和縮小變化。
  • Date類提供了獲取當(dāng)前精確到毫秒時(shí)間的方法,并提供許多方法截取當(dāng)前時(shí)間的年月日等數(shù)值。
  • Calendar類定義了許多如YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, DAY_OF_WEEK等成員變量,get()方法可以獲取這些成員變量的值。
1 package javaAPI; 2 3 import java.util.*; 4 5 public class MyDate 6 { 7 public static void main(String[] args) 8 { 9 Date date = new Date(); 10 11 System.out.println(date); 12 13 Calendar now = Calendar.getInstance(); 14 int year = now.get(Calendar.YEAR); 15 int month = now.get(Calendar.MONTH) + 1; 16 int day = now.get(Calendar.DATE); 17 18 System.out.println(year + "-" + month + "-" + day); 19 20 int hour = now.get(Calendar.HOUR); 21 int minute = now.get(Calendar.MINUTE); 22 int second = now.get(Calendar.SECOND); 23 24 System.out.println(hour + ":" + minute + ":" + second); 25 26 int week = now.get(Calendar.DAY_OF_WEEK); 27 String str = "日一二三四五六"; 28 int i = week - 1; 29 30 System.out.println("星期" + str.substring(i, i + 1)); 31 } 32 }
  • Enumeration接口主要用于集合類對(duì)象的序列化。所謂對(duì)象是序列化,就是說(shuō)可以依次取出該對(duì)象中的元素。
  • 任何一個(gè)類,只要實(shí)現(xiàn)了Enumeration接口,其對(duì)象就是序列化的。
1 package javaAPI; 2 3 import java.util.*; 4 5 public class Exam5_7 6 { 7 public static void main(String[] args) 8 { 9 final int SIZE = 10; 10 int i; 11 int[] a = new int[SIZE]; 12 13 for (i = 0; i < a.length; i ++) 14 { 15 a[i] = (int)(Math.random() * 100); 16 } 17 18 System.out.println("Before sort: "); 19 for (i = 0; i < a.length; i ++) 20 { 21 System.out.println(a[i] + " "); 22 } 23 24 Arrays.sort(a); 25 26 System.out.println("\nAfter sort: "); 27 for (i = 0; i < a.length; i ++) 28 { 29 System.out.println(a[i] + " "); 30 } 31 } 32 } 1 package javaAPI; 2 3 import java.util.*; 4 5 public class Josephus 6 { 7 public static void main(String[] args) 8 { 9 int n = 5, s = 0, d = 2; 10 Vector v = new Vector(n); 11 12 for (int i = 0; i < n; i ++) 13 v.add(new Integer(i + 1)); 14 15 Enumeration e = v.elements(); 16 while (e.hasMoreElements()) 17 System.out.println(e.nextElement()); 18 19 int current = s - 1; 20 while (v.size() > 1) 21 { 22 System.out.println("Vector: "); 23 for (int i = 0; i < v.size(); i ++) 24 System.out.println(((Integer)v.get(i)).intValue() + " "); 25 26 int j = 0; 27 while (j < d) 28 { 29 current = (current + 1) % v.size(); 30 j ++; 31 } 32 33 System.out.println("\tcurrent = " + current + " "); 34 v.remove(current); 35 } 36 37 System.out.println("The survivor is " + ((Integer)v.get(0)).intValue()); 38 } 39 }

?第六章  圖形用戶界面

  • 圖形用戶界面是計(jì)算機(jī)程序和用戶交流的圖形接口。
  • 圖形用戶界面是由各種不同的組件按照一定的布局模式排列組成的。GUI中的組件一般包括菜單、按鈕、標(biāo)簽、文本編輯行等。同時(shí)與這些組件配合工作的還有一些相關(guān)的事件。
  • JAVA中,GUI所用到的類和接口都是有AWT ABSTRACT WINDOW TOOLKIT提供。AWT是JAVA API的一部分。
  • java.swing包可以根據(jù)換進(jìn)過來(lái)調(diào)整GUI的外觀和感覺,使得一個(gè)程序可以使用各種不同的環(huán)境。
  • Component類是一個(gè)抽象類,是AWT中所有圖形組件類的父類。
  • add方法可用于在任何組件類對(duì)象中添加任何組件類對(duì)象。
  • Container類主要用來(lái)防止其他組件,所以稱作容器。它繼承自Component類。容器類的派生子類有:框架Frame、面板Panel、窗口Window、對(duì)話框Dialog等。
  • Panel類是一個(gè)放置其他圖形組件(包括其他Panel)的容器。
  • Frame類是Window的子類,主要用來(lái)放置其他組件。Frame類提供了設(shè)置標(biāo)題、改變窗口大小等方法。
  • Frame類對(duì)象是一個(gè)可在Window中獨(dú)立運(yùn)行的窗口,而Panel類對(duì)象不能單獨(dú)運(yùn)行,只能放在容器中(可以放在Frame中,也可以嵌入另一個(gè)Panel中)。
  • Component類的子類除Container類外,還有Label標(biāo)簽類、Button按鈕類、TextField文本輸入行類、TextArea多行文本輸入?yún)^(qū)類、Checkbox復(fù)選框類、List列表類、Choice下拉列表類等。任何一個(gè)容器類對(duì)象本身也可以放置在任何一個(gè)容器類對(duì)象中。
  • Label類是用來(lái)顯示文本text的類。
  • TextField類用來(lái)創(chuàng)建允許用戶編輯的單行文本組件。TextField可以獲得焦點(diǎn),而Lable不能。所以TextField可編輯,而Label不可編輯。TextField一般用作程序的輸入。
  • TextArea類用來(lái)創(chuàng)建允許用戶編輯的多行文本輸入組件,組件中的字符串可設(shè)定為可編輯的或只讀的。TextArea類還提供水平或垂直的滾動(dòng)條。
  • FlowLayout布局管理器的功能是:在此框架中加入的組件將自上而下、自左而右安排放置。
1 package gUI; 2 3 import java.awt.*; 4 5 public class TestFrame extends Frame 6 { 7 public static void main(String[] args) 8 { 9 TestFrame f = new TestFrame(); 10 f.setTitle("My First Frame"); 11 f.setSize(260, 160); 12 f.setLayout(new FlowLayout()); 13 f.setLocation(0, 0); 14 f.setResizable(false); 15 16 Label lb1 = new Label(); 17 lb1.setAlignment(Label.LEFT); 18 lb1.setText("My First Label"); 19 f.add(lb1); 20 21 Button b1 = new Button("My First Button"); 22 f.add(b1); 23 24 TextField t = new TextField(); 25 t.setText("My First TextField"); 26 f.add(t); 27 28 TextArea t1 = new TextArea("My First TextArea", 3, 20); 29 t1.setEditable(false); 30 f.add(t1); 31 f.setVisible(true); 32 } 33 }
  • Checkbox類用來(lái)創(chuàng)建復(fù)選框組件。將幾個(gè)Checkbox對(duì)象組成一組需用到CheckboxGroup類。
  • 框架中組件的位置由setBounds方法來(lái)確定(不使用任何布局管理器)。
1 package gUI; 2 3 import java.awt.*; 4 5 public class TestCheckbox extends Frame 6 { 7 public static void main(String[] args) 8 { 9 TestCheckbox f = new TestCheckbox(); 10 f.setTitle("Test Checkbox"); 11 f.setSize(300, 200); 12 f.setLayout(null); 13 14 Checkbox checkbox1 = new Checkbox("Computer", true); 15 Checkbox checkbox2 = new Checkbox("Finance", true); 16 Checkbox checkbox3 = new Checkbox("Management", false); 17 18 checkbox1.setBounds(10, 30, 60, 20); 19 checkbox2.setBounds(10, 50, 60, 20); 20 checkbox3.setBounds(10, 70, 60, 20); 21 f.add(checkbox1); 22 f.add(checkbox2); 23 f.add(checkbox3); 24 25 CheckboxGroup zct = new CheckboxGroup(); 26 Checkbox c1 = new Checkbox("Maths", zct, false); 27 Checkbox c2 = new Checkbox("English", zct, true); 28 Checkbox c3 = new Checkbox("Arts", zct, false); 29 Checkbox c4 = new Checkbox("Physics", zct, false); 30 c4.setCheckboxGroup(zct); 31 c1.setBounds(150, 30, 60, 20); 32 c2.setBounds(150, 50, 60, 20); 33 c3.setBounds(150, 70, 60, 20); 34 c4.setBounds(150, 90, 60, 20); 35 f.add(c1); 36 f.add(c2); 37 f.add(c3); 38 f.add(c4); 39 f.setVisible(true); 40 } 41 }
  • List組件給用戶提供了一個(gè)滾動(dòng)的文本項(xiàng)清單,用戶可以選中其中一項(xiàng)或多項(xiàng)文本。
  • Choice是一個(gè)下拉式的數(shù)據(jù)選項(xiàng),當(dāng)前的選項(xiàng)會(huì)顯示在選中列表框中。
  • 列表只能顯示當(dāng)前選擇的項(xiàng)目,而下拉列表可以顯示多個(gè)項(xiàng)目。
1 package gUI; 2 3 import java.awt.*; 4 5 public class TestChoiceList extends Frame 6 { 7 public static void main(String[] args) 8 { 9 TestChoiceList f = new TestChoiceList(); 10 f.setTitle("Test ChoiceList"); 11 f.setSize(300, 200); 12 f.setLayout(new FlowLayout()); 13 14 List list1 = new List(); 15 list1.setMultipleMode(true); 16 list1.add("Liberty"); 17 list1.add("Maths"); 18 list1.add("Arts"); 19 list1.add("Physics"); 20 list1.add("KongFu"); 21 list1.select(2); 22 list1.select(4); 23 f.add(list1); 24 25 Choice choice1 = new Choice(); 26 choice1.add("University"); 27 choice1.add("Middle School"); 28 choice1.add("Primary School"); 29 choice1.add("Kindergarden"); 30 choice1.select(2); 31 f.add(choice1); 32 f.setVisible(true); 33 } 34 }
  • MenuComponent類直接繼承自O(shè)bject的菜單組件的基本類,它及其子類是專門用來(lái)創(chuàng)建菜單類組件。
  • MenuBar是放置菜單的容器。可以通過Frame類的setMenuBar()方法把MenuBar對(duì)象加入一個(gè)框架中。
  • Menu是菜單欄上放置的菜單。每個(gè)菜單由一些菜單項(xiàng)組成。
  • 所以菜單中的菜單項(xiàng)都是MenuItem類或者它的子類的對(duì)象。
1 package gUI; 2 3 import java.awt.*; 4 5 public class TestMenu extends Frame 6 { 7 public TestMenu() {} 8 9 public static void main(String[] args) 10 { 11 TestMenu frame1 = new TestMenu(); 12 frame1.setTitle("My Menu"); 13 frame1.setSize(200, 120); 14 15 MenuBar menubar1 = new MenuBar(); 16 Menu menu1 = new Menu("School"); 17 Menu menu2 = new Menu("Childcare"); 18 MenuItem menuitem1 = new MenuItem("University"); 19 MenuItem menuitem2 = new MenuItem("Middle School"); 20 MenuItem menuitem3 = new MenuItem("Primary School"); 21 MenuItem menuitem4 = new MenuItem("Kindergarden"); 22 MenuItem menuitem5 = new MenuItem("Childcare"); 23 menubar1.add(menu1); 24 menubar1.add(menu2); 25 menu1.add(menuitem1); 26 menu1.add(menuitem2); 27 menu1.addSeparator(); 28 menu1.add(menuitem3); 29 menu2.add(menuitem4); 30 menu2.add(menuitem5); 31 frame1.setMenuBar(menubar1); 32 frame1.setVisible(true); 33 } 34 }
  • 一般在這幾種情況下系統(tǒng)會(huì)調(diào)用paint()方法繪制圖形:當(dāng)一個(gè)組件第一次顯示時(shí);當(dāng)容器容器重新調(diào)整大小時(shí);當(dāng)容器從非作用窗口變?yōu)樽饔么翱跁r(shí)。
  • 當(dāng)程序運(yùn)行在較慢的平臺(tái)上或計(jì)算機(jī)較忙時(shí),應(yīng)該考慮指定在多長(zhǎng)時(shí)間內(nèi)必須執(zhí)行repaint()方法,否則就放棄。
  • AWT調(diào)用update()方法來(lái)響應(yīng)對(duì)repaint()方法的調(diào)用。調(diào)用update()或paint()之前,圖形的外觀將不會(huì)發(fā)生改變。update()更新圖形的步驟:先通過填充組件的背景色來(lái)清除該圖形,再設(shè)置圖形的顏色為該圖形的前景色,最后調(diào)用paint()方法完整的重新繪制該圖形。
  • Color類用來(lái)設(shè)置文本或圖形的顏色。
  • JAVA中顏色定義有兩種方法:Color類有很多表示顏色的常量;用RGB值設(shè)置,每種顏色的色值范圍在0~255之間,可以靈活的定義非標(biāo)準(zhǔn)色。
  • Font類用來(lái)定義文字的字體、風(fēng)格和大小等特性。
  • Graphics類用來(lái)繪制各種圖形和字符串。雖然Graphics類提供的方法是抽象方法,但編程時(shí)可以直接使用,因?yàn)橄到y(tǒng)內(nèi)部已經(jīng)實(shí)現(xiàn)了這些抽象方法。
  • 當(dāng)沒有設(shè)置顏色時(shí),組件會(huì)使用黑色(默認(rèn)色)。
  • main()方法中不需要調(diào)用paint()方法,但程序設(shè)計(jì)者需要重定義paint()方法來(lái)告訴系統(tǒng)需要繪制的圖形。
1 package gUI; 2 3 import java.awt.*; 4 5 public class TestGraphics extends Frame 6 { 7 public void paint(Graphics g) 8 { 9 int x, y, i = 0; 10 Font font = new Font("Serif", Font.ITALIC|Font.BOLD, 40); 11 12 g.setFont(font); 13 g.drawOval(60, 50, 80, 80); 14 g.setColor(Color.red); 15 g.fillOval(150, 50, 80, 80); 16 g.setColor(Color.pink); 17 g.drawOval(240, 50, 80, 80); 18 g.setColor(Color.green); 19 g.drawString("I love Java", 80, 260); 20 g.setColor(Color.blue); 21 for (i = 0; i < 20; i ++) 22 { 23 x = (int)(Math.random() * 300) + 30; 24 y = (int)(Math.random() * 200) + 130; 25 g.fillOval(x, y, 10, 10); 26 } 27 g.setColor(Color.orange); 28 y = 100; 29 for (i = 0; i < 40; i ++) 30 { 31 y += 5; 32 g.drawRect(30, 30, 320, y); 33 } 34 } 35 36 public static void main(String[] args) 37 { 38 TestGraphics f = new TestGraphics(); 39 f.setTitle("My First Graphics"); 40 f.setSize(400, 345); 41 f.setLocation(0, 0); 42 f.setVisible(true); 43 } 44 }
  • 組件在容器中的擺放方式為布局。JAVA中不使用坐標(biāo)這種絕對(duì)定位的方法,而是用布局管理器進(jìn)行相對(duì)定位。優(yōu)點(diǎn)是顯示界面能夠自動(dòng)適應(yīng)不同分辨率的屏幕。
  • FlowLayout布局管理器從左到右排列組件,一行放滿后,再?gòu)牡诙虚_始。它是容器類組件Panel的默認(rèn)布局管理器。當(dāng)容器大小發(fā)生變化時(shí),容器上組建的排放位置會(huì)發(fā)生變化,規(guī)律是組件的大小不變,但是相對(duì)位置會(huì)發(fā)生變化。
  • FlowLayout構(gòu)造方法后兩個(gè)參數(shù)的單位都是像素。
1 package gUI; 2 3 import java.awt.*; 4 5 public class TestFlowLayout extends Frame 6 { 7 public static void main(String[] args) 8 { 9 TestFlowLayout f = new TestFlowLayout(); 10 11 f.setTitle("My FlowLayout Manager"); 12 f.setSize(200, 120); 13 14 FlowLayout fl = new FlowLayout(); 15 fl.setHgap(10); 16 f.setLayout(fl); 17 f.add(new Button("OK")); 18 f.add(new Button("Cancel")); 19 f.add(new Button("Password")); 20 f.add(new Button("Reset")); 21 f.setVisible(true); 22 } 23 }
  • BorderLayout布局管理器按照東西南北中五個(gè)區(qū)域放置容器中的組件。它是容器類組件Window、Frame和Dialog等的默認(rèn)布局管理器。當(dāng)容器大小發(fā)生變化時(shí),規(guī)律是組件的相對(duì)位置不變,大小發(fā)生變化。
1 package gUI; 2 3 import java.awt.*; 4 5 public class TestBorderLayout extends Frame 6 { 7 public static void main(String[] args) 8 { 9 TestBorderLayout frame1 = new TestBorderLayout(); 10 11 frame1.setTitle("My BorderLayout"); 12 frame1.setSize(200, 200); 13 14 BorderLayout border = new BorderLayout(5, 10); 15 16 frame1.setLayout(border); 17 frame1.add(new Button("South"), BorderLayout.SOUTH); 18 frame1.add(new Button("West"), BorderLayout.WEST); 19 frame1.add(new Button("North"), BorderLayout.NORTH); 20 frame1.add(new Button("East"), BorderLayout.EAST); 21 frame1.add(new Button("Center"), BorderLayout.CENTER); 22 frame1.setVisible(true); 23 } 24 }
  • GridLayout布局管理器可以將容器分為若干個(gè)大小相等的矩形。
  • 對(duì)于復(fù)雜的布局,有時(shí)還需要用到容器Panel組件。
  • 事件源是產(chǎn)生事件的圖形組件。用戶對(duì)事件源進(jìn)行的操作叫做事件。事件的屬性信息包含事件的名稱、來(lái)源、產(chǎn)生時(shí)間等。
  • 事件處理過程包括事件的接收和事件的處理兩部分。事件的接收由系統(tǒng)負(fù)責(zé)。
  • 事件發(fā)生后,系統(tǒng)把時(shí)間傳遞給事件處理程序的方式稱為事件模型。
  • 層次事件模型首先傳遞給直接相關(guān)的組件;若組件沒對(duì)事件進(jìn)行處理,則向上傳遞給組件所在的容器;若容器沒處理,則繼續(xù)向上傳遞給容器所在的容器。直至頂層容器。
  • 委托事件模型中事件的傳遞由事件監(jiān)聽器進(jìn)行管理。任何事件處理程序首先向事件監(jiān)聽器注冊(cè),系統(tǒng)監(jiān)聽到后就委托給事件監(jiān)聽器。事件監(jiān)聽器通過分析時(shí)間的屬性信息,把事件交給已注冊(cè)的相應(yīng)事件處理器來(lái)處理。JDK1.1以后的版本都采用這個(gè)。
  • ActionListener接口中只定義了一個(gè)處理按鈕單擊事件的方法actionPerformed()。
  • JAVA中的組件就是事件源,它可以產(chǎn)生一個(gè)或多個(gè)事件。java.awt.AWTEvent類是所有事件類的父類,所以事件類都由它派生出來(lái)。
  • 一個(gè)事件類對(duì)應(yīng)一個(gè)事件監(jiān)聽器接口,命名方法是:去掉事件類后邊的Event,換成Listener。不同的監(jiān)聽器接口中定義了不同的處理方法。
  • 一個(gè)事件處理器創(chuàng)建了以后,需要在程序中用語(yǔ)句來(lái)注冊(cè)。addListener()是Component類提供的方法。
  • 與鍵盤事件KeyEvent相對(duì)應(yīng)的鍵盤事件監(jiān)聽器接口是KeyListener。當(dāng)鍵盤剛按下去時(shí),調(diào)用keyPressed()方法;鍵盤抬起來(lái)時(shí),調(diào)用keyReleased()方法;鍵盤單擊一次時(shí),調(diào)用keyTyped()方法。
  • 程序可以有幾種方式實(shí)現(xiàn)事件監(jiān)聽器接口中方法:類定義時(shí)加上implements,然后再類中實(shí)現(xiàn)接口中的方法;用內(nèi)部類定義和實(shí)現(xiàn)事件監(jiān)聽器接口。
  • 若暫時(shí)不處理某個(gè)窗口操作(事件),可以用一個(gè)空語(yǔ)句實(shí)現(xiàn)相應(yīng)的方法。
  • 若要實(shí)現(xiàn)某個(gè)事件監(jiān)聽器接口,就必須實(shí)現(xiàn)該事件監(jiān)聽器接口中所以的方法,即使有些方法為空,也必須實(shí)現(xiàn)。為了簡(jiǎn)化設(shè)計(jì),JAVA為一些事件的Listener(監(jiān)聽器)接口提供了事件適配器Adapter類。WindowAdapter類實(shí)現(xiàn)了WindowListener接口的所有方法(內(nèi)容為空)。需要實(shí)現(xiàn)WindowListener接口時(shí),只需要繼承WindowAdapter類,并覆蓋相應(yīng)方法即可。
1 package gUI; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 6 public class PhoneBook extends WindowAdapter implements ActionListener, ItemListener 7 { 8 Frame f; 9 TextField tf1, tf2; 10 List l; 11 Button b1, b2; 12 13 public PhoneBook() 14 { 15 f = new Frame("PhoneBook"); 16 f.setSize(640, 480); 17 18 Panel p = new Panel(); 19 p.add(new Label("Name")); 20 tf1 = new TextField(10); 21 p.add(tf1); 22 p.add(new Label("PhoneNumber")); 23 tf2 = new TextField(20); 24 p.add(tf2); 25 b1 = new Button("Add"); 26 b2 = new Button("Delete"); 27 b1.addActionListener(this); 28 b2.addActionListener(this); 29 p.add(b1); 30 p.add(b2); 31 f.add(p, "North"); 32 33 l = new List(); 34 l.add("Name PhoneNumber"); 35 l.addItemListener(this); 36 f.add(l); 37 38 f.setVisible(true); 39 f.addWindowListener(this); 40 } 41 42 public void actionPerformed(ActionEvent e) 43 { 44 if (e.getSource() == b1) 45 l.add(tf1.getText() + " " + tf2.getText()); 46 47 if (e.getSource() == b2) 48 l.remove(l.getSelectedIndex()); 49 } 50 51 public void itemStateChanged(ItemEvent e) 52 { 53 String str = l.getSelectedItem(); 54 int i = str.indexOf(' '); 55 tf1.setText(str.substring(0, i)); 56 str = str.substring(i); 57 str = str.trim(); 58 tf2.setText(str); 59 } 60 61 public void windowClosing(WindowEvent e) 62 { 63 System.exit(0); 64 } 65 66 public static void main(String[] args) 67 { 68 new PhoneBook(); 69 } 70 } 1 package gUI; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 6 public class RGBColor extends WindowAdapter implements TextListener 7 { 8 Frame f; 9 TextField tf1, tf2, tf3; 10 Panel p2; 11 12 public RGBColor() 13 { 14 f = new Frame("Mixed color"); 15 f.setSize(500, 200); 16 17 Panel p1 = new Panel(); 18 p2 = new Panel(); 19 f.add(p1, "North"); 20 f.add(p2); 21 p1.add(new Label("Red")); 22 tf1 = new TextField("255", 10); 23 p1.add(tf1); 24 25 p1.add(new Label("Green")); 26 tf2 = new TextField("0", 10); 27 p1.add(tf2); 28 29 p1.add(new Label("Blue")); 30 tf3 = new TextField("0", 10); 31 p1.add(tf3); 32 33 tf1.addTextListener(this); 34 tf2.addTextListener(this); 35 tf3.addTextListener(this); 36 37 p2.setBackground(new Color(255, 0, 0)); 38 39 f.setVisible(true); 40 f.addWindowListener(this); 41 } 42 43 public void textValueChanged(TextEvent e) 44 { 45 int r = (new Integer(tf1.getText()).intValue()); 46 int g = (new Integer(tf2.getText()).intValue()); 47 int b = (new Integer(tf3.getText()).intValue()); 48 49 if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) 50 p2.setBackground(new Color(r, g, b)); 51 } 52 53 public void windownClosing(WindowEvent e) 54 { 55 System.exit(0); 56 } 57 58 public static void main(String[] args) 59 { 60 new RGBColor(); 61 } 62 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/pegasus923/p/4006500.html

總結(jié)

以上是生活随笔為你收集整理的学习笔记之Java程序设计实用教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

婷婷六月丁香激情 | 国产69久久精品成人看 | 欧美在线你懂的 | 欧美专区日韩专区 | 成人久久精品视频 | 欧美日韩大片在线观看 | 亚洲爱视频 | 久久看片网 | 99精品久久久久久久 | 九九热免费在线视频 | 黄色日视频 | 国产成人精品一区二区在线观看 | 在线观看日韩国产 | 一级淫片a | 国产色综合天天综合网 | 免费三级影片 | 香蕉久草| 在线日韩视频 | 草久久精品 | 91热这里只有精品 | 亚洲精品小视频在线观看 | 婷婷色网 | 精品久久免费 | 日韩在线免费高清视频 | 国产精品视频免费观看 | 91丨九色丨国产在线 | 日韩精品国产一区 | 亚洲极色 | 黄色资源网站 | 天天综合人人 | 在线日本看片免费人成视久网 | 免费观看午夜视频 | 久久夜靖品 | 国产精品中文 | www.久久免费视频 | 婷婷色中文字幕 | 日韩电影精品 | 人人爽人人搞 | 一区二区在线电影 | 天天色天 | 中文字幕在线播放一区 | 国产精品久久久久久久久久ktv | 国产成人一区二区三区在线观看 | 在线电影 一区 | 国产免费观看高清完整版 | 中文字幕高清在线 | 日本中文字幕免费观看 | 97av超碰| 成人黄色电影在线观看 | 91成人蝌蚪 | av一本久道久久波多野结衣 | 日韩欧美在线高清 | 久久99精品久久久久久久久久久久 | 午夜影院在线观看18 | 亚洲午夜精品久久久久久久久久久久 | 国产男女无遮挡猛进猛出在线观看 | 日韩xxxxxxxxx| 国产精品久久久久久久久久东京 | 狠狠操狠狠干天天操 | 97看片| 亚洲欧美精品一区二区 | 综合色播| 97在线资源 | 亚洲激情 欧美激情 | 天天综合天天做天天综合 | 婷婷去俺也去六月色 | 我爱av激情网 | 日本中文字幕电影在线免费观看 | 这里只有精品视频在线 | 蜜桃av人人夜夜澡人人爽 | 日韩国产在线观看 | 91精品国自产在线观看欧美 | 91麻豆看国产在线紧急地址 | 又粗又长又大又爽又黄少妇毛片 | 国产精品福利在线播放 | 天天插天天色 | 国产成人亚洲精品自产在线 | 麻豆手机在线 | 日韩一区在线免费观看 | 18国产精品福利片久久婷 | 在线观看色网 | 丁香花中文在线免费观看 | 日韩1级片 | 二区视频在线 | 蜜桃视频成人在线观看 | 97在线观看免费高清完整版在线观看 | 日韩欧美网址 | 在线成人一区二区 | 国模吧一区 | 久久不卡av| 亚洲欧洲精品视频 | 欧美黄色软件 | 97精品国产一二三产区 | 久久噜噜少妇网站 | 99自拍视频在线观看 | 伊人网站 | 欧美性色综合 | 成在线播放 | 九九国产精品视频 | 丁香 婷婷 激情 | 国产不卡精品视频 | 91一区啪爱嗯打偷拍欧美 | 亚洲男模gay裸体gay | 国产精品v欧美精品 | 午夜91视频 | 中文字幕在线观看网 | 国产区精品区 | 国产在线a视频 | 欧洲精品视频一区 | 在线日韩中文字幕 | 激情久久影院 | www蜜桃视频 | 亚洲闷骚少妇在线观看网站 | 在线观看 亚洲 | 国产1区2区 | 日韩午夜电影院 | 五月婷婷视频在线观看 | 天天干天天摸天天操 | 天天看天天干 | 最近字幕在线观看第一季 | 久久久九九 | 500部大龄熟乱视频使用方法 | 亚洲美女在线国产 | 91在线你懂的 | 亚洲视频网站在线观看 | 日韩毛片一区 | 国产成人免费 | 天天操天天舔天天干 | 九色91av| 久久99九九99精品 | 国产一级片直播 | www.午夜视频 | 亚洲欧美综合精品久久成人 | 国产精品电影一区二区 | 国产精品第一视频 | 青草视频在线播放 | 超碰97国产在线 | 日本一区二区三区免费看 | 国产剧情在线一区 | 久草国产精品 | 日韩在线观看高清 | 亚洲色图 校园春色 | 天堂v中文 | 欧美精品一区二区免费 | 精品免费99久久 | 亚洲午夜精品电影 | 色婷婷在线观看视频 | 伊人欧美| 欧美日本高清视频 | 亚洲一区精品人人爽人人躁 | 国产成人久久精品 | 九九热免费在线视频 | 亚洲精品一区二区久 | 96视频在线| 精品一区二区免费 | 久久香蕉电影 | 欧美日韩视频在线 | 麻豆高清免费国产一区 | 在线 视频 亚洲 | www.久草视频 | av成人亚洲 | www色av| 国产视频亚洲视频 | 成人黄色在线观看视频 | 91精品国产成 | 日本在线视频网址 | 福利av影院| av一区二区在线观看中文字幕 | 成人av在线播放网站 | 免费网址在线播放 | 日韩在线观看中文字幕 | 一本一道久久a久久精品 | 久久久久久久久久伊人 | 天天操欧美 | 国产96精品 | 久久久久免费观看 | 欧美一级黄色网 | 成年人在线免费视频观看 | 男女激情免费网站 | 天天搞天天干天天色 | 最新久久久 | 日韩美女免费线视频 | 探花国产在线 | 色婷婷国产在线 | 91成人区| 成人a级黄色片 | 成人aⅴ视频 | 精品久久九九 | 国产免费精彩视频 | 婷婷电影网| 久久久久久久久国产 | 欧美日韩一区二区三区在线免费观看 | 色综合久久久网 | 丁香色婷婷 | 中文字幕成人在线观看 | 97视频播放 | 中文字幕中文字幕 | 亚洲精品在线观看视频 | 久久人人爽人人爽人人 | 人人插超碰 | 91麻豆精品国产91久久久久久 | 奇米影视777影音先锋 | 国产精品视频免费看 | 国产一区精品在线观看 | 日本成人黄色片 | 免费看的黄网站软件 | 免费a现在观看 | 97网| 成人av在线影视 | 超碰97人人在线 | 国产99精品在线观看 | 最近久乱中文字幕 | 少妇性xxx | 久草在线手机观看 | 深爱综合网 | 亚洲一区网 | 国产精品麻豆欧美日韩ww | 在线观看精品一区 | 日韩成人在线一区二区 | 精品欧美一区二区三区久久久 | 黄色网址中文字幕 | 日日夜夜骑| 国产成人av在线 | 国产直播av | 久久色在线观看 | 亚洲国产高清在线观看视频 | 国产精品久久久久久久久久新婚 | 国产一区视频在线播放 | 天天操人人要 | 天天干天天玩天天操 | 99热免费在线 | 亚洲精品视频在线观看免费视频 | av高清影院 | 在线观看成年人 | 久青草视频在线观看 | 亚洲一区二区视频 | a级成人毛片 | 久久这里只有精品首页 | 久久久久久久av | 国产一区二区视频在线 | 高清久久久久久 | 91av视频播放 | 狠狠狠狠狠狠狠狠干 | 免费在线观看一区二区三区 | 久久久久久久久久久影院 | 超碰97中文 | 亚洲精品动漫久久久久 | 久久韩国免费视频 | 国产黄色片网站 | 欧美成人一区二区 | 91系列在线观看 | 在线观看黄网站 | 欧美日韩国产在线一区 | 中文字幕资源网 国产 | 51精品国自产在线 | 久久r精品 | 亚洲精品动漫在线 | 色偷偷男人的天堂av | 亚洲欧洲视频 | 69国产在线观看 | 91亚洲影院 | 91九色最新地址 | 17婷婷久久www | av片中文| 91自拍视频在线观看 | 九九视频网站 | 99久久婷婷国产综合亚洲 | 亚洲一区视频在线播放 | 在线黄色免费av | 国产高清综合 | 91精品久久香蕉国产线看观看 | 久草热久草视频 | 精品久久久久久综合日本 | 久久久久免费精品视频 | 国产精品永久免费在线 | 99久热在线精品视频成人一区 | 在线观看播放av | 日日弄天天弄美女bbbb | 欧美福利在线播放 | 日韩在线精品视频 | 色就色,综合激情 | 天天干天天干天天 | 欧美综合色在线图区 | 毛片网站免费 | 天天插日日插 | 国产成人高清 | 免费观看一级一片 | 日日夜夜天天干 | 成人av影视在线 | 免费看的黄色片 | 激情综合久久 | 久久久精品二区 | 国产对白av| 久久久久女人精品毛片九一 | 人人干97 | 激情图片久久 | 亚洲精品视频中文字幕 | 国产一区二区网址 | 久久亚洲人 | 亚洲精品乱码久久久久v最新版 | 色婷婷免费视频 | 在线看日韩| 精品久久久一区二区 | 欧美a√在线 | 亚洲激情六月 | 国产精品99久久久久久小说 | 日韩美女免费线视频 | 免费在线电影网址大全 | 久草久草在线观看 | 国产精品视频地址 | 国产福利在线免费 | 人人狠狠综合久久亚洲婷 | 中文字幕高清 | 超碰97在线看 | 国产高清视频在线观看 | 91麻豆精品一区二区三区 | 久热免费在线观看 | 日韩黄色一级电影 | 一区二区三区国产欧美 | 国产视频一区在线播放 | 综合久久久久久久 | 成人一区二区三区中文字幕 | 日本中文字幕系列 | 久草在线视频首页 | 午夜99 | 一区二区视频在线观看免费 | 国产精品午夜在线观看 | 天天操天天色天天射 | 精品国产精品国产偷麻豆 | 综合网色| 丁香婷婷射 | 日韩精品中文字幕在线观看 | 色先锋av资源中文字幕 | 精品国产一区二区三区久久影院 | 婷婷午夜天 | 日韩电影在线一区二区 | 香蕉视频最新网址 | 天天综合操 | 久久艹99 | 99久久久久免费精品国产 | 天天干夜夜干 | 五月天狠狠操 | 亚洲免费成人av电影 | 91九色免费视频 | 成人av电影免费在线播放 | 久久国产精品精品国产色婷婷 | 久久亚洲区 | 欧美日韩国产一区二区三区 | 成人h电影| 精品久久一 | 青青看片 | 九色精品免费永久在线 | 婷婷免费在线视频 | 国产精品一区二区久久精品爱微奶 | 日本不卡视频 | 成人av免费在线观看 | 伊人国产在线观看 | 亚洲激情在线播放 | 亚洲国产成人精品在线观看 | 在线观看国产区 | 成人免费一区二区三区在线观看 | 久久99热这里只有精品国产 | 精品国产一区二区三区久久久蜜月 | 国模一二三区 | 青青啪| 顶级欧美色妇4khd | 日日夜夜天天久久 | 久久国精品 | 国产精品永久免费视频 | 亚洲天天| 九九视频在线播放 | 亚洲精品国产精品国自产观看浪潮 | 久久九九网站 | 天天精品视频 | 亚洲国产欧美一区二区三区丁香婷 | 久久久精品高清 | 亚洲精品高清视频在线观看 | 人成午夜视频 | 亚洲另类人人澡 | 亚洲国产视频在线 | 精品久久久久久综合 | 尤物九九久久国产精品的分类 | 亚洲一区二区视频在线 | 国内丰满少妇猛烈精品播放 | 色网站在线看 | 欧美在线视频日韩 | 成人免费在线看片 | 亚洲专区一二三 | 国产精品女同一区二区三区久久夜 | 天天艹天天爽 | 亚洲欧美国产精品久久久久 | 久久最新网址 | 91精品久久久久久综合乱菊 | 在线免费观看羞羞视频 | 91丨九色丨国产在线 | japanesexxxhd奶水| 日本一区二区三区视频在线播放 | 极品国产91在线网站 | 天堂av免费 | 亚洲欧洲精品在线 | 久久夜色网 | 天天色天天爱天天射综合 | 狠狠躁日日躁夜夜躁av | av日韩在线网站 | 国产精品免费一区二区 | 深夜激情影院 | 91免费网站在线观看 | 深夜免费小视频 | 亚洲日韩欧美一区二区在线 | 久久国产精品第一页 | 国产成人一区二区三区电影 | 最新精品国产 | 国产永久免费 | 日日日干| 色天天综合久久久久综合片 | 久久久久久久久久久久影院 | 日韩av视屏 | 国产精品中文字幕在线播放 | 91免费高清 | 最近中文字幕高清字幕免费mv | 一区 二区电影免费在线观看 | 久久精品老司机 | 黄色中文字幕在线 | 国产精品黄网站在线观看 | 国产69久久精品成人看 | 色丁香婷婷 | 久久久伦理 | 久久精品高清视频 | 日日干综合 | 日韩免费小视频 | 中文字幕制服丝袜av久久 | 麻豆影视网 | 狠狠色香婷婷久久亚洲精品 | 国产视频高清 | 国产一区二区三区网站 | 精品欧美一区二区三区久久久 | 91精品91| 91九色国产在线 | 国产专区视频 | 99久久综合国产精品二区 | 最近字幕在线观看第一季 | 黄色福利视频网站 | 香蕉视频在线免费看 | 在线激情影院一区 | 国产亚洲精品久久久久秋 | 狂野欧美激情性xxxx | av一本久道久久波多野结衣 | 国产成人久久久久 | 97视频免费观看2区 亚洲视屏 | 久久综合五月天婷婷伊人 | 一区二区三区高清在线 | 免费av黄色 | 区一区二在线 | 久久精品免费电影 | 国产亚洲精品久久网站 | 国产精品2020 | 成+人+色综合| 国产麻豆精品传媒av国产下载 | 国产精品99精品久久免费 | 婷婷av网站 | 久久成人国产精品一区二区 | 亚洲va欧洲va国产va不卡 | 亚洲激情在线观看 | 久久久久久久久久电影 | 狠狠网| 日韩免费视频线观看 | 国产综合视频在线观看 | 99一区二区三区 | 岛国av在线不卡 | 精品综合久久久 | 久久视频精品在线观看 | 国产一级做a爱片久久毛片a | 亚洲一区二区视频 | 中文国产成人精品久久一 | 99久久精品免费看国产 | 日韩av区| 九草在线观看 | 17videosex性欧美 | 精品久久久久久久久久久久久 | 亚洲欧美在线观看视频 | 久草在线视频首页 | 国产大陆亚洲精品国产 | 国产精品中文 | 国产91精品在线播放 | 欧美另类xxxx | 午夜91视频 | 99r在线视频 | 国产精品手机播放 | 免费看短 | 高清久久久 | 91免费网 | 久久一精品 | 精品视频国产 | 亚洲精品美女免费 | 国产一二区视频 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 色偷偷88888欧美精品久久久 | 91精品久久久久久久久久久久久 | 国产免费亚洲 | 成人久久综合 | 久久综合导航 | 国产aaa大片| 在线观看亚洲电影 | 成年人app网址 | 免费高清在线一区 | 狠狠操91 | 新版资源中文在线观看 | 免费精品久久久 | 欧洲精品在线视频 | 黄色大片中国 | 日韩性久久 | av免费福利 | 又湿又紧又大又爽a视频国产 | 久久影院亚洲 | 久久精品中文 | 亚洲精品男女 | 处女av在线 | 午夜影院一级片 | 韩国精品一区二区三区六区色诱 | 91探花国产综合在线精品 | 亚洲精品在线二区 | 久久久综合香蕉尹人综合网 | 亚洲精品成人免费 | 操天天操 | 精品视频一区在线 | 日日躁你夜夜躁你av蜜 | 亚洲欧美精品在线 | 人人澡超碰碰97碰碰碰软件 | 免费国产黄线在线观看视频 | 精品国产_亚洲人成在线 | 91麻豆精品国产91久久久久久 | 色婷婷天天干 | 亚洲精品久久久蜜桃 | 91精品久久久久久久久久久久久 | 91在线精品播放 | 国产精品免费不 | 日本 在线 视频 中文 有码 | 四虎影视成人 | 美女国产 | 又黄又爽免费视频 | 999电影免费在线观看 | 日韩视频一区二区在线 | 国产精品一区二区免费在线观看 | www.福利视频| 成人啪啪18免费游戏链接 | 黄色av电影在线观看 | 国产亚洲日 | 精品一区精品二区高清 | 日韩av一区二区三区四区 | 免费av网址大全 | 婷婷新五月 | 天堂av色婷婷一区二区三区 | 亚洲午夜精品电影 | 精品视频在线免费观看 | 欧美大片在线看免费观看 | 成人av免费看 | 日韩精品一区二区三区免费观看视频 | 操处女逼| 精品999| 天天躁日日躁狠狠躁av中文 | 日韩色在线观看 | 国产精品videossex国产高清 | 高清有码中文字幕 | 久爱精品在线 | 亚洲视频免费在线观看 | 成人动漫视频在线 | 亚洲精品在线国产 | 一二三四精品 | 在线免费视频你懂的 | 激情视频区 | 精品国产一区二区三区男人吃奶 | 伊人热| 日韩一级理论片 | 五月婷婷在线观看视频 | 91精品推荐 | 亚洲天天综合网 | 免费男女羞羞的视频网站中文字幕 | 99久久久久国产精品免费 | 亚洲国产成人精品在线 | 国色天香永久免费 | 精品久久一| 草久视频在线观看 | 天天干,天天射,天天操,天天摸 | 在线免费三级 | 中文字幕不卡在线88 | 韩日在线一区 | 日韩av片免费在线观看 | 五月天堂色 | 天天综合久久综合 | 国产黄a三级三级 | 在线观看黄色av | 国产资源在线免费观看 | 中文字幕视频网 | 久久久久久久国产精品影院 | 97视频免费观看2区 亚洲视屏 | 久久综合九色九九 | 欧美一区二区三区免费观看 | 81精品国产乱码久久久久久 | 色综合 久久精品 | www.激情五月.com| 欧美日本啪啪无遮挡网站 | 一区二区三区免费播放 | 精品视频123区在线观看 | 婷婷射五月 | 色综合天天综合网国产成人网 | 人人讲| 综合色中文 | 高潮久久久久久 | 夜夜天天干 | 国产一级二级av | 一区二区三区四区久久 | 国产精品九九视频 | 黄色91在线观看 | 欧美aaaxxxx做受视频 | 欧美精品在线视频观看 | 91av色 | 欧美xxxx性xxxxx高清 | 狠狠操狠狠 | 欧美少妇影院 | 久久精品2 | 91免费黄视频 | 久久精品99国产精品日本 | 人人插人人草 | 麻豆精品视频 | 奇米网777| 午夜手机看片 | 日韩精品视频免费专区在线播放 | 久久毛片网 | 99热官网| 亚洲精品美女久久久 | 国产视频二区三区 | 蜜桃视频在线观看一区 | 在线视频 91 | 国模视频一区二区三区 | 亚洲成人网在线 | 日本aaa在线观看 | 最新精品视频在线 | 五月婷婷色综合 | 国产一区二区不卡视频 | 91看片在线观看 | 免费成人av在线看 | 婷婷新五月 | 99在线精品视频观看 | 欧美日韩天堂 | 91探花视频| 久久久五月婷婷 | 玖草在线观看 | 色吊丝av中文字幕 | 日本韩国欧美在线观看 | 天天在线视频色 | 欧美精品久久久久久久久久白贞 | 国产视频在线观看一区 | 日本精品二区 | 精品久久久久久国产 | 99久久日韩精品视频免费在线观看 | 国产日韩欧美在线 | 日日夜夜狠狠 | 亚洲综合在线观看视频 | 天天鲁一鲁摸一摸爽一爽 | 国产黑丝袜在线 | 欧美日韩高清在线观看 | 国产日韩视频在线播放 | 久久国产a | 97在线精品国自产拍中文 | 在线播放一区二区三区 | 天天舔天天搞 | 精品国产99| 极品中文字幕 | 久精品视频在线 | 99在线精品观看 | 99欧美视频 | 国产一二区免费视频 | 久草视频在线看 | 国产精品久久久久影院 | 天天爽天天爽天天爽 | 亚洲一区不卡视频 | 国产黄色片免费看 | av一级在线 | 国产精品久久久久久久av大片 | 亚洲国产免费av | 日批视频在线观看免费 | 超碰97在线看 | 女人18毛片a级毛片一区二区 | 亚洲精品乱码久久久久久蜜桃动漫 | 99r在线视频| 国产 日韩 欧美 自拍 | 免费观看的av网站 | 狠狠操电影网 | 中文永久免费观看 | 日本天天色 | 亚洲午夜激情网 | 日本美女xx | 美女天天操 | 97视频在线观看成人 | 成人黄色资源 | 五月花婷婷 | 久久久久久国产精品久久 | 亚洲日韩中文字幕在线播放 | 在线观看的黄色 | 在线观影网站 | 黄色一级在线观看 | 亚洲综合在线发布 | 久草在线观看资源 | 亚洲免费成人av电影 | 免费国产亚洲视频 | 奇米影视777四色米奇影院 | 久免费 | 99精品偷拍视频一区二区三区 | av观看网站| 日日摸日日添夜夜爽97 | 成人在线播放网站 | 久久精品一区二区三区国产主播 | 在线观看视频三级 | 欧美日韩xxx| 一区三区视频在线观看 | 亚洲国产成人在线观看 | 激情网在线视频 | 国产精品久久久久永久免费看 | 婷婷亚洲五月 | 欧美日韩性视频在线 | 欧美在线观看视频一区二区三区 | 欧美一区二区三区特黄 | 国内久久久| 日韩免费av片 | 岛国精品一区二区 | 亚洲深爱激情 | 欧美aa一级片| 亚洲狠狠丁香婷婷综合久久久 | 国产免费二区 | 欧美男女爱爱视频 | 四虎影视www| 国产婷婷 | 久久伊人婷婷 | 久久超级碰 | 日韩欧美国产免费播放 | 欧美日韩不卡一区二区 | 国产玖玖精品视频 | 欧美黑人xxxx猛性大交 | 亚洲天天摸日日摸天天欢 | 久久免费视频2 | 波多野结衣电影一区二区三区 | 亚洲三区在线 | 激情网在线观看 | 啪啪凸凸| 久久这里只有精品9 | 一区 二区电影免费在线观看 | 久久久久久久久久电影 | 久久人人爽人人爽人人 | 黄色的网站免费看 | 国产精品一区二区三区免费视频 | 91九色pron| 狠狠色噜噜狠狠狠狠2022 | 久久在线影院 | 不卡在线一区 | 久久国产视频网 | 国产99久久九九精品 | 国产一区二区在线影院 | 手机看片99 | 欧美日韩一区二区三区不卡 | 久久国产精品色av免费看 | 色成人亚洲网 | 久久国产精品99久久人人澡 | 欧美a级在线免费观看 | 精品自拍av | 中文伊人 | 日本亚洲国产 | 成人av在线影视 | 久久久久久黄 | 黄色在线观看www | 日韩经典一区二区三区 | 久久久亚洲影院 | 国产99久久久国产 | 人人爽人人爽av | 亚洲狠狠婷婷 | 五月婷婷激情网 | 蜜桃av人人夜夜澡人人爽 | 久久久精品国产免费观看同学 | 欧美一区二视频在线免费观看 | 国产午夜精品一区二区三区在线观看 | 免费在线成人av | 久久久精品国产一区二区电影四季 | 久久久久久久综合色一本 | 天天综合中文 | 国产成人精品av在线观 | 亚洲一级在线观看 | 国内成人精品视频 | 国产字幕在线看 | 国产91在线免费视频 | 不卡av电影在线观看 | www黄com| 国产精品专区在线观看 | 狠狠地操 | 国产精品久久99精品毛片三a | 午夜精品一区二区三区在线播放 | 日韩精品视频在线观看网址 | 9999在线| 夜夜干夜夜 | 麻豆免费在线播放 | 蜜臀av网址 | 肉色欧美久久久久久久免费看 | 中文字幕视频一区 | 久久久精品欧美一区二区免费 | 丁香 久久 综合 | 一区二区三区精品久久久 | 成人看片 | 日韩欧美成 | 亚洲人人精品 | 色视频成人在线观看免 | 亚洲区视频在线观看 | 免费精品视频 | 亚洲一区二区高潮无套美女 | 亚洲五月 | 亚洲成人在线免费 | 精品国产一区二区三区四区在线观看 | 国产成人精品久久亚洲高清不卡 | 国产精品一区二区精品视频免费看 | 91高清视频在线 | 精品v亚洲v欧美v高清v | 激情综合五月天 | 91麻豆精品 | 久久久精品影视 | 久久免费视频精品 | 亚洲v欧美v国产v在线观看 | 91视频在线免费下载 | 国产黄色电影 | 日韩久久一区 | 中文字幕乱在线伦视频中文字幕乱码在线 | av丝袜在线 | 麻豆视频一区 | 精品一区二区三区在线播放 | 91一区二区三区在线观看 | 久久国产电影院 | 韩国一区在线 | 国产精品欧美一区二区 | 91麻豆精品国产91久久久更新时间 | 成人国产精品一区 | 久久99亚洲精品久久 | 人人揉人人揉人人揉人人揉97 | 成人av免费看 | 最近日韩中文字幕中文 | 欧美怡红院视频 | 国产毛片久久 | 天堂在线一区二区三区 | 色插综合| 天天操天天爽天天干 | 天天插天天操天天干 | 亚洲精品播放 | 天天曰天天干 | 在线 视频 亚洲 | 国产女人18毛片水真多18精品 | 一区二区三区免费网站 | 99视频在线观看免费 | 国产精品乱码久久 | 国产手机视频在线观看 | 中文字幕在线观看91 | 国产a高清 | 在线v片免费观看视频 | 日本一区二区三区视频在线播放 | 天天综合狠狠精品 | 天天干天天草天天爽 | 亚洲精品美女久久久久 | av中文字幕在线播放 | 91视频高清免费 | 91久久精品一区二区三区 | 97夜夜澡人人双人人人喊 | 波多野结衣资源 | 欧美性大战久久久久 | 国产精品入口麻豆 | 久久综合九色综合97婷婷女人 | 九九精品无码 | 久久午夜网 | 蜜桃av综合网 | 欧美一二三区播放 | 国产一区二区在线观看视频 | 黄色av电影网 | 在线免费av网 | 不卡的av | 婷婷播播网 | 最近中文字幕视频完整版 | 亚洲午夜小视频 | 国产精品久久久久毛片大屁完整版 | 伊人电影在线观看 | 最近中文字幕高清字幕在线视频 | www.伊人网.com| 国产免费资源 | 在线免费亚洲 | 最近中文字幕免费大全 | 97理论片 | 中文字幕丝袜一区二区 | 黄色电影网站在线观看 | 超碰在线成人 | 国产精品原创av片国产免费 | 日韩中文字幕免费在线播放 | 精品嫩模福利一区二区蜜臀 | 国产福利专区 | 久草在线国产 | 久久免费视频网 | 久久久影院一区二区三区 | 午夜电影av | 五月天堂色 | 亚洲精品资源在线 | 国产精品美女久久久久久久 | 久久视频免费观看 | 精品久久久精品 | 成人国产网址 | 国产亚洲一区二区在线观看 | 日韩超碰在线 | 久久久久影视 | 九色在线视频 | 97超碰资源站| 91九色视频国产 | 麻豆精品在线 | 成人毛片在线观看视频 | 青青河边草免费直播 | 一本一本久久a久久 | 亚洲精品免费观看 | 999久久久免费视频 午夜国产在线观看 | 91精品国产乱码 | 午夜精品影院 | 成片人卡1卡2卡3手机免费看 | 亚洲另类久久 | 五月婷婷六月丁香 | 在线观看你懂的网址 | 美女视频久久 | 九九久久影院 | 国产视频首页 | 亚洲免费在线播放视频 | 中日韩免费视频 | 97国产精品视频 | 国产精品视频资源 | 在线97| 国产午夜精品一区二区三区欧美 | 亚洲高清视频在线观看免费 | 免费精品久久久 | 亚洲欧洲精品一区二区 | 九九爱免费视频 | 俺要去色综合狠狠 | 国产亚洲免费观看 | 丁香花在线视频观看免费 | 成人一级视频在线观看 | 免费在线观看av网站 | 黄色av免费电影 | 一区二区三区免费看 | 久久久久久久看片 | 波多野结衣视频一区二区 | 夜夜躁天天躁很躁波 | 91精品久久香蕉国产线看观看 | 日韩女同一区二区三区在线观看 | 久久精品一区二区三区视频 | 久久久av电影 | 欧美日韩首页 | 久久久久免费看 | 成人一级影视 | 久久高清 | 黄色一级网 | 欧美一级淫片videoshd | www黄色软件 | 亚洲精品免费观看 | 制服丝袜天堂 | 在线高清av| av网址最新 | 久久国产精品成人免费浪潮 | 色网站黄 | 精品视频999| 丁香久久久 | 日韩在线高清 | 国产婷婷久久 | www99久久| av视屏在线 | 激情五月av | 美女视频黄在线观看 | 在线国产一区二区三区 | 婷婷久久婷婷 | 久久久久久久久久网站 | 日韩中文免费视频 | 深夜激情影院 | 亚洲最大的av网站 | 国产精品一区二区你懂的 | 久久天天躁夜夜躁狠狠躁2022 | 国产免费大片 | 肉色欧美久久久久久久免费看 | 91精品国产自产老师啪 | 国产亚洲精品久 | 丁香网婷婷 | 国产999精品久久久久久绿帽 | 国产日韩欧美自拍 | 九九九热 | 又污又黄的网站 | 天天插伊人 | 天天干天天做 | 狠狠激情中文字幕 | 亚洲国产成人精品电影在线观看 | 国产一区影院 | 欧美综合在线观看 | 狠狠色丁香久久婷婷综合五月 | 91精品视频在线播放 | 亚洲理论在线观看 | 亚洲国产欧美在线人成大黄瓜 |