久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java期末复习基础知识整理(有点长)

發布時間:2024/1/8 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java期末复习基础知识整理(有点长) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

平臺無關:

在一個計算機上編譯得到的字節碼文件可以復制到任何一個安裝了Java運行環境的計算機上直接使用。字節碼由Java虛擬機負責解釋運行,即Java虛擬機負責將字節碼翻譯成本地計算機的機器碼,并將機器碼交給本地的操作系統來運行。

Java程序的開發步驟 :

1.編寫源文件:擴展名必須是.java。

2.編譯Java源程序:用Java編譯器(javac.exe)編譯源文件,得到字節碼文件。

3.運行Java程序:使用Java解釋器(java.exe)來解釋執行字節碼文件。 ?

保存源文件:

如果源文件中有多個類,那么只能有一個類是public類;如果有一個類是public類,那么源文件的名字必須與這個類的名字完全相同,擴展名是java;如果源文件沒有public類,那么源文件的名字只要和某個類的名字相同,并且擴展名是java就可以了

標識符:

用來標識類名、變量名、方法名、類型名、數組名、文件名的有效字符序列稱為標識符,簡單地說,標識符就是一個名字 .

標識符由字母、下劃線、美元符號和數字組成,長度不受限制。

標識符的第一個字符不能是數字字符。

標識符不能是關鍵字(關鍵字見下面的2.1.3節)

標識符不能是true、false和null(盡管true、false和null不是關鍵字)

這8種基本數據類型習慣上可分為以下四大類型:

??邏輯類型:boolean

??整數類型:byte、short、int、long

??字符類型:char

??浮點類型:float、double

1.int 型

??????????對于int型變量,內存分配給4個字節(byte),占32位。

2.byte 型 ?

????????常量:Java中不存在byte型常量的表示法,但可以把一定范圍內的int型常量

??????????賦值給byte型變量。 ?

????????變量:使用關鍵字byte來聲明byte 型變量 ?

??????????例如: byte x= -12,tom=28,漂亮=98;

??????????對于byte型內存分配給1個字節,占8位 。

3 .short 型

????????常量:和byte型類似,Java中也不存在short型常量的表示法,但可以把一定

??????????范圍內的int型常量賦值給short型變量。

????????變量:使用關鍵字short來聲明short型變量

??????????例如: short x=12,y=1234;

??????????對于short型變量,內存分配給2個字節,占16位.

4. long 型

????????常量:long型常量用后綴L來表示,例如108L(十進制)、07123L(八進制)、

??????????0x3ABCL(十六進制) 。

????????變量:使用關鍵字long來聲明long型變量,

??????????例如: long width=12L,height=2005L,length;

??????????對于long型變量,內存分配給8個字節,占64位。

簡單數據類型的級別與類型轉換運算:

Java中數據的基本類型(不包括邏輯類型)按精度從“低”到“高”排列:

byte ?short ?char ?int ?long ?float ?double

★當把級別低的變量的值賦給級別高的變量時,系統自動完成數據類型的轉換

★當把級別高的變量的值賦給級別低的變量時,必須使用顯示類型轉換運算。顯示轉換的格式:(類型名)要轉換的值;

??例如

????int x=(int)34.89;

★當把一個int型常量賦值給一個byte和short型變量時,不可以超出這些變量的取值范圍,否則必須進行類型轉換運算;例如,常量128的屬于int型常量,超出byte變量的取值范圍,如果賦值給byte型變量,必須進行byte類型轉換運算(將導致精度的損失),如下所示:

?????byte a=(byte)128;

輸入基本型數據 :

??◆可以使用Scanner類創建一個對象:

???????????Scanner reader=new Scanner(System.in);

??◆reader對象調用下列方法,讀取用戶在命令行(例如,MS-DOS窗口)輸入的各種基本類型數據:

?nextBoolean()、 nextByte()、 nextShort()、 nextInt() ??

?nextLong()、nextFloat()、nextDouble()

輸出基本型數據:

JDK1.5新增了和C語言中printf函數類似的輸出數據的方法,格式如下:

?????System.out.printf("格式控制部分",表達式1,表達式2,…表達式n)

格式控制部分由格式控制符號:%d、%c、%f、%s和普通的字符組成,普通字符原樣輸出。格式符號用來輸出表達式的值。

輸出數據時也可以控制數據在命令行的位置,例如:%md輸出的int型數據占m列;%m.nf輸出的浮點型數據占m列,小數點保留n位。例如:System.out.printf("%d,%f",12, 23.78);

數組 :

1 聲明數組:

聲明一維數組有下列兩種格式:

數組的元素類型 數組名[];

數組的元素類型 [] 數組名;

例如:

float boy[];

char [] cat;

2 為數組分配元素 :

為數組分配元素的格式如下:

數組名 = new 數組元素的類型[數組元素的個數];

例如: boy = new float[4];

3數組的引用:

數組屬于引用型變量,兩個相同類型的數組如果具有相同的引用,它們就有完全相同的元素

?

instanceof 運算符是二目運算符,左面的操作元是一個對象;右面是一個類。當左面的對象是右面的類或子類創建的對象時,該運算符運算的結果是true ,否則是false。

Java里的語句可分為以下六種:

1.方法調用語句。如:System.out.println(" Hello");

2.表達式語句 ??表示式尾加上分號。比如賦值語句:x=23;

3.復合語句

??可以用{ ?}把一些語句括起來構成復合語句,如:

???????{ ??z=123+x;

???????????System.out.println("How are you");

????????}

4.空語句。 一個分號也是一條語句,稱做空語句。

5.控制語句。控制語句分為條件分支語句、開關語句和循環語句。

6.package語句和 import語句。它們和類、對象有關

for語句與數組 :

?JDK1.5后,對for語句的功能給予擴充、增強,以便更好地遍歷數組。語法格式如下:

for(聲明循環變量:數組的名字) {

}

其中,聲明的循環變量的類型必須和數組的類型相同。這種形式的for語句類似自然語言中的“for each”語句,為了便于理解上述for語句,可以將這種形式的for語句中翻譯成“對于循環變量依次取數組的每一個元素的值”。

?類體:

◆類體的內容由兩部分構:一部分是變量的聲明,用來刻畫屬性;另一部分是方法的定義,用來刻畫行為功能

類體中變量聲明部分所聲明的變量被稱作成員變量和類的成員變量不同的是,局部變量只在方法內有效,而且與其聲明的位置有關如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即該成員變量在這個方法內暫時失效。如果想在該方法中使用被隱藏的成員變量,必須使用關鍵字this(在4.9節this關鍵字)

局部變量沒有默認值:

成員變量有默認值(見后面的4.3節),但局部變量沒有默認值,因此在使用局部變量之前,必須保證局部變量有具體的值

???對成員變量的操作只能放在方法中,方法可以對成員變量和該方法體中聲明的局部變量進行操作。在聲明成員變量時可以同時賦予初值,但是不可以在類體中有單獨的賦值語句(不可以有變量的聲明和方法的定義以外的其它語句)

構造方法與對象的創建 :

???類是面向對象語言中最重要的一種數據類型,那么就可以用它來聲明變量。在面向對象語言中,用類聲明的變量被稱作對象。和基本數據類型不同,在用類聲明對象后,還必須要創建對象,即為聲明的對象分配變量(確定對象所具有的屬性),當使用一個類創建一個對象時,也稱給出了這個類的一個實例。通俗的講,類是創建對象的“模板”,沒有類就沒有對象。構造方法和對象的創建密切相關

構造方法 : 構造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有類型。允許一個類中編寫若干個構造方法,但必須保證他們的參數不同,即參數的個數不同,或者是參數的類型不同。

創建對象 : ???

創建一個對象包括對象的聲明和為對象分配變量兩個步驟。

  • 對象的聲明
  • 為聲明的對象分配變量
  • 使用對象 :

    1.對象操作自己的變量(體現對象的屬性)

    ???通過使用運算符“.” 對象操作自己的變量(對象的屬性)

    2.對象調用類中的方法(體現對象的行為)

    ???對象創建之后,可以使用點運算符“.”調用創建它的類中的方法,從而產生一定的行為(功能).

    3. 體現封裝

    ????當對象調用方法時,方法中出現的成員變量就是指分配給該對象的變量。在講述類的時候講過:類中的方法可以操作成員變量。當對象調用方法時,方法中出現的成員變量就是指分配給該對象的變量。

    ?對象的引用和實體 :

    當用類創建一個對象時,類中的成員變量在分配內存空間,這些內存空間稱作該對象的實體或對象的變量,而對象中存放著引用。一個類創建的兩個對象,如果具有相同的引用,那么就具有完全相同的實體。

    參數傳值:

    ?方法中最重要的部分之一就是方法的參數,參數屬于局部變量,當對象調用方法時,參數被分配內存空間,并要求調用者向參數專遞值,即方法被調用時,參數變量必須有具體的值。

    ?傳值機制 :

    ?在Java中,方法的所有參數都是“傳值”的,也就是說,方法中參數變量的值是調用者指定的值的拷貝。例如,如果向方法的int型參數x傳遞一個int值,那么參數x得到的值是傳遞的值的拷貝。

    基本數據類型參數的傳值 :

    對于基本數據類型的參數,向該參數傳遞的值的級別不可以高于該參數的級別 。

    引用類型參數的傳值:

    當參數是引用類型時,“傳值”傳遞的是變量中存放的“引用”,而不是變量所引用的實體

    對象的組合 ?:

    一個類可以把對象作為自己的成員變量,如果用這樣的類創建對象,那么該對象中就會有其它對象,也就是說該對象將其他對象作為自己的組成部分,或者說該對象是由幾個對象組合而成。

    組合與復用 ?:

    如果一個對象a組合了對象b,那么對象a就可以委托對象b調用其方法,即對象a以組合的方式復用對象b的方法。例如,圓錐對象在計算體積時,首先委托圓錐的底(一個Circle對象)bottom調用getArea()方法計算底的面積,然后圓錐對象再計算出自身的體積

    實例變量和類變量的聲明:

    在聲明成員變量時,用關鍵字static給予修飾的稱作類變量,否則稱作實例變量(類變量也稱為static變量,靜態變量)。

    實例變量和類變量的區別:

    1.不同對象的實例變量互不相同

    2.所有對象共享類變量

    3.通過類名直接訪問類變量

    實例方法和類方法的定義:

    類中的方法也可分為實例方法和類方法。方法聲明時,方法類型前面不加關鍵字static修飾的是實例方法、加static關鍵字修飾的是類方法(靜態方法)。

    實例方法和類方法的區別 :

    1.對象調用實例方法

    ???當對象調用實例方法時,該方法中出現的實例變量就是分配給該對象的實例變量;該方法中出現的類變量也是分配給該對象的變量,只不過這個變量和所有的其他對象共享而已。

    2.類名調用類方法

    從而類方法不僅可以被類創建的任何對象調用執行,也可以直接通過類名調用。和實例方法不同的是,類方法不可以操作實例變量,這是因為在類創建對象之前,實例成員變量還沒有分配內存。

    方法重載的語法規則 :

    方法重載的意思是:一個類中可以有多個方法具有相同的名字,但這些方法的參數必須不同,即或者是參數的個數不同,或者是參數的類型不同

    this關鍵字 :

    this是Java的一個關鍵字,表示某個對象。this可以出現在實例方法和構造方法中,但不可以出現在類方法中。this關鍵字出現在類的構造方法中時,代表使用該構造方法所創建的對象.當this關鍵字出現實例方法中時,this就代表正在調用該方法的當前對象。

    在構造方法中使用this ?:

    this關鍵字出現在類的構造方法中時,代表使用該構造方法所創建的對象。

    在實例方法中使用this ?:

    實例方法必須只能通過對象來調用,不能用類名來調用。當this關鍵字出現實例方法中時,代表正在調用該方法的當前對象。

    實例方法可以操作類的成員變量,當實例成員變量在實例方法中出現時,默認的格式是:this.成員變量;

    當static成員變量在實例方法中出現時,默認的格式是:

    ?????類名.成員變量;

    包 :

    包是Java語言中有效地管理類的一個機制。

    包名的目的是有效的區分名字相同的類。不同Java源文件中兩個類名字相同時,它們可以通過隸屬不同的包來相互區分。

    包語句 :

    通過關鍵字package聲明包語句。

    ???????package語句作為Java源文件的第一條語句, 為該源文件中聲明的類指定包名。 ?import 語句 :

    ??一個類可能需要另一個類聲明的對象作為自己的成員或方法中的局部變量,如果這兩個類在同一個包中,當然沒有問題。

    ???如果一個類想要使用的那個類和它不在一個包中,要使用import語句完成使命。

    引入自定義包中的類 :

    用戶程序也可以使用import語句引入非類庫中有包名的類,如:

    ???import tom.jiafei.*;

    訪問權限 :

    ??當用一個類創建了一個對象之后,該對象可以通過“.”運算符操作自己的變量、使用類中的方法,但對象操作自己的變量和使用類中的方法是有一定限制的。

    何謂訪問權限 :

    ???所謂訪問權限是指對象是否可以通過“.”運算符操作自己的變量或通過“.”運算符使用類中的方法。訪問限制修飾符有private、protected和public,都是Java的關鍵字,用來修飾成員變量或方法。

    私有變量和私有方法 :

    用關鍵字private修飾的成員變量和方法稱為私有變量和私有方法。

    對于私有成員變量或方法,只有在本類中創建該類的對象時,這個對象才能訪問自己的私有成員變量和類中的私有方法。

    某個類在另外一個類中創建對象后,如果不希該對象直接訪問自己的變量,即通過“.”運算符來操作自己的成員變量,就應當將該成員變量訪問權限設置為private。面向對象編程提倡對象應當調用方法來改變自己的屬性,類應當提供操作數據的方法,這些方法可以經過精心的設計,使得對數據的操作更加合理

    共有變量和共有方法 :

    用public修飾的成員變量和方法被稱為共有變量和共有方法 。

    我們在任何一個類中用類Tom 創建了一個對象后,該對象能訪問自己的public變量和類中的public方法(也可以通過類名來操作成員變量、方法) 。

    友好變量和友好方法:

    當在另外一個類中用類Tom 創建了一個對象后,如果這個類與Tom類在同一個包中,那么該對象能訪問自己的友好變量和友好方法。 在任何一個與Tom同一包中的類中,也可以通過Tom類的類名訪問Tom類的類友好成員變量和類友好方法。

    受保護的成員變量和方法:

    用protected修飾的成員變量和方法被稱為受保護的成員變量和受保護的方法

    public類與友好類 :

    類聲明時,如果在關鍵字class前面加上public關鍵字,就稱這樣的類是一個public 類 。

    可以在任何另外一個類中,使用public類創建對象。

    如果一個類不加public修飾,這樣的類被稱作友好類。

    在另外一個類中使用友好類創建對象時,要保證它們是在同一包中。

    基本類型的類封裝:

    Java提供了基本數據類型相關的類,實現了對基本數據類型的封裝。這些類分別是:Byte、Integer、Short、Long、Float、Double和Character類。這些類在java.lang包中。

    對象數組:

    如果程序需要某個類的若干個對象,比如Student類的10個對象,顯然如下聲明10個Student對象是不可取的:

    Student stu1,stu2, stu3,stu4,stu5,stu6,stu7,stu8, stu9,stu10;

    正確的做法是使用對象數組,即數組的元素是對象,例如:

    ???????Student [] stu;

    ???????stu = new Student[10];

    需要注意的是,上述代碼僅僅定義了數組stu有10個元素,并且每個元素都是一個Student類型的對象,但這些對象目前都是空對象,因此在使用數組stu中的對象之前,應當創建數組所包含的對象,例如: ???????????

    stu[0] = new Student(); ?

    反編譯和文檔生成器 :

    ◆反編譯器javap.exe可以將字節碼反編譯為源碼,以便查看源碼類中的public方法名字和public成員變量的名字,例如:

    ????javap java.awt.Button

    使用javadoc.exe可以制做源文件類結構的html格式文檔

    jar文件 :

    可以使用jar.exe命令把一些類的字節碼文件壓縮成一個jar文件,然后將這個jar文件存放到Java運行環境的擴展中,即將該jar文件存放在JDK安裝目錄的jre\lib\ext文件夾中。這樣,Java應用程序就可以使用這個jar文件中的類來創建對象了

    將C:\1000\moon\star目錄中的TestOne.class 和TestTwo.class(二者包名是moon.star)壓縮成一個jar文件:Jerry.jar的步驟:

    1. 清單文件:hello.mf(保存到C:\1000)

    Manifest-Version: 1.0

    Class: moon.start.TestOne moon.star.TestTwo

    Created-By: 1.6

    ??2. ?使用jar命令來生成一個名字為Jerry.jar的文件

    C:\1000> jar cfm Jerry.jar hello.mf moon\star\TestOne.class moon\star\TestTwo.class

    子類與父類 :

    ??利用繼承,可以先編寫一個共有屬性的一般類,根據該一般類再編寫具有特殊屬性的新類,新類繼承一般類的狀態和行為,并根據需要增加它自己的新的狀態和行為。

    由繼承而得到的類稱為子類,被繼承的類稱為父類(超類)。

    聲明子類 :

    使用關鍵字extends來定義一個類的子類,格式如下:

    ?????class 子類名 ?extends ?父類名 {

    ???????????…

    ?????}

    類的樹形結構:

    ?Java的類按繼承關系形成樹形結構這個樹形結構中,根節點是Object類

    ????(Object是java.lang包中的類),即Object是所有類的祖先類。

    除了Object類每個類有且僅有一個父類,一個類可以有多個或零個子類。如果一個類(除了Object類)的聲明中沒有使用extends關鍵字,這個類被系統默認為是Object的子類,即類聲明“class A”與“class A extends Object”是等同的。

    子類的繼承性 :

    ?所謂子類繼承父類的成員變量作為自己的一個成員變量,就好象它們是在子類中直接聲明一樣,可以被子類中自己定義的任何實例方法操作。

    所謂子類繼承父類的方法作為子類中的一個方法,就好象它們是在子類中直接定義了一樣,可以被子類中自己定義的任何實例方法調用。

    子類和父類在同一包中的繼承性 :

    如果子類和父類在同一個包中,那么,子類自然地繼承了其父類中不是private的成員變量作為自己的成員變量,并且也自然地繼承了父類中不是private的方法作為自己的方法,繼承的成員變量或方法的訪問權限保持不變。

    子類和父類不在同一包中的繼承性:

    ??如果子類和父類不在同一個包中,那么,子類繼承了父類的protected、public成員變量做為子類的成員變量,并且繼承了父類的protected、public方法為子類的方法,繼承的成員或方法的訪問權限保持不變。

    子類與對象:

    子類對象的特點

    子類的構造方法創建一個子類的對象時,不僅子類中聲明的成員變量被分配了內存,而且父類的成員變量也都分配了內存空間,但只將子類繼承的那部分成員變量作為分配給子類對象的變量 。子類中有一部分方法是從父類繼承的,這部分方法可以操作子類未繼承的變量 。

    成員變量的隱藏 :

    ?對于子類可以從父類繼承的成員變量,只要子類中聲明的成員變量和父類中的成員變量同名時,子類就隱藏了繼承的成員變量,子類自己聲明定義的方法操作與父類同名的成員變量是指子類重新聲明定義的這個成員變量。

    方法重寫(Override):

    ??子類通過重寫可以隱藏已繼承的實例方法。

    1.重寫的語法規則

    如果子類可以繼承父類的某個實例方法,那么子類就有權利重寫這個方法。

    方法重寫是指:子類中定義一個方法,這個方法的類型和父類的方法的類型一致或者是父類的方法的類型的子類型,并且這個方法的名字、參數個數、參數的類型和父類的方法完全相同。

    2.重寫的目的

    子類通過方法的重寫可以隱藏繼承的方法,子類通過方法的重寫可以把父類的狀態和行為改變為自身的狀態和行為。

    重寫的注意事項 :

    重寫父類的方法時,不允許降低方法的訪問權限,但可以提高訪問權限(訪問限制修飾符按訪問權限從高到低的排列順序是:public、protected、友好的、private。)

    用super操作被隱藏的成員變量和方法:

    子類可以隱藏從父類繼承的成員變量和方法,如果在子類中想使用被子類隱藏的成員變量或方法就可以使用關鍵字super。比如super.x、super.play()就是訪問和調用被子類隱藏的成員變量x和方法play().

    使用super調用父類的構造方法:

    子類不繼承父類的構造方法,因此,子類如果想使用父類的構造方法,必須在子類的構造方法中使用,并且必須使用關鍵字super來表示,而且super必須是子類構造方法中的頭一條語句。

    final關鍵字可以修飾類、成員變量和方法中的局部變量。

    可以使用final將類聲明為final類。final類不能被繼承,即不能有子類。如:

    ???final class A {

    ??????… …

    ???}

    如果用final修飾父類中的一個方法,那么這個方法不允許子類重寫。

    如果成員變量或局部變量被修飾為final的,就是常量。

    對象的上轉型對象 :
    ?假設,A類是B類的父類,當用子類創建一個對象,并把這個對象的引用放到父類的對象中時,比如:

    A a;

    a=new B();

    ?或

    A a;

    B b=new B();

    a=b;

    這時,稱對象a是對象b的上轉型對象

    1.上轉型對象不能操作子類新增的成員變量;不能調用子類新增的方法。

    2.上轉型對象可以訪問子類繼承或隱藏的成員變量,也可以調用子類繼承的方法或子類重寫的實例方法。上轉型對象操作子類繼承的方法或子類重寫的實例方法,其作用等價于子類對象去調用這些方法。因此,如果子類重寫了父類的某個實例方法后,當對象的上轉型對象調用這個實例方法時一定是調用了子類重寫的實

    繼承與多態:

    多態性就是指父類的某個方法被其子類重寫時,可以各自產生自己的功能行為

    用關鍵字abstract修飾的類/方法稱為abstract類/方法(抽象類)。如:

    abstract class A {

    ??… …

    }

    注意:

    1.abstract類中可以有abstract方法

    2.abstract類不能用new運算創建對象

    面向抽象編程 :

    ??在設計一個程序時,可以通過在abstract類中聲明若干個abstract方法,表明這些方法在整個系統設計中的重要性,方法體的內容細節由它的非abstract子類去完成。使用多態進行程序設計的核心技術之一是使用上轉型對象,即將abstract類聲明對象作為其子類的上轉型對象,那么這個上轉型對象就可以調用子類重寫的方法。所謂面向抽象編程,是指當設計某種重要的類時,不讓該類面向具體的類,而是面向抽象類,即所設計類中的重要數據是抽類聲明的對象,而不是具體類聲明的對象。Pillar類就是面向抽象類Geometry,Cirle和Rectangle 都是Geometry的子類.

    ?開-閉原則 :

    所謂“開-閉原則”(Open-Closed Principle)就是讓設計的系統應當對擴展開放,對修改關閉。

    在設計系統時,應當首先考慮到用戶需求的變化,將應對用戶變化的部分設計為對擴展開放,而設計的核心部分是經過精心考慮之后確定下來的基本結構,這部分應當是對修改關閉的,即不能因為用戶的需求變化而再發生變化,因為這部分不是用來應對需求變化的。

    ?如果系統的設計遵守了“開-閉原則”,那么這個系統一定是易維護的,因為在系統中增加新的模塊時,不必去修改系統中的核心模塊。

    接口 :

    ??為了克服Java單繼承的缺點,Java使用了接口,一個類可以實現多個接口。

    ??使用關鍵字interface來定義一個接口。接口的定義和類的定義很相似,分為接口的聲明和接口體。

    1.接口聲明

    接口通過使用關鍵字interface來聲明,格式: interface 接口的名字

    2.接口體

    接口體中包含常量定義和方法定義兩部分。

    實現接口 :

    一個類通過使用關鍵字implements聲明自己實現一個或多個接口。

    class A implements Printable,Addable

    如果一個類實現了某個接口,那么這個類必須重寫該接口的所有方法。

    ?Java提供的接口都在相應的包中,通過import語句不僅可以引入包中的類,也可以引入包中的接口,例如:

    import java.io.*;???不僅引入了java.io包中的類,也同時引入了該包中的接口

    理解接口:

    ?接口的思想在于它可以要求某些類有相同名稱的方法,但方法的具體內容(方法體的內容)可以不同,即要求這些類實現接口,以保證這些類一定有接口中所聲明的方法(即所謂的方法綁定)。接口在要求一些類有相同名稱的方法的同時,并不強迫這些類具有相同的父類。比如,各式各樣的電器產品,它們可能歸屬不同的種類,但國家標準要求電器產品都必須提供一個名稱為on的功能(為達到此目的,只需要求它們實現同一接口,該接口中有名字為on的方法),但名稱為on的功能的具體行為由各個電器產品去實現。

    接口回調是指:可以把實現某一接口的類創建的對象的引用賦給該接口聲明的接口變量中,那么該接口變量就可以調用被類重寫的接口方法。實際上,當接口變量調用被類重寫的接口方法時,就是通知相應的對象調用這個方法。

    接口與多態:

    ??可以通過在接口中聲明若干個abstract方法,表明這些方法的重要性,方法體的內容細節由實現接口的類去完成。使用接口進行程序設計的核心思想是使用接口回調,即接口變量存放實現該接口的類的對象的引用,從而接口變量就可以回調類實現的接口方法。

    接口參數 :

    ?如果一個方法的參數是接口類型,我們就可以將任何實現該接口的類的實例的引用傳遞給該接口參數,那么接口參數就可以回調類實現的接口方法。

    ?abstract類與接口的比較 :

    接口和abstract類的比較如下:

    1.abstract類和接口都可以有abstract方法。

    2.接口中只可以有常量,不能有變量;而abstract類中即可以有常量也可以有變量。

    3.abstract類中也可以有非abstract方法,接口不可以。

    ?面向接口編程:

    面向接口去設計程序,可以通過在接口中聲明若干個abstract方法,表明這些方法的重要性,方法體的內容細節由實現接口的類去完成。

    使用接口進行程序設計的核心思想是使用接口回調,即接口變量存放實現該接口的類的對象的引用,從而接口變量就可以回調類實現的接口方法。

    內部類:

    Java支持在一個類中聲明另一個類,這樣的類稱作內部類,而包含內部類的類成為內部類的外嵌類。某種類型的農場飼養了一種特殊種類的牛,但不希望其他農場飼養這種特殊種類的牛,那么這種類型的農場就可以將創建這種特殊種牛的類作為自己的內部類。

    和子類有關的匿名類 :

    ?Java允許我們直接使用一個類的子類的類體創建一個子類對象。

    創建子類對象時,除了使用父類的構造方法外還有類體,此類體被認為是一個子類去掉類聲明后的類體,稱作匿名類。

    假設Bank是類,那么下列代碼就是用Bank的一個子類(匿名類)創建對象:

    ????new Bank () { ?????????

    ????????匿名類的類體

    };

    和接口有關的匿名類 :

    假設Computable是一個接口,那么,Java允許直接用接口名和一個類體創建一個匿名對象,此類體被認為是實現了Computable接口的類去掉類聲明后的類體,稱作匿名類。

    下列代碼就是用實現了Computable接口的類(匿名類)創建對象:

    ??????new Computable() {

    ????????????實現接口的匿名類的類體

    ???????} ; ???

    異常類 :

    所謂異常就是程序運行時可能出現一些錯誤,比如試圖打開一個根本不存在的文件等,異常處理將會改變程序的控制流程,讓程序有機會對錯誤作出處理。

    異常對象可以調用如下方法得到或輸出有關異常的信息:

    ?public String getMessage();

    ?public void printStackTrace();

    ?public String toString(); ?

    try~catch語句:

    ?Java使用try~catch語句來處理異常,將可能出現的異常操作放在try~catch語句的try部分,將發生異常后的處理放在catch部分。

    ?try~catch語句的格式如下:

    ??try {

    ??????包含可能發生異常的語句

    ?}

    ?catch(ExceptionSubClass1 ?e) {

    ????…

    ?}

    ?catch(ExceptionSubClass2 ?e) {

    ????…

    ?}

    自定義異常類:

    我們也可以擴展Exception類定義自己的異常類,然后規定哪些方法產生這樣的異常。

    一個方法在聲明時可以使用throws關鍵字聲明要產生的若干個異常,并在該方法的方法體中具體給出產生異常的操作,即用相應的異常類創建對象,并使用throw關鍵字拋出該異常對象,導致該方法結束執行。

    斷言:

    ?斷言語句用于調試代碼階段。在調試代碼階段讓斷言語句發揮作用,這樣就可以發現一些致命的錯誤,當程序正式運行時就可以關閉斷言語句,但仍把斷言語句保留在源代碼中,如果以后應用程又需要調試,可以重新啟用斷言語句。

    使用關鍵字assert聲明一條斷言語句,斷言語句有以下兩種格式:

    ??assert booleanExpression;

    ??assert booleanExpression:messageException;

    String類 :

    ??Java專門提供了用來處理字符序列的String類。String類在java.lang包中,由于java.lang包中的類被默認引入,因此程序可以直接使用String類。需要注意的是Java把String類聲明為final類,因此用戶不能擴展String類,即String類不可以有子類。

    String 類的常用方法:

    1.public int length():獲取一個字符串的長度

    2.public boolean equals(String s):比較當前字符串對象的實體是否與參數s指定的字符串的實體相同 ????????????????

    3.public boolean startsWith(String s)

    ???public boolean endsWith(String s)方法:判斷當前字符串對象的前綴(后綴)是否參數s指定的字符串

    ????String tom = "天氣預報,陰有小雨",jerry = "比賽結果,中國隊贏得勝利";

    ????tom.startsWith(“天氣”)的值是true;

    ????tom.endsWith("大雨")的值是false,

    4. public int compareTo(String s):按字典序與參數s指定的字符串比較大小

    ?????如果當前字符串與s相同,該方法返回值0

    ?????如果當前字符串對象大于s,該方法返回正值

    ?????如果小于s,該方法返回負值

    ?????例如,字符a在Unicode表中的排序位置是97、字符b是98,那么對于

    ????????String str = "abcde"; ??str.compareTo("boy")小于0;

    其相關方法 public int compareToIgnoreCase(String s)

    5.public boolean contains(String s):判斷當前字符串對象是否含有參數指定的字符串s?

    ????????例如 ?tom=“student”;那么tom.contains(“stu”)的值就是true;

    ???????????????????而tom.contains("ok")的值是false。

    6. public int indexOf (String s):從當前字符串的頭開始檢索字符串s,并返回首次出現s的位置,其相關方法:

    ???indexOf(String s ,int startpoint)

    ???lastIndexOf (String s)

    ????例如 String tom = "I am a good cat";

    ??????????????tom.indexOf("a");//值是2

    ??????????????tom.indexOf("good",2);//值是7

    ??????????????tom.indexOf("a",7);//值是13

    ??????????????tom.indexOf("w",2);//值是-1

    7. public String substring(int startpoint):獲得一個當前字符串的子串??

    ?????其相關方法:substring(int start ,int end)

    ????例如: ?String tom = "我喜歡籃球";

    ??????????????????String s = tom.substring(1,3);

    ??????????????????那么s是:"喜歡"

  • public String trim() :得到一個s去掉前后空格后的字符串對象
  • 符串與基本數據的相互轉化:

    java.lang包中的Integer類調用其類方法:

    ??????public static int parseInt(String s)

    可以將由“數字”字符組成的字符串,如“876”,轉化為int型數據

    可以使用String 類的類方法

    ????????public static String valueOf(byte n)

    ???????public static String valueOf(int n)

    ???????public static String valueOf(long n) ?

    ???????public static String valueOf(float n)

    對象的字符串表示 :

    ?所有的類都默認是java.lang包中Object類的子類或間接子類。

    Object類有一個public String toString()方法,一個對象通過調用該方法可以獲得該對象的字符串表示。一個對象調用toString()方法返回的字符串的一般形式為:創建對象的類的名字@對象的引用的字符串表示

    字符串與字符、字節數組:

    String 類的構造方法:

    ◆ String(char[])和String(char[],int offset,int length)分別用字符數組中的全部字符和部分字符創建字符串對象

    ◆ String類提供了將字符串存放到數組中的方法:

    ???public void getChars(int start,int end,char c[],int offset )

    ◆將字符串中的全部字符存放在一個字符數組中的方法:

    public char[] toCharArray()

    ◆String(byte[])用指定的字節數組構造一個字符串對象。

    ???String(byte[],int offset,int length) 用指定的字節數組的一部分,即從數組起始位置offset開始取length個字節構造一個字符串對象。

    ◆public byte[] getBytes() 方法使用平臺默認的字符編碼,將當前字符串轉化為一個字節數組。

    ◆ public byte[] getBytes(String charsetName) 使用參數指定字符編碼,將當前字符串轉化為一個字節數組。 ?

    字符串的加密算法 ?:

    使用一個字符串password作為密碼對另一個字符串sourceString進行加密 。將密碼password存放到一個字符數組char [] p = password.toCharArray();

    假設數組p的長度為n,那么就將待加密的字符串sourceString按順序以n個字符為一組,對每一組中的字符用數組a的對應字符做加法運算。

    正則表達式及字符串的替換與分解:

    ?1.正則表達式

    一個正則表達式是含有一些具有特殊意義字符的字符串,這些特殊字符稱作正則表達式中的元字符。比如,“\\dcat”中的\\d就是有特殊意義的元字符,代表0到9中的任何一個。字符串對象調用 public boolean matches(String regex)方法可以判斷當前字符串對象是否和參數regex指定的正則表達式匹配。

    ?2.字符串的替換

    ?字符串對象調用public String replaceAll(String regex,String replacement)方法返回一個字符串,該字符串是當前字符串中所有和參數regex指定的正則表達式匹配的子字符串被參數replacement指定的字符串替換后的字符串,例如:

    ?????String s ="12hello567bird".replaceAll("[a-zA-Z]+","你好");

    字符串的分解

    ?3.字符串調用public String[] split(String regex)使用參數指定的正則表達式regex做為分隔標記分解出其中的單詞,并將分解出的單詞存放在字符串數組中。

    ??????例如,對于字符串str ?

    ?String str = "1949年10月1日是中華人民共和國成立的日子";

    如果準備分解出全部由數字字符組成的單詞,就必須用非數字字符串做為分隔標記,因此,可以使用正則表達式:String regex="\\D+";

    做為分隔標記分解出str中的單詞:String digitWord[]=str.split(regex);

    那么,digitWord[0]、digitWord[1]和digitWord[2]就分別是“1949”、“10”和“1”。

    StringTokenizer類 :

    本節學習怎樣使用StringTokenizer對象分解字符串。

    StringTokenizer類在java.util包中,有兩個常用的構造方法:

    ◆StringTokenizer(String s):為字符串s構造一個分析器。使用默認的分隔標記,即空格符(若干個空格被看做一個空格)、換行符、回車符、Tab符、進紙符。

    ◆ StringTokenizer(String s, String delim):為字符串s構造一個分析器。參數dilim中的字符被作為分隔標記 。

    例如:

    ????StringTokenizer fenxi = new StringTokenizer("you are welcome");

    ????StringTokenizer fenxi = new StringTokenizer("you,are ; welcome", ?", ; ");

    ◆ StringTokenizer對象稱作一個字符串分析器可以使用下列方法:

    ?????nextToken():逐個獲取字符串中的語言符號(單詞),字符串分析器中的負責計數的變量的值就自動減一 ?。

    hasMoreTokens():只要字符串中還有語言符號,即計數變量的值大于0,該方法就返回true,否則返回false。 countTokens():得到分析器中計數變量的值。

    ??Scanner類:

    使用Scanner類從字符串中解析程序所需要的數據。

    ????1.使用默認分隔標記解析字符串

    ???????創建Scanner對象,并將要解析的字符串傳遞給所構造的對象,

    ?????例如 String NBA = "I Love This Game";

    ?????如下構造一個Scanner對象:

    ?????Scanner scanner = new Scanner(NBA);

    那么scanner將空格做為分隔標記來解析字符串中的單詞,解析操作的特點如下:

    ◆ scanner調用next()方法依次返回NBA中的單詞,如果NBA最后一個單詞已被next()方法返回,scanner調用hasNext()將返回false,否則返回true。

    ◆ ?對于被解析的字符串中的數字型的單詞,比如618,168.98等,scanner可以用nextInt()或nextDouble()方法來代替next()方法,即scanner可以調用nextInt()或nextDouble()方法將數字型單詞轉化為int或double數據返回。

    ◆ 如果單詞不是數字型單詞,scanner調用nextInt()或nextDouble()方法將發生InputMismatchException異常,在處理異常時可以調用next()方法返回該非數字化單詞。

    ???????例題13 ???使用Scanner對象解析字符串"TV cost 876 dollar.Computer cost 2398 dollar.telephone cost 1278 dollar"中的全部價格數字(價格數字的前后需有空格),并計算了總消費。

    ??2.使用正則表達式作為分隔標記解析字符串

    ???????Scanner對象可以調用 useDelimiter(正則表達式); 方法將一個正則表達式作為分隔標記,即和正則表達式匹配的字符串都是分隔標記。

    ?Date類 :

    ???Date類在java.util包中。

    1.使用Date類的無參數構造方法創建的對象可以獲取本地當前時間。 Date()

    ?????例: Date nowTime=new Date();

    當前nowTime對象中含有的日期、時間就是創建nowTime對象時的本地計算機的日期和時間。例如,假設當前時間是:2011年3月10日23:05:32(CST時區),那么

    System.out.println(nowTime); 輸出結果是:Thu Mar 10 23:05:32 CST 2011。

    ??????Date對象表示時間的默認順序是:星期、月、日、小時、分、秒、年

    2.使用帶參數的構造方法 ?Date(long time)

    計算機系統將其自身的時間的“公元”設置在1970年1月1日0時(格林威治時間),可以根據這個時間使用Date的帶參數的構造方法:Date(long time)來創建一個Date對象,例如:

    ????????Date date1=new Date(1000), date2=new Date(-1000);

    其中的參數取正數表示公元后的時間,取負數表示公元前的時間,例如1000表示1000毫秒,那么,date1含有的日期、時間就是計算機系統公元后1秒時刻的日期、時間。如果運行Java程序的本地時區是北京時區(與格林威治時間相差8個小時),那么上述date1就是1970年01月01日08時00分01秒、date2就是1970年01月01日07時59分59秒。

    3.System類的靜態方法 public long currentTimeMillis() 獲取系統當前時間

    Calendar類:

    1 ?Calendar類在java.util包中。使用Calendar類的static方法 getInstance()可以初始化一個日歷對象,如:

    ????Calendar calendar= Calendar.getInstance();

    2 calendar對象可以調用方法:

    ???public final void set(int year,int month,int date)

    ???public final void set(int year,int month,int date,int hour,int minute)

    ???public final void set(int year,int month, int date, int hour, int minute,int second)

    ?????將日歷翻到任何一個時間

    3 calendar對象常用方法

    ◆public int get(int field) :可以獲取有關年份、月份、小時、星期等信息

    ???例如:calendar.get(Calendar.MONTH); 返回一個整數,如果該整數是0表示當前日歷是在一月,該整數是1表示當前日歷是在二月等。

    ???例如:calendar.get(Calendar.DAY_OF_WEEK);返回一個整數,如果該整數是1表示星期日,如果是2表示是星期一,依次類推,如果是7表示是星期六。 ???

    ◆ public long getTimeInMillis() :可以將時間表示為毫秒。?

    format方法 :

    Formatter類的format方法:format(格式化模式, 日期列表)

    按著“格式化模式”返回“日期列表”中所列各個日期中所含數據(年,月,日,小時等數據)的字符串表示。Java已經將format方法做為了String類的靜態方法,因此,程序可以直接使用String類調用format方法對日期進行格式化。

    1.格式化模式

    format方法中的“格式化模式”是一個用雙引號括起的字符序列(字符串),該字符序列中的字符由時間格式符和普通字符所構成。例如:"日期:%ty-%tm-%td"

    String s = String.format("%tY年%tm月%td日",new Date(),new Date(),new Date()); 那么s就是"2011年02月10日

    2.日期列表

    format方法中的“日期列表”可以是用逗號分隔的Calendar對象或Date對象。 format方法默認按從左到右的順序使用“格式化模式”中的格式符來格式“日期列表”中對應的日期,而“格式化模式”中的普通字符保留原樣。

    3.格式化同一日期 ????可以在“格式化模式”中使用“<”,比如:"%ty-%<tm-%<td"中的三個格式符將格式化同一日期,即含有“<”的格式符和它前面的格式符格式同一個日期,例如:String s = String.format("%ty年%<tm月%<td日",new Date());那么%<tm和%<td都格式化new Date(),因此字符串s就是:"11年02月10日"。

    不同區域的星期格式 :

    如果想用特定地區的星期格式來表示日期中的星期,可以用format的重載方法:

    format (Locale locale,格式化模式,日期列表);

    其中的參數locale是一個Locale類的實例,用于表示地域。

    Locale類的static常量都是Locale對象,其中US是表示美國的static常量。

    比如,假設當前時間是2011-02-10,對于(%ta表示簡稱的星期):

    String s = String.format(Locale.US,"%ta(%<tF)",new Date());

    那么s是"Thu(2011-02-10)",

    對于(%tA表示全稱的星期)

    String s = String.format(Locale.JAPAN,"%tA(%<tF)",new Date());

    那么s是"木曜日(2011-02-10)"。

    ??Math類 :

    ?Math類在java.lang包中。Math類包含許多用來進行科學計算的類方法,這些方法可以直接通過類名調用。另外,Math類還有兩個靜態常量,它們分別是:

    E ??2.7182828284590452354和PI ???3.14159265358979323846。

    以下是Math類的常用類方法:

    * public static long abs(double a) ?返回a的絕對值。

    * public static double max(double a,double b) 返回a、b的最大值。

    * public static double min(double a,double b) 返回a、b的最小值。

    * public static double random() ?產生一個0到1之間的隨機數(不包括0和1)。

    * public static double pow(double a,double b) 返回a的b次冪。

    * public static double sqrt(double a) 返回a的平方根。

    * public static double log(double a) ?返回a的對數。

    * public static double sin(double a) 返回正弦值。

    * public static double asin(double a) ?返回反正弦值。

    ?BigInteger類 :

    1 java.math包中的BigInteger類提供任意精度的整數運算。可以使用構造方法:

    ??????public BigInteger(String val) ?構造一個十進制的BigInteger對象。

    2 以下是BigInteger類的常用類方法:

    *public BigInteger add(BigInteger val) ?返回當前大整數對象與參數指定的大整數對象的和。

    *public BigInteger subtract(BigInteger val)返回當前大整數對象與參數指定的大整數對象的差。

    * public BigInteger multiply(BigInteger val)返回當前大整數對象與參數指定的大整數對象的積。

    *public BigInteger divide(BigInteger val)返回當前大整數對象與參數指定的大整數對象的商。

    *public BigInteger remainder(BigInteger val)返回當前大整數對象與參數指定的大整數對象的余。

    *public int compareTo(BigInteger val) 返回當前大整數對象與參數指定的大整數的比較結果,返回值是1、-1或0,分別表示當前大整數對象大于、小于或等于參數指定的大整數。

    *public BigInteger abs() ?返回當前大整數對象的絕對值。

    *public BigInteger pow(int a) ?返回當前大整數對象的a次冪。

    *public String toString() ?返回當前大整數對象十進制的字符串表示。

    *public String toString(int p) ?返回當前大整數對象p進制的字符串表示。

    Random類 :

    ??Java提供了更為靈活的用于獲得隨機數的Random類(該類在java.util包中)。 Random類的如下構造方法:

    ?????public Random();

    ?????public Random(long seed);使用參數seek指定的種子創建一個Random對象

    ?????人們習慣地將Random對象稱為隨機數生成器。

    ?返回一個隨機整數 ??隨機數生成器random調用不帶參數的nextInt()方法:

    ??????Random random=new Random();

    ??????random.nextInt();

    ◆ 返回一個0至n之間(包括0,但不包括n)的隨機數 隨機數生成器random調用帶參數的nextInt(int m)方法(參數m必須取正整數值)

    ????例如,random.nextInt(100);返回一個0至100之間的隨機整數(包括0,但不包括100)

    ◆ 隨機得到true和false兩個表示真和假的boolean值, 隨機數生成器random調用nextBoolean()方法

    ???例如 random.nextBoolean();返回一個隨機boolean值。

    Formatter 類:

    Formatter類提供了一個和C語言printf函數類似的format方法:

    format(格式化模式,值列表)

    該方法按著“格式化模式”返回“值列表”的字符串表示。

    Java已經將format方法做為了String類的靜態方法,因此,程序可以直接使用String類調用format方法對數字進行格式化。

    1.格式化模式 ?format方法中的“格式化模式”是一個用雙引號括起的字符序列(字符串),該字符序列中的字符由格式符和普通字符所構成。

    例如:"輸出結果%d,%f,%d"中的%d和%f是格式符號 .

    ?????format方法返回的字符串就是“格式化模式”中的格式符被替換為它得到的格式化結果后的字符串。例如:String s = String.format(“%.2f”,3.141592);那么s就是“3.14”.

    2.值列表 ??format方法中的“值列表”是用逗號分隔的變量、常量或表達式。 例如:

    String s=format("%d元%0.3f公斤%d臺",888,999.777666,123); 那么,s就是"888元999.778公斤123臺"。

    3.格式化順序

    format方法默認按從左到右的順序使用“格式化模式”中的格式符來格式化“值列表”中對應的值,而“格式化模式”中的普通字符保留原樣。

    例如,假設int型變量x和double型變量y的值分別是888和3.1415926,

    那么對于String s = format("從左向右:%d,%.3f,%d",x,y,100);字符串s就是:從左向右:888,3.142,100

    格式化整數:

    1.%d,%o,%x和%格式符可格式化byte、Byte、short、Short、int、Integer、long和Long型數據,詳細說明見Page204. 例如,對于:

    String s = String.format("%d,%o,%x,%X",703576,703576,703576,703576);

    字符串s就是:703576,2536130,abc58,ABC58

    2.修飾符

    加號修飾符"+"格式化正整數時,強制添加上正號,例如,%+d將123格式化為"+123"。

    逗號修飾符“,”格式化整數時,按"千"分組,例如,對于:

    String s=String.format("按千分組:%,d。按千分組帶正號%+,d",1235678,9876);

    字符串s就是:按千分組:1,235,678。按千分組帶正號+9,876

    3.數據的寬度

    數據的寬度就是format方法返回的字符串的長度。規定數據寬度的一般格式為“%md”,其效果是在數字的左面增加空格;或"%-md“,其效果是在數字的右面增加空格,

    例如,將數字59格式化為寬度為8的字符串:String s=String.format("%8d",59);

    字符串s就是:" ?????59",其長度(s.length())為8,即s在59左面添加了6個空格字符。

    對于:String s=String.format(“%-8d”,59);字符串s就是:"59 ???????",其長度(s.length())為8。

    對于:String s=String.format("%5d%5d%8d",59,60,90);字符串s就是:" ??59 ??60 ?????90"(長度為18

    格式化浮點數 :

    1.%f,%e(%E),%g(%G)和%a(%A)格式符可格式化float、Float、double和Double:

    ???%f 將值格式化為十進制浮點數,小數保留6位。

    ???%e(%E) 將值格式化為科學記數法的十進制的浮點數(%E在格式化時將其中的指數符號大寫,例如5E10)。

    例如,對于:String s = String.format("%f,%e",13579.98,13579.98);

    字符串s就是:13579.980000,1.357998e+04

    2.修飾符

    加號修飾符"+"格式化正數時,強制添加上正號,例如%+f將123.78格式化為"+123.78", %+E將123.78格式化為"+1.2378E+2"。 逗號修飾符“,”格式化浮點數時,將整數部分按“千”分組,

    例如,對于:String s=String.format("整數部分按千分組: %+,f",1235678.9876);

    字符串s就是:整數部分按千分組:+1,235,678.987600

    3.限制小數位數與數據的“寬度”

    ?????◆ ?"%.nf"可以限制小數的位數,其中的n是保留的小數位數,例如%.3f將6.1256格式化為"6.126"(保留3位小數)。

    ?規定寬度的一般格式為“%mf”(在數字的左面增加空格),或“%-md”(在數字的右面增加空格)。

    例如,將數字59.88格式化為寬度為11的字符串

    String s=String.format(“%11f”,59.88); 字符串s就是:" ?59.880000",其長度(s.length())為11。

    String s=String.format(“%-11f”,59.88);字符串s就是: "59.880000 ?",其長度(s.length())為11。

    ◆在指定寬度的同時也可以限制小數位數(%m.nf),

    String s=String.format(“%11.2f”,59.88); ?字符串s就是:" ?????59.88",即s在59.88左面添加了6個空格字符。

    ◆ 在寬度的前面增加前綴0,表示用數字0(不用空格)來填充寬度左面的富裕部分,例如:

    String s=String.format(“%011f”,59.88); 字符串s就是:"0059.880000",其長度(s.length())11

    StringBuffer對象的創建:

    StringBuffer類能創建可修改的字符串序列,該類的對象的實體的內存空間可以自動的改變大小,便于存放一個可變的字符序列。一個StringBuffer對象調用append方法可以追加字符序列,如圖819所示。例如:

    StringBuffer s = new StringBuffer("我喜歡");

    s.append("玩籃球"); ??

    StringBuffer類有三個構造方法:

    1.StringBuffer()

    2.StringBuffer(int size)

    3.StringBuffer(String s)

    StringBuffer類的常用方法:

    1.StringBuffer append(String s):將一個字符串對象追加到當前StringBuffer對象中 StringBuffer append(int n):將一個int型數據轉化為字符串對象后再追加到當前StringBuffer對象中StringBuffer append(Object o):將一個Object對象的字符串表示追加到當前StringBuffer對象中

    類似的方法還有:

    ???StringBuffer append(long n),StringBuffer append(boolean n),

    ???StringBuffer append(float n),StringBuffer append(double n),

    ???StringBuffer append(char n)

    2.public chat charAt(int n ):得到參數n指定的置上的單個字符

    ???public void setCharAt(int n ,char ch):將當前StringBuffer對象實體中的字符串位置n處的字符用參數ch指定的字符替換

    3.StringBuffer insert(int index, String str) :將參數str指定的字符串插入到參數index指定的位置

    4.public StringBuffer reverse() :將該對象實體中的字符翻轉

    5.StringBuffer delete(int startIndex, int endIndex):從當前StringBuffer對象實體中的字符串中刪除一個子字符串

    ???其相關方法:deleteCharAt(int index) 刪除當前StringBuffer對象實體的字符串中index位置處的一個字符。

  • StringBuffer replace(int startIndex,int endIndex,String str):將當前StringBuffer對象實體中的字符串的一個子字符串用參數str指定的字符串替換 ???
  • Pattern與Matcher類:

    Java提供了專門用來進行模式匹配的Pattern類和Matcher類,這些類在java.util.regex包中。 ?以下結合具體問題來講解使用Pattern類和Matcher類的步驟。假設有字符串:

    String input = "hello,good morning,this is a good idea"

    我們想知道input從哪個位置開始至哪個位置結束曾出現了字符串good。

    使用Pattern類和Matcher類檢索字符串str中的子字符串的步驟如下:

    1.建立模式對象

    使用正則表達式regex做參數得到一個稱為模式的Pattern類的實例pattern:

    例如:String regex = "good";

    ?????Pattern pattern = Pattern.compile(regex);

    模式對象是對正則表達式的封裝。Pattern類調用類方法compile(String regex)返回一個模式對象,其中的參數regex是一個正則表達式, 稱為模式對象使用的模式。

    2.得到匹配對象

    ?????模式對象pattern調用matcher(CharSequence input)方法返回一個Matcher對象matcher,稱為匹配對象 ????????????

    Matcher matcher = pattern.matcher(input);

    Matcher對象matcher可以使用下列方法尋找字符串input中是否有和模式regex匹配的子序列(regex是創建模式對象pattern時使用的正則表達式)。

    ◆public boolean find():尋找input和regex匹配的下一子序列,如果成功該方法返回true,否則返回false。

    ◆ public boolean matches():matcher調用該方法判斷input是否完全和regex匹配。

    ◆ public boolean lookingAt():matcher調用該方法判斷從input的開始位置是否有和regex匹配的子序列。

    ◆ public boolean find(int start) : matcher調用該方法判斷input從參數start指定位置開始是否有和regex匹配的子序列 。

    ◆ public String replaceAll(String replacement) matcher調用該方法可以返回一個字符串,該字符串是通過把input中與模式regex匹配的子字符串全部替換為參數replacement指定的字符串得到的.

    ◆ public String replaceFirst(String replacement) matcher調用該方法可以返回一個字符串,該字符串是通過把input中第1個與模式regex匹配的子字符串替換為參數replacement指定的字符串得到的。

    使用Class實例化一個對象 :

    ?Class是java.lang包中的類,該類的實例可以幫助程序創建其他類的實例或者取得其他類的對象的內部信息。

    創建對象最常用的方式就是使用new運算符和類的構造方法,實際上也可以使用Class對象得到某個類的實例。步驟如下:

    (1)使用Class的類方法得到一個和某類(參數className指定的類)相關的Class對象:

    ?public static Class forName(String className) throws ClassNotFoundException

    ?上述方法返回一個和參數className指定的類相關的Class對象。

    (2)步驟(1)中獲得的Class對象調用

    public Object newInstance() throws InstantiationException,IllegalAccessException

    方法就可以得到一個className類的對象。要特別注意的是:使用Class對象調用newInstance()實例化一個className類的對象時,className類必須有無參數的構造方法。

    獲取類的有關信息 :

    Class對象經常調用的方法如下:

    ◆ String getName() 返回類的名字

    ◆ Constructor[] getDeclaredConstructors() ?返回類的全部構造方法。

    ◆ Field[] getDeclaredFields() ?返回類的全部成員變量。

    ◆ Method[] getDeclaredMethods() ?返回類的全部方法。

    ?Java Swing概述 :

    ?javax.swing包中JComponent類是java.awt包中Container類的一個直接子類、是java.awt包中Component類的一個間接子類,學習GUI編程主要是學習掌握使用Component類的一些重要的子類。以下是GUI編程經常提到的基本知識點 。

    (1)Java把Component類的子類或間接子類創建的對象稱為一個組件。

    (2)Java把Container的子類或間接子類創建的對象稱為一個容器。

    (3)可以向容器添加組件。Container類提供了一個public方法:add( ),一個容器可以調用這個方法將組件添加到該容器中。

    (4)容器調用removeAll()方法可以移掉容器中的全部組件;調用remove(Component c)方法可以移掉容器中參數c指定的組件。

    (5)注意到容器本身也是一個組件,因此可以把一個容器添加到另一個容器中實現容器的嵌套。

    (6)每當容器添加新的組件或移掉組件時,應當讓容器調用validate()方法,以保證容器中的組件能正確顯示出來

    窗口 :

    Java提供的JFrame類的實例是一個底層容器,即通常所稱的窗口。其他組件必須被添加到底層容器中,以便借助這個地層容器和操作系統進行信息交互。 JFrame類是Container類的間接子類。當需要一個窗口時,可使用JFrame或其子類創建一個對象

    ???JFrame常用方法 :

    JFrame() 創建一個無標題的窗口。

    JFrame(String s) 創建標題為s的窗口。

    public void setBounds(int a,int b,int width,int height 設置窗口的初始位置是(a,b),即距屏幕左面a個像素、距屏幕上方b個像素;窗口的寬是width,高是height。

    public void setSize(int width,int height) 設置窗口的大小。

    public void setLocation(int x,int y) 設置窗口的位置,默認位置是(0,0)。

    public void setVisible(boolean b) 設置窗口是否可見,窗口默認是不可見的。

    public void setResizable(boolean b) 設置窗口是否可調整大小,默認可調整大小。

    public void dispose() 撤消當前窗口,并釋放當前窗口所使用的資源。

    public void setExtendedState(int state) 設置窗口的擴展狀態.

    public void setDefaultCloseOperation(int operation) ?該方法用來設置單擊窗體右上角的關閉圖標后,程序會做出怎樣的處理。

    菜單條、菜單、菜單項 :

    1.菜單條

    ????JComponent類的子類JMenubar負責創建菜單條,JFrame類有一個將菜單條放置到窗口中的方法:setJMenuBar(JMenuBar bar);該方法將菜單條添加到窗口的頂端

    2.菜單:JComponent類的子類JMenu負責創建菜單, JMenu類的主要方法有以下幾種

    ???public void add(JMenuItem item) 向菜單增加由參數item指定的菜單選項。

    ???public JMenuItem getItem(int n) 得到指定索引處的菜單選項。

    ???public int getItemCount() 得到菜單選項的數目。

    3.菜單項

    ???JComponent類的子類JMenuItem負責創建菜單項,JMenuItem類的主要方法有以下幾種:

    ??JMenuItem(String s) 構造有標題的菜單項。

    ??JMenuItem(String text, Icon icon) 構造有標題和圖標的菜單項

    ??public void setAccelerator(KeyStroke keyStroke) 為菜單項設置快捷鍵。

    常用組件 :

    1.文本框:由JComponent的子類JTextField創建文本框。

    2.文本區:由JComponent的子類JTexArea創建文本區。

    3.按鈕:由JComponent的子類JButton類用來創建按鈕。

    4.標簽:由JComponent的子類JLabel類用來創建標簽。

    5.選擇框:由JComponent的子類JCheckBox類用來創建選擇框。

    6.單選按鈕:由JComponent的子類JRadioButton類用來創建單項選擇框。

    7.下拉列表:由JComponent的子類JComboBox類用來創建下拉列表。

    8.密碼框:由JComponent的子類JPasswordField創建密碼框。

    密碼框可以使用setEchoChar(char c)重新設置回顯字符 。

    密碼框調用char[] getPassword()方法可以返回實際的密碼

    常用容器:

    ?JComponent是Container的子類,因此JComponent子類創建的組件也都是容器。容器經常用來添加組件。Jframe是底層容器,本節提到的容器被習慣地稱做中間容器,中間容器必須被添加到底層容器中才能發揮作用。

    1.JPanel 面板:使用JPanel創建面板,再向這個面板添加組件,然后把這個面板添加到其它容器中。JPanel面板的默認布局是FlowLayout布局。

    2.滾動窗格JScrollPane:可以將文本區放到一個滾動窗格中。

    ?JScorollPane scroll=new JScorollPane(new JTextArea());

    3.拆分窗格JSplitPane:窗格有兩種類型:水平拆分和垂直拆分

    JSplitPane的兩個常用的構造方法:

    ??JSplitPane(int a,Component b,Component c)

    ??JSplitPane(int a, boolean b,Component c,Component d) ?

    4.JLayeredPane分層窗格:分層窗格使用

    add(Jcomponent com, int layer);添加組件com,并指定com所在的層

    public void setLayer(Component c,int layer)可以重新設置組件c所在的層

    public int getLayer(Component c)可以獲取組件c所在的層數。

    常用布局:

    ?容器可以使用方法setLayout(布局對象);設置自己的布局,控制組件在容器中的位置。 ?

    1.FlowLayout布局 :

    1)創建布局對象 FlowLayout flow=new FlowLayout();

    2)容器con使用布局對象con.setLayout(flow);

    3)con可以使用Container類提供的add方法將組件順序地添加到容器中;

    FlowLayout布局對象調用相應的方法可以重新設置布局的對齊方式等.

    2.BorderLayout布局 :

    BorderLayout 布局是Window型容器的默認布局 。

    使用BorderLayout布局的容器con,可以使用add方法將一個組件b添加到中心區域:con.add(b,BorderLayout.CENTER);或 ?con.add(BorderLayour.CENTER,b);

    3.CardLayout 布局 : ?使用CardLayout的一般步驟如下:

    ??1)創建CardLayout對象 CardLayout card=new CardLayout();

    ??2)為容器設置布局 con.setLayout(card);

    ??3)容器調用add(String s,Component b)將組件b加入容器,并給出了顯示該組件的代號s。

    ??4)布局對象card用CardLayout類提供的show()方法,顯示容器con中組件代號為s的組件:card.show(con,s);

    4.GridLayout布局 :

    GridLayout布局策略是把容器劃分成若干行乘若干列的網格區域,組件就位于這些劃分出來的小格中。 GridLayout布局編輯器的一般步驟如下:

    1)創建布局對象,指定劃分網格的行數m和列數n GridLayout grid=new new GridLayout(10,8);

    2)使用GridLayout布局的容器調用方法add(Component c)將組件c加入容器。

    5.BoxLayout布局:

    使用盒式布局的容器將組件排列在一行或一列 .BoxLayout布局的一般步驟如下:

    1)創建布局對象,使用BoxLayou的構造方法BoxLayout(Container con,,int axis)可以創建一個盒式布局對象.

    2)可以使用Box類的類(靜態)方法 createHorizontalBox()獲得一個具有行型盒式布局的盒式容器; ?使用Box類的類(靜態)方法 createVerticalBox()獲得一個具有列型盒式布局的盒式容器。

    3)控制盒式布局容器中組件之間的距離

    Box類調用靜態方法createHorizontalStrut(int width)可以得到一個不可見的水平Struct對象,稱做水平支撐。 Box類調用靜態方法createVertialStrut(int height)可以得到一個不可見的垂直Struct對象,稱做垂直支撐。

    例子5 ?Example9_5.java ?WindowBoxLayout.java

    兩個列型盒式容器boxV1、boxV2和一個行型盒式容器baseBox。

    在列型盒式容器的組件之間添加垂直支撐,控制組件之間的距離,將boxV1、boxV2添加到baseBox中,并在它倆之間添加了水平支撐。程序運行效果如圖9.6。

    6.null布局 :

    空布局容器可以準確地定位組件在容器的位置和大小。組件調用setBounds(int a,int b,int width,int height)方法可以設置本身的大小和在容器中的位置。

    處理事件:

    學習組件除了要熟悉組件的屬性和功能外,一個更重要的方面是學習怎樣處理組件上發生的界面事件。當用戶在文本框中鍵入文本后按回車鍵、單擊按鈕、在一個下拉式列表中選擇一個條目等操作時,都發生界面事件。

    程序有時需對發生的事件作出反應,來實現特定的任務,例如,用戶單擊一個名字叫“確定”或名字叫“取消”的按鈕,程序可能需要作出不同的處理。

    ?事件處理模式 :

    1.事件源 :能夠產生事件的對象都可以成為事件源 .

    2.監視器 :事件源通過調用相應的方法將某個對象注冊為自己的監視器。對于文本框,這個方法是:addActionListener(監視器);事件源注冊監視器之后,相應的操作就會導致相應的事件的發生,并通知監視器,監視器就會作出相應的處理。

    3.處理事件的接口:

    監視器負責處理事件源發生的事件。監視器是一個對象,為了處理事件源發生的事件,監視器這個對象會自動調用一個方法來處理事件。 Java規定:為了讓監視器這個對象能對事件源發生的事件進行處理,創建該監視器對象的類必須聲明實現相應的接口,那么當事件源發生事件時,監視器就自動調用被類重寫的某個接口方法

    ActionEvent事件:

    ?1. ActionEvent事件源 :

    文本框、按紐、菜單項、密碼框和單選按紐都可以觸發ActionEvent事件,即都可以成為ActionEvent事件的事件源。

    2.注冊監視器: 能觸發ActionEvent事件的組件使用

    addActionListener(ActionListener listen)

    將實現ActionListener接口的類的實例注冊為事件源的監視器。

    3.ActionListener接口 :

    ActionListener接口在java.awt.event包中,該接口中只有一個方法:

    public void actionPerformed(ActinEvent e)

    事件源觸發ActionEvent事件后,監視器將發現觸發的ActionEvent事件,然后調用接口中的方法:actionPerformed(ActinEvent e)對發生的事件作出處理。ActionEvent類事先創建的事件對象就會傳遞給該方法的參數e。 ?

    4.ActionEvent類中的方法 :

    public Object getSource() 調用該方法可以獲取發生ActionEvent事件的事件源對象的引用。

    public String getActionCommand() 調用該方法可以獲取發生ActionEvent事件時,和該事件相關的一個命令字符串。

    ItemEvent事件:

    1.ItemEvent事件源 :選擇框、下拉列表都可以觸發ItemEvent事件。

    2.注冊監視器:能觸發ItemEvent事件的組件使用

    addItemListener(ItemListener listen)

    將實現ItemListener接口的類的實例注冊為事件源的監視器。

    3.ItemListener接口 :

    ItemListener接口在java.awt.event包中,該接口中只有一個方法:

    public void itemStateChanged(ItemEvent e)

    事件源觸發ItemEvent事件后,監視器將發現觸發的ItemEvent事件,然后調用接口中的itemStateChanged(ItemEvent ?e)方法對發生的事件作出處理。ItemEvent類事先創建的事件對象就會傳遞給該方法的參數e。

    4. ItemEvent類中的方法 :

    getSource()方法返回發生Itemevent事件的事件源外

    getItemSelectable()方法返回發生Itemevent事件的事件源。

    ?DocumentEvent事件:

  • DocumentEvent事件源 :文本區所維護的文檔能觸發DocumentEvent事件 ?
  • 2.注冊監視器:能觸發DocumentEven事件的事件源使用

    addDucumentListener(DocumentListener listen)

    將實現DocumentListener接口的類的實例注冊為事件源的監視器。

    3.DocumentListener接口 :

    DocumentListener接口在javax.swing.event包中,該接口中有三個方法:

    public void changedUpdate(DocumentEvent e) ???

    public void removeUpdate(DocumentEvent e)

    public void insertUpdate(DocumentEvent e)

    MouseEvent事件:

    任何組件上都可以發生鼠標事件,如:鼠標進入組件、退出組件、在組件上方單擊鼠標、拖動鼠標等都觸發鼠標事件,即導致MouseEvent類自動創建一個事件對象。

    ?1.使用MouseListener接口可以處理以下5種操作觸發的鼠標事件

    ????在事件源上按下鼠標鍵、在事件源上釋放鼠標鍵、在事件源上擊鼠標鍵、鼠標進入事件源、鼠標退出事件源。

    ?? MouseEvent 中有下列幾個重要的方法:

    ???getX() 獲取鼠標指針在事件源坐標系中的x-坐標。

    ???getY() 獲取鼠標指針在事件源坐標系中的y-坐標。

    ???getModifiers() 獲取鼠標的左鍵或右鍵。

    ???getClickCount() 獲取鼠標被單擊的次數。

    ???getSource() 獲取發生鼠標事件的事件源。

    ??事件源注冊監視器的方法是addMouseListener(MouseListener listener)。

    ?? MouseListener接口中有如下方法:

    ???mousePressed(MouseEvent) 負責處理在組件上按下鼠標鍵觸發的鼠標事件

    ???mouseReleased(MouseEvent) 負責處理在組件上釋放鼠標鍵觸發的鼠標事件

    ???mouseEntered(MouseEvent) 負責處理鼠標進入組件觸發的鼠標事件

    ???mouseExited(MouseEvent) 負責處理鼠標離開組件觸發的鼠標事件

    ???mouseClicked(MouseEvent) 負責處理在組件上單擊鼠標鍵觸發的

    2.使用MouseMotionListener接口可以處理以下兩種操作觸發的鼠標事件, ?在事件源上拖動鼠標、在事件源上移動鼠標。

    ?? 事件源注冊監視器的方法是

    ????addMouseMotionListener(MouseMotionListener listener)。

    ?? MouseMotionListener接口中有如下方法:

    ????mouseDragged(MouseEvent) ?負責處理拖動鼠標觸發的鼠標事件。

    mouseMoved(MouseEvent) ?負責處理移動鼠標觸發的鼠標事件。

    ??焦點事件:

    1.焦點事件源 :組件可以觸發焦點事件。

    2.注冊監視器:組件可以使用

    ????addFocusListener(FocusListener listener)

    注冊焦點事件監視器。

    3.FocusListener接口 :

    ???創建監視器的類必須要實現FocusListener接口,該接口有兩個方法:

    ??????public void focusGained(FocusEvent e)

    ??????public void focusLost(FocusEvent e)

    ???當發生FocusEvent事件時,監視器調用類實現的接口中的相應方法。

    ?4.組件也可調用

    ???????public boolean requestFocusInWindow()

    方法可以獲得輸入焦點。

    鍵盤事件:

    當一個組件處于激活狀態時,敲擊鍵盤上一個鍵就導致這個組件觸發鍵盤事件。

    1.某個組件使用addKeyListener方法注冊監視器。

    2.接口KeyListener中有如下方法:

    ??public void keyPressed(KeyEvent e),

    ??public void keyTyped(KeyEvent e),

    ??public void KeyReleased(KeyEvent e) ?

    3.相關方法:

    ???public int getKeyCode()判斷哪個鍵被按下、敲擊或釋放,返回一個鍵碼值 。 ?????

    ???getKeyChar()判斷哪個鍵被按下、敲擊或釋放,返回鍵上的字符。

    ?窗口事件:

    JFrame及子類創建的窗口可以調用

    setDefaultCloseOperation(int operation);

    方法設置窗口的關閉方式(如前面各個例子所示).

    但是setDefaultCloseOperation方式可能不能滿足程序的需要,比如,用戶單擊窗口上的關閉圖標時,可能程序需要提示用戶是否需要保存窗口中的有關數據到磁盤等 .

  • WindowListener接口.
  • ?public void windowActivated(WindowEvent e) ?當窗口從非激活狀態到激活時,窗口的監視器調用該方法。
  • ?public void windowDeactivated(WindowEvent e) ?當窗口激活狀態到非激活狀態時,窗口的監視器調用該方法。
  • ?public void windowClosing(WindowEvent e) ?當窗口正在被關閉時,窗口的監視器調用該方法。
  • ?public void windowClosed(WindowEvent e) ?當窗口關閉后,窗口的監視器調用該方法。(5) public void windowIconified(WindowEvent e) ?當窗口圖標化時,窗口的監視器調用該方法。
  • 6) public void windowDeiconified(WindowEvent e) ?當窗口撤消圖標化時,窗口的監視器調用該方法。

    7) public void windowOpened(WindowEvent e) ?當窗口打開時,窗口的監視器調用該方法。

    2. WindowAdapter適配器 .

    適配器可以代替接口來處理事件,當Java提供處理事件的接口中多于一個方法時,Java相應地就提供一個適配器類,比如WindowAdapter類。適配器已經實現了相應的接口,例如WindowAdapter類實現了WindowListener接口。因此,可以使用WindowAdapte的子類創建的對象做監視器,在子類中重寫所需要的接口方法即可。

    匿名類實例或窗口做監視器:

    匿名類的方便之處是匿名類的外嵌類的成員變量在匿名類中仍然有效,當發生事件時,監視器就比較容易操作事件源所在的外嵌類中的成員.當事件的處理比較簡單、系統也不復雜時,使用匿名類做監視器是一個不錯的選擇。

    讓事件源所在的類的實例作為監視器,能讓事件的處理比較方便,這是因為,監視器可以方便的操作事件源所在的類中的其他成員。當事件的處理比較簡單,系統也不復雜時,讓事件源所在的類的實例作為監視器是一個不錯的選擇。

    事件總結:

    1.授權模式

    Java的事件處理是基于授權模式,即事件源調用調用方法將某個對象注冊為自己的監視器。

    2.接口回調

    addXXXListener(XXXListener listener)方法中的參數是一個接口,listener可以引用任何實現了該接口的類所創建的對象,當事件源發生事件時,接口listener立刻回調被類實現的接口中的某個方法。

    3.方法綁定

    當事件源觸發事件發生后,監視器準確知道去調用哪個方法。

    4.保持松耦合

    當事件源觸發事件發生后,系統知道某個方法會被執行,但無須關心到底是哪個對象去調用了這個方法,因為任何實現接口的類的實例(做為監視器)都可以調用這個方法來處理事件

    ?

    ?使用MVC結構 :

    ?模型-視圖-控制器(Model-View-Controller),簡稱為MVC。

    ???MVC是一種先進的設計結構,其目的是以會話形式提供方便的GUI支持。

    ???MVC是一種通過三個不同部分構造一個軟件或組件的理想辦法:

    ?模型(model) ?用于存儲數據的對象。

    ?視圖(view) ??為模型提供數據顯示的對象。

    ?控制器(controller)處理用戶的交互操作,對于用戶的操作作出響應,讓模型和視圖進行必要的交互,即通過視圖修改、獲取模型中的數據;當模型中的數據變化時,讓視圖更新顯示。

    對話框 :

    JDialog類和JFrame都是Window的子類,二者的實例都是底層容器。

    JDialog類創建的對話框必須要依賴于某個窗口。

    對話框分為無模式和有模式兩種。

    有模式的對話框:當這個對話框處于激活狀態時,只讓程序響應對話框內部的事件,而且將堵塞其它線程的執行,用戶不能再激活對話框所在程序中的其它窗口,直到該對話框消失不可見。

    無模式對話框:當這個對話框處于激活狀態時,能再激活其它窗口,也不堵塞其它線程的執行。

    消息對話框 :

    消息對話框是有模式對話框,進行一個重要的操作動作之前,最好能彈出一個消息對話框。可以用javax.swing包中的JOptionPane類的靜態方法:

    ????public static void showMessageDialog(

    ???????????????????????Component parentComponent,

    ???????????????????????String message,

    ???????????????????????String title,

    ???????????????????????int messageType)

    創建一個消息對話框。

    輸入對話框 :

    輸入對話框含有供用戶輸入文本的文本框、一個確認和取消按鈕,是有模式對話框 。

    可以用javax.swing包中的JOptionPane類的靜態方法:

    ??public static String showInputDialog(Component parentComponent,

    ??????????????????????????????????????Object message,

    ??????????????????????????????????????String title,

    ??????????????????????????????????????int messageType)

    ??創建一個輸入對話框。

    確認對話框 :

    確認對話框是有模式對話框。

    可以用javax.swing包中的JOptionPane類的靜態方法:

    public static int showConfirmDialog(Component parentComponent,

    ????????????????????????????????????Object message,

    ????????????????????????????????????String title,

    ????????????????????????????????????int optionType)

    ?得到一個確認對話框。

    顏色對話框:

    ?可以用javax.swing包中的JColorChooser類的靜態方法: public static Color showDialog(Component component, ???????

    ????????????????????????????????????????String title,

    ????????????????????????????????????????Color initialColor)

    創建一個有模式的顏色對話框 ?。

    自定義對話框:

    創建對話框與創建窗口類似,通過建立JDialog的子類來建立一個對話框類,然后這個類的一個實例,即這個子類創建的一個對象,就是一個對話框。對話框是一個容器,它的默認布局是BorderLayout,對話框可以添加組件,實現與用戶的交互操作。

    構造對話框的2個常用構造方法

    JDialog() 構造一個無標題的初始不可見的對話框,對話框依賴一個默認的不可見的窗口,該窗口由Java運行環境提供。

    JDialog(JFrame owner) 構造一個無標題的初始不可見的無模式的對話框,owner是對話框所依賴的窗口,如果owner取null,對話框依賴一個默認的不可見的窗口,該窗口由Java運行環境提供。

    樹組件與表格組件:

    樹組件:

  • DefaultMutableTreeNode節點
  • DefaultMutableTreeNode類的兩個常用的構造方法是:

    DefaultMutableTreeNode(Object userObject)

    DefaultMutableTreeNode(Object userObject,boolean allowChildren)

    2.樹上的TreeSelectionEvent事件

    使用addTreeSelectionListener(TreeSelectionListener listener)方法獲得一個監視器。

    表格組件:

    表格組件以行和列的形式顯示數據,允許對表格中的數據進行編輯。表格的模型功能強大、靈活并易于執行。表格是最復雜的組件,對于初學者,這里只介紹默認的表格模型。

    JTable有7個構造方法,這里介紹常用的三個。

    ?????JTable() 創建默認的表格模型。

    ?????JTable(int a,int b) 創建a行,b列的默認模型表格

    ?????JTable (Object data[][],Object ?columnName[]) 創建默認表格模型對象,并且顯示由data指定的二維數組的值,其列名由數組columnName指定。

    通過對表格中的數據進行編輯,可以修改表格中二維數組data中對應的數據數據。在表格中輸入或修改數據后,需按回車或用鼠標單擊表格的單元格確定所輸入或修改的結果。當表格需要刷新顯示時,讓表格調用repaint方法。

    按鈕綁定到鍵盤 :

    (1) 獲取輸入映射. ??按鈕首先調用

    ???public final InputMap getInputMap(int condition) ?

    ???方法返回一個InputMap對象.

    (2)綁定按鈕的鍵盤操作. ??步驟(1)返回的輸入映射首先調用方法

    ???public void put(KeyStroke keyStroke,Object actionMapKey)

    ??將敲擊鍵盤上的某鍵指定為按鈕的鍵盤操作.

    (3)為按鈕的鍵盤操作指定監視器. ???按鈕調用方法

    ????public final ActionMap getActionMap()

    ????返回一個ActionMap對象:

    ????ActionMap actionmap = button.getActionMap();

    ????然后,該對象actionmap調用方法:

    ????public void put(Object key,Action action)

    ????為按鈕的鍵盤操作指定監視器

    打印組件:

    步驟如下:

    1.獲取ToolKit對象

    讓組件調用getToolkit()方法返回系統提供的Toolkit對象。

    2.獲得PrintJob對象

    Toolkit對象調用getPrintJob()方法返回一個PrintJob對象。

    3.獲取Graphics對象

    PrintJob對象使用getGraphics()方法獲得一個Graphics對象。

    4.打印組件

    步驟3獲取的Graphics對象是g,組件調用

    paintAll(g)

    將打印出該組件及其子組件。如果調用方法:

    pain(g)

    平臺無關:

    在一個計算機上編譯得到的字節碼文件可以復制到任何一個安裝了Java運行環境的計算機上直接使用。字節碼由Java虛擬機負責解釋運行,即Java虛擬機負責將字節碼翻譯成本地計算機的機器碼,并將機器碼交給本地的操作系統來運行。

    Java程序的開發步驟 :

    1.編寫源文件:擴展名必須是.java。

    2.編譯Java源程序:用Java編譯器(javac.exe)編譯源文件,得到字節碼文件。

    3.運行Java程序:使用Java解釋器(java.exe)來解釋執行字節碼文件。 ?

    保存源文件:

    如果源文件中有多個類,那么只能有一個類是public類;如果有一個類是public類,那么源文件的名字必須與這個類的名字完全相同,擴展名是java;如果源文件沒有public類,那么源文件的名字只要和某個類的名字相同,并且擴展名是java就可以了

    標識符:

    用來標識類名、變量名、方法名、類型名、數組名、文件名的有效字符序列稱為標識符,簡單地說,標識符就是一個名字 .

    標識符由字母、下劃線、美元符號和數字組成,長度不受限制。

    標識符的第一個字符不能是數字字符。

    標識符不能是關鍵字(關鍵字見下面的2.1.3節)

    標識符不能是true、false和null(盡管true、false和null不是關鍵字)

    這8種基本數據類型習慣上可分為以下四大類型:

    ??邏輯類型:boolean

    ??整數類型:byte、short、int、long

    ??字符類型:char

    ??浮點類型:float、double

    1.int 型

    ??????????對于int型變量,內存分配給4個字節(byte),占32位。

    2.byte 型 ?

    ????????常量:Java中不存在byte型常量的表示法,但可以把一定范圍內的int型常量

    ??????????賦值給byte型變量。 ?

    ????????變量:使用關鍵字byte來聲明byte 型變量 ?

    ??????????例如: byte x= -12,tom=28,漂亮=98;

    ??????????對于byte型內存分配給1個字節,占8位 。

    3 .short 型

    ????????常量:和byte型類似,Java中也不存在short型常量的表示法,但可以把一定

    ??????????范圍內的int型常量賦值給short型變量。

    ????????變量:使用關鍵字short來聲明short型變量

    ??????????例如: short x=12,y=1234;

    ??????????對于short型變量,內存分配給2個字節,占16位.

    4. long 型

    ????????常量:long型常量用后綴L來表示,例如108L(十進制)、07123L(八進制)、

    ??????????0x3ABCL(十六進制) 。

    ????????變量:使用關鍵字long來聲明long型變量,

    ??????????例如: long width=12L,height=2005L,length;

    ??????????對于long型變量,內存分配給8個字節,占64位。

    簡單數據類型的級別與類型轉換運算:

    Java中數據的基本類型(不包括邏輯類型)按精度從“低”到“高”排列:

    byte ?short ?char ?int ?long ?float ?double

    ★當把級別低的變量的值賦給級別高的變量時,系統自動完成數據類型的轉換

    ★當把級別高的變量的值賦給級別低的變量時,必須使用顯示類型轉換運算。顯示轉換的格式:(類型名)要轉換的值;

    ??例如

    ????int x=(int)34.89;

    ★當把一個int型常量賦值給一個byte和short型變量時,不可以超出這些變量的取值范圍,否則必須進行類型轉換運算;例如,常量128的屬于int型常量,超出byte變量的取值范圍,如果賦值給byte型變量,必須進行byte類型轉換運算(將導致精度的損失),如下所示:

    ?????byte a=(byte)128;

    輸入基本型數據 :

    ??◆可以使用Scanner類創建一個對象:

    ???????????Scanner reader=new Scanner(System.in);

    ??◆reader對象調用下列方法,讀取用戶在命令行(例如,MS-DOS窗口)輸入的各種基本類型數據:

    ?nextBoolean()、 nextByte()、 nextShort()、 nextInt() ??

    ?nextLong()、nextFloat()、nextDouble()

    輸出基本型數據:

    JDK1.5新增了和C語言中printf函數類似的輸出數據的方法,格式如下:

    ?????System.out.printf("格式控制部分",表達式1,表達式2,…表達式n)

    格式控制部分由格式控制符號:%d、%c、%f、%s和普通的字符組成,普通字符原樣輸出。格式符號用來輸出表達式的值。

    輸出數據時也可以控制數據在命令行的位置,例如:%md輸出的int型數據占m列;%m.nf輸出的浮點型數據占m列,小數點保留n位。例如:System.out.printf("%d,%f",12, 23.78);

    數組 :

    1 聲明數組:

    聲明一維數組有下列兩種格式:

    數組的元素類型 數組名[];

    數組的元素類型 [] 數組名;

    例如:

    float boy[];

    char [] cat;

    2 為數組分配元素 :

    為數組分配元素的格式如下:

    數組名 = new 數組元素的類型[數組元素的個數];

    例如: boy = new float[4];

    3數組的引用:

    數組屬于引用型變量,兩個相同類型的數組如果具有相同的引用,它們就有完全相同的元素

    ?

    instanceof 運算符是二目運算符,左面的操作元是一個對象;右面是一個類。當左面的對象是右面的類或子類創建的對象時,該運算符運算的結果是true ,否則是false。

    Java里的語句可分為以下六種:

    1.方法調用語句。如:System.out.println(" Hello");

    2.表達式語句 ??表示式尾加上分號。比如賦值語句:x=23;

    3.復合語句

    ??可以用{ ?}把一些語句括起來構成復合語句,如:

    ???????{ ??z=123+x;

    ???????????System.out.println("How are you");

    ????????}

    4.空語句。 一個分號也是一條語句,稱做空語句。

    5.控制語句。控制語句分為條件分支語句、開關語句和循環語句。

    6.package語句和 import語句。它們和類、對象有關

    for語句與數組 :

    ?JDK1.5后,對for語句的功能給予擴充、增強,以便更好地遍歷數組。語法格式如下:

    for(聲明循環變量:數組的名字) {

    }

    其中,聲明的循環變量的類型必須和數組的類型相同。這種形式的for語句類似自然語言中的“for each”語句,為了便于理解上述for語句,可以將這種形式的for語句中翻譯成“對于循環變量依次取數組的每一個元素的值”。

    ?類體:

    ◆類體的內容由兩部分構:一部分是變量的聲明,用來刻畫屬性;另一部分是方法的定義,用來刻畫行為功能

    類體中變量聲明部分所聲明的變量被稱作成員變量和類的成員變量不同的是,局部變量只在方法內有效,而且與其聲明的位置有關如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即該成員變量在這個方法內暫時失效。如果想在該方法中使用被隱藏的成員變量,必須使用關鍵字this(在4.9節this關鍵字)

    局部變量沒有默認值:

    成員變量有默認值(見后面的4.3節),但局部變量沒有默認值,因此在使用局部變量之前,必須保證局部變量有具體的值

    ???對成員變量的操作只能放在方法中,方法可以對成員變量和該方法體中聲明的局部變量進行操作。在聲明成員變量時可以同時賦予初值,但是不可以在類體中有單獨的賦值語句(不可以有變量的聲明和方法的定義以外的其它語句)

    構造方法與對象的創建 :

    ???類是面向對象語言中最重要的一種數據類型,那么就可以用它來聲明變量。在面向對象語言中,用類聲明的變量被稱作對象。和基本數據類型不同,在用類聲明對象后,還必須要創建對象,即為聲明的對象分配變量(確定對象所具有的屬性),當使用一個類創建一個對象時,也稱給出了這個類的一個實例。通俗的講,類是創建對象的“模板”,沒有類就沒有對象。構造方法和對象的創建密切相關

    構造方法 : 構造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有類型。允許一個類中編寫若干個構造方法,但必須保證他們的參數不同,即參數的個數不同,或者是參數的類型不同。

    創建對象 : ???

    創建一個對象包括對象的聲明和為對象分配變量兩個步驟。

  • 對象的聲明
  • 為聲明的對象分配變量
  • 使用對象 :

    1.對象操作自己的變量(體現對象的屬性)

    ???通過使用運算符“.” 對象操作自己的變量(對象的屬性)

    2.對象調用類中的方法(體現對象的行為)

    ???對象創建之后,可以使用點運算符“.”調用創建它的類中的方法,從而產生一定的行為(功能).

    3. 體現封裝

    ????當對象調用方法時,方法中出現的成員變量就是指分配給該對象的變量。在講述類的時候講過:類中的方法可以操作成員變量。當對象調用方法時,方法中出現的成員變量就是指分配給該對象的變量。

    ?對象的引用和實體 :

    當用類創建一個對象時,類中的成員變量在分配內存空間,這些內存空間稱作該對象的實體或對象的變量,而對象中存放著引用。一個類創建的兩個對象,如果具有相同的引用,那么就具有完全相同的實體。

    參數傳值:

    ?方法中最重要的部分之一就是方法的參數,參數屬于局部變量,當對象調用方法時,參數被分配內存空間,并要求調用者向參數專遞值,即方法被調用時,參數變量必須有具體的值。

    ?傳值機制 :

    ?在Java中,方法的所有參數都是“傳值”的,也就是說,方法中參數變量的值是調用者指定的值的拷貝。例如,如果向方法的int型參數x傳遞一個int值,那么參數x得到的值是傳遞的值的拷貝。

    基本數據類型參數的傳值 :

    對于基本數據類型的參數,向該參數傳遞的值的級別不可以高于該參數的級別 。

    引用類型參數的傳值:

    當參數是引用類型時,“傳值”傳遞的是變量中存放的“引用”,而不是變量所引用的實體

    對象的組合 ?:

    一個類可以把對象作為自己的成員變量,如果用這樣的類創建對象,那么該對象中就會有其它對象,也就是說該對象將其他對象作為自己的組成部分,或者說該對象是由幾個對象組合而成。

    組合與復用 ?:

    如果一個對象a組合了對象b,那么對象a就可以委托對象b調用其方法,即對象a以組合的方式復用對象b的方法。例如,圓錐對象在計算體積時,首先委托圓錐的底(一個Circle對象)bottom調用getArea()方法計算底的面積,然后圓錐對象再計算出自身的體積

    實例變量和類變量的聲明:

    在聲明成員變量時,用關鍵字static給予修飾的稱作類變量,否則稱作實例變量(類變量也稱為static變量,靜態變量)。

    實例變量和類變量的區別:

    1.不同對象的實例變量互不相同

    2.所有對象共享類變量

    3.通過類名直接訪問類變量

    實例方法和類方法的定義:

    類中的方法也可分為實例方法和類方法。方法聲明時,方法類型前面不加關鍵字static修飾的是實例方法、加static關鍵字修飾的是類方法(靜態方法)。

    實例方法和類方法的區別 :

    1.對象調用實例方法

    ???當對象調用實例方法時,該方法中出現的實例變量就是分配給該對象的實例變量;該方法中出現的類變量也是分配給該對象的變量,只不過這個變量和所有的其他對象共享而已。

    2.類名調用類方法

    從而類方法不僅可以被類創建的任何對象調用執行,也可以直接通過類名調用。和實例方法不同的是,類方法不可以操作實例變量,這是因為在類創建對象之前,實例成員變量還沒有分配內存。

    方法重載的語法規則 :

    方法重載的意思是:一個類中可以有多個方法具有相同的名字,但這些方法的參數必須不同,即或者是參數的個數不同,或者是參數的類型不同

    this關鍵字 :

    this是Java的一個關鍵字,表示某個對象。this可以出現在實例方法和構造方法中,但不可以出現在類方法中。this關鍵字出現在類的構造方法中時,代表使用該構造方法所創建的對象.當this關鍵字出現實例方法中時,this就代表正在調用該方法的當前對象。

    在構造方法中使用this ?:

    this關鍵字出現在類的構造方法中時,代表使用該構造方法所創建的對象。

    在實例方法中使用this ?:

    實例方法必須只能通過對象來調用,不能用類名來調用。當this關鍵字出現實例方法中時,代表正在調用該方法的當前對象。

    實例方法可以操作類的成員變量,當實例成員變量在實例方法中出現時,默認的格式是:this.成員變量;

    當static成員變量在實例方法中出現時,默認的格式是:

    ?????類名.成員變量;

    包 :

    包是Java語言中有效地管理類的一個機制。

    包名的目的是有效的區分名字相同的類。不同Java源文件中兩個類名字相同時,它們可以通過隸屬不同的包來相互區分。

    包語句 :

    通過關鍵字package聲明包語句。

    ???????package語句作為Java源文件的第一條語句, 為該源文件中聲明的類指定包名。 ?import 語句 :

    ??一個類可能需要另一個類聲明的對象作為自己的成員或方法中的局部變量,如果這兩個類在同一個包中,當然沒有問題。

    ???如果一個類想要使用的那個類和它不在一個包中,要使用import語句完成使命。

    引入自定義包中的類 :

    用戶程序也可以使用import語句引入非類庫中有包名的類,如:

    ???import tom.jiafei.*;

    訪問權限 :

    ??當用一個類創建了一個對象之后,該對象可以通過“.”運算符操作自己的變量、使用類中的方法,但對象操作自己的變量和使用類中的方法是有一定限制的。

    何謂訪問權限 :

    ???所謂訪問權限是指對象是否可以通過“.”運算符操作自己的變量或通過“.”運算符使用類中的方法。訪問限制修飾符有private、protected和public,都是Java的關鍵字,用來修飾成員變量或方法。

    私有變量和私有方法 :

    用關鍵字private修飾的成員變量和方法稱為私有變量和私有方法。

    對于私有成員變量或方法,只有在本類中創建該類的對象時,這個對象才能訪問自己的私有成員變量和類中的私有方法。

    某個類在另外一個類中創建對象后,如果不希該對象直接訪問自己的變量,即通過“.”運算符來操作自己的成員變量,就應當將該成員變量訪問權限設置為private。面向對象編程提倡對象應當調用方法來改變自己的屬性,類應當提供操作數據的方法,這些方法可以經過精心的設計,使得對數據的操作更加合理

    共有變量和共有方法 :

    用public修飾的成員變量和方法被稱為共有變量和共有方法 。

    我們在任何一個類中用類Tom 創建了一個對象后,該對象能訪問自己的public變量和類中的public方法(也可以通過類名來操作成員變量、方法) 。

    友好變量和友好方法:

    當在另外一個類中用類Tom 創建了一個對象后,如果這個類與Tom類在同一個包中,那么該對象能訪問自己的友好變量和友好方法。 在任何一個與Tom同一包中的類中,也可以通過Tom類的類名訪問Tom類的類友好成員變量和類友好方法。

    受保護的成員變量和方法:

    用protected修飾的成員變量和方法被稱為受保護的成員變量和受保護的方法

    public類與友好類 :

    類聲明時,如果在關鍵字class前面加上public關鍵字,就稱這樣的類是一個public 類 。

    可以在任何另外一個類中,使用public類創建對象。

    如果一個類不加public修飾,這樣的類被稱作友好類。

    在另外一個類中使用友好類創建對象時,要保證它們是在同一包中。

    基本類型的類封裝:

    Java提供了基本數據類型相關的類,實現了對基本數據類型的封裝。這些類分別是:Byte、Integer、Short、Long、Float、Double和Character類。這些類在java.lang包中。

    對象數組:

    如果程序需要某個類的若干個對象,比如Student類的10個對象,顯然如下聲明10個Student對象是不可取的:

    Student stu1,stu2, stu3,stu4,stu5,stu6,stu7,stu8, stu9,stu10;

    正確的做法是使用對象數組,即數組的元素是對象,例如:

    ???????Student [] stu;

    ???????stu = new Student[10];

    需要注意的是,上述代碼僅僅定義了數組stu有10個元素,并且每個元素都是一個Student類型的對象,但這些對象目前都是空對象,因此在使用數組stu中的對象之前,應當創建數組所包含的對象,例如: ???????????

    stu[0] = new Student(); ?

    反編譯和文檔生成器 :

    ◆反編譯器javap.exe可以將字節碼反編譯為源碼,以便查看源碼類中的public方法名字和public成員變量的名字,例如:

    ????javap java.awt.Button

    使用javadoc.exe可以制做源文件類結構的html格式文檔

    jar文件 :

    可以使用jar.exe命令把一些類的字節碼文件壓縮成一個jar文件,然后將這個jar文件存放到Java運行環境的擴展中,即將該jar文件存放在JDK安裝目錄的jre\lib\ext文件夾中。這樣,Java應用程序就可以使用這個jar文件中的類來創建對象了

    將C:\1000\moon\star目錄中的TestOne.class 和TestTwo.class(二者包名是moon.star)壓縮成一個jar文件:Jerry.jar的步驟:

    1. 清單文件:hello.mf(保存到C:\1000)

    Manifest-Version: 1.0

    Class: moon.start.TestOne moon.star.TestTwo

    Created-By: 1.6

    ??2. ?使用jar命令來生成一個名字為Jerry.jar的文件

    C:\1000> jar cfm Jerry.jar hello.mf moon\star\TestOne.class moon\star\TestTwo.class

    子類與父類 :

    ??利用繼承,可以先編寫一個共有屬性的一般類,根據該一般類再編寫具有特殊屬性的新類,新類繼承一般類的狀態和行為,并根據需要增加它自己的新的狀態和行為。

    由繼承而得到的類稱為子類,被繼承的類稱為父類(超類)。

    聲明子類 :

    使用關鍵字extends來定義一個類的子類,格式如下:

    ?????class 子類名 ?extends ?父類名 {

    ???????????…

    ?????}

    類的樹形結構:

    ?Java的類按繼承關系形成樹形結構這個樹形結構中,根節點是Object類

    ????(Object是java.lang包中的類),即Object是所有類的祖先類。

    除了Object類每個類有且僅有一個父類,一個類可以有多個或零個子類。如果一個類(除了Object類)的聲明中沒有使用extends關鍵字,這個類被系統默認為是Object的子類,即類聲明“class A”與“class A extends Object”是等同的。

    子類的繼承性 :

    ?所謂子類繼承父類的成員變量作為自己的一個成員變量,就好象它們是在子類中直接聲明一樣,可以被子類中自己定義的任何實例方法操作。

    所謂子類繼承父類的方法作為子類中的一個方法,就好象它們是在子類中直接定義了一樣,可以被子類中自己定義的任何實例方法調用。

    子類和父類在同一包中的繼承性 :

    如果子類和父類在同一個包中,那么,子類自然地繼承了其父類中不是private的成員變量作為自己的成員變量,并且也自然地繼承了父類中不是private的方法作為自己的方法,繼承的成員變量或方法的訪問權限保持不變。

    子類和父類不在同一包中的繼承性:

    ??如果子類和父類不在同一個包中,那么,子類繼承了父類的protected、public成員變量做為子類的成員變量,并且繼承了父類的protected、public方法為子類的方法,繼承的成員或方法的訪問權限保持不變。

    子類與對象:

    子類對象的特點

    子類的構造方法創建一個子類的對象時,不僅子類中聲明的成員變量被分配了內存,而且父類的成員變量也都分配了內存空間,但只將子類繼承的那部分成員變量作為分配給子類對象的變量 。子類中有一部分方法是從父類繼承的,這部分方法可以操作子類未繼承的變量 。

    成員變量的隱藏 :

    ?對于子類可以從父類繼承的成員變量,只要子類中聲明的成員變量和父類中的成員變量同名時,子類就隱藏了繼承的成員變量,子類自己聲明定義的方法操作與父類同名的成員變量是指子類重新聲明定義的這個成員變量。

    方法重寫(Override):

    ??子類通過重寫可以隱藏已繼承的實例方法。

    1.重寫的語法規則

    如果子類可以繼承父類的某個實例方法,那么子類就有權利重寫這個方法。

    方法重寫是指:子類中定義一個方法,這個方法的類型和父類的方法的類型一致或者是父類的方法的類型的子類型,并且這個方法的名字、參數個數、參數的類型和父類的方法完全相同。

    2.重寫的目的

    子類通過方法的重寫可以隱藏繼承的方法,子類通過方法的重寫可以把父類的狀態和行為改變為自身的狀態和行為。

    重寫的注意事項 :

    重寫父類的方法時,不允許降低方法的訪問權限,但可以提高訪問權限(訪問限制修飾符按訪問權限從高到低的排列順序是:public、protected、友好的、private。)

    用super操作被隱藏的成員變量和方法:

    子類可以隱藏從父類繼承的成員變量和方法,如果在子類中想使用被子類隱藏的成員變量或方法就可以使用關鍵字super。比如super.x、super.play()就是訪問和調用被子類隱藏的成員變量x和方法play().

    使用super調用父類的構造方法:

    子類不繼承父類的構造方法,因此,子類如果想使用父類的構造方法,必須在子類的構造方法中使用,并且必須使用關鍵字super來表示,而且super必須是子類構造方法中的頭一條語句。

    final關鍵字可以修飾類、成員變量和方法中的局部變量。

    可以使用final將類聲明為final類。final類不能被繼承,即不能有子類。如:

    ???final class A {

    ??????… …

    ???}

    如果用final修飾父類中的一個方法,那么這個方法不允許子類重寫。

    如果成員變量或局部變量被修飾為final的,就是常量。

    對象的上轉型對象 :
    ?假設,A類是B類的父類,當用子類創建一個對象,并把這個對象的引用放到父類的對象中時,比如:

    A a;

    a=new B();

    ?或

    A a;

    B b=new B();

    a=b;

    這時,稱對象a是對象b的上轉型對象

    1.上轉型對象不能操作子類新增的成員變量;不能調用子類新增的方法。

    2.上轉型對象可以訪問子類繼承或隱藏的成員變量,也可以調用子類繼承的方法或子類重寫的實例方法。上轉型對象操作子類繼承的方法或子類重寫的實例方法,其作用等價于子類對象去調用這些方法。因此,如果子類重寫了父類的某個實例方法后,當對象的上轉型對象調用這個實例方法時一定是調用了子類重寫的實

    繼承與多態:

    多態性就是指父類的某個方法被其子類重寫時,可以各自產生自己的功能行為

    用關鍵字abstract修飾的類/方法稱為abstract類/方法(抽象類)。如:

    abstract class A {

    ??… …

    }

    注意:

    1.abstract類中可以有abstract方法

    2.abstract類不能用new運算創建對象

    面向抽象編程 :

    ??在設計一個程序時,可以通過在abstract類中聲明若干個abstract方法,表明這些方法在整個系統設計中的重要性,方法體的內容細節由它的非abstract子類去完成。使用多態進行程序設計的核心技術之一是使用上轉型對象,即將abstract類聲明對象作為其子類的上轉型對象,那么這個上轉型對象就可以調用子類重寫的方法。所謂面向抽象編程,是指當設計某種重要的類時,不讓該類面向具體的類,而是面向抽象類,即所設計類中的重要數據是抽類聲明的對象,而不是具體類聲明的對象。Pillar類就是面向抽象類Geometry,Cirle和Rectangle 都是Geometry的子類.

    ?開-閉原則 :

    所謂“開-閉原則”(Open-Closed Principle)就是讓設計的系統應當對擴展開放,對修改關閉。

    在設計系統時,應當首先考慮到用戶需求的變化,將應對用戶變化的部分設計為對擴展開放,而設計的核心部分是經過精心考慮之后確定下來的基本結構,這部分應當是對修改關閉的,即不能因為用戶的需求變化而再發生變化,因為這部分不是用來應對需求變化的。

    ?如果系統的設計遵守了“開-閉原則”,那么這個系統一定是易維護的,因為在系統中增加新的模塊時,不必去修改系統中的核心模塊。

    接口 :

    ??為了克服Java單繼承的缺點,Java使用了接口,一個類可以實現多個接口。

    ??使用關鍵字interface來定義一個接口。接口的定義和類的定義很相似,分為接口的聲明和接口體。

    1.接口聲明

    接口通過使用關鍵字interface來聲明,格式: interface 接口的名字

    2.接口體

    接口體中包含常量定義和方法定義兩部分。

    實現接口 :

    一個類通過使用關鍵字implements聲明自己實現一個或多個接口。

    class A implements Printable,Addable

    如果一個類實現了某個接口,那么這個類必須重寫該接口的所有方法。

    ?Java提供的接口都在相應的包中,通過import語句不僅可以引入包中的類,也可以引入包中的接口,例如:

    import java.io.*;???不僅引入了java.io包中的類,也同時引入了該包中的接口

    理解接口:

    ?接口的思想在于它可以要求某些類有相同名稱的方法,但方法的具體內容(方法體的內容)可以不同,即要求這些類實現接口,以保證這些類一定有接口中所聲明的方法(即所謂的方法綁定)。接口在要求一些類有相同名稱的方法的同時,并不強迫這些類具有相同的父類。比如,各式各樣的電器產品,它們可能歸屬不同的種類,但國家標準要求電器產品都必須提供一個名稱為on的功能(為達到此目的,只需要求它們實現同一接口,該接口中有名字為on的方法),但名稱為on的功能的具體行為由各個電器產品去實現。

    接口回調是指:可以把實現某一接口的類創建的對象的引用賦給該接口聲明的接口變量中,那么該接口變量就可以調用被類重寫的接口方法。實際上,當接口變量調用被類重寫的接口方法時,就是通知相應的對象調用這個方法。

    接口與多態:

    ??可以通過在接口中聲明若干個abstract方法,表明這些方法的重要性,方法體的內容細節由實現接口的類去完成。使用接口進行程序設計的核心思想是使用接口回調,即接口變量存放實現該接口的類的對象的引用,從而接口變量就可以回調類實現的接口方法。

    接口參數 :

    ?如果一個方法的參數是接口類型,我們就可以將任何實現該接口的類的實例的引用傳遞給該接口參數,那么接口參數就可以回調類實現的接口方法。

    ?abstract類與接口的比較 :

    接口和abstract類的比較如下:

    1.abstract類和接口都可以有abstract方法。

    2.接口中只可以有常量,不能有變量;而abstract類中即可以有常量也可以有變量。

    3.abstract類中也可以有非abstract方法,接口不可以。

    ?面向接口編程:

    面向接口去設計程序,可以通過在接口中聲明若干個abstract方法,表明這些方法的重要性,方法體的內容細節由實現接口的類去完成。

    使用接口進行程序設計的核心思想是使用接口回調,即接口變量存放實現該接口的類的對象的引用,從而接口變量就可以回調類實現的接口方法。

    內部類:

    Java支持在一個類中聲明另一個類,這樣的類稱作內部類,而包含內部類的類成為內部類的外嵌類。某種類型的農場飼養了一種特殊種類的牛,但不希望其他農場飼養這種特殊種類的牛,那么這種類型的農場就可以將創建這種特殊種牛的類作為自己的內部類。

    和子類有關的匿名類 :

    ?Java允許我們直接使用一個類的子類的類體創建一個子類對象。

    創建子類對象時,除了使用父類的構造方法外還有類體,此類體被認為是一個子類去掉類聲明后的類體,稱作匿名類。

    假設Bank是類,那么下列代碼就是用Bank的一個子類(匿名類)創建對象:

    ????new Bank () { ?????????

    ????????匿名類的類體

    };

    和接口有關的匿名類 :

    假設Computable是一個接口,那么,Java允許直接用接口名和一個類體創建一個匿名對象,此類體被認為是實現了Computable接口的類去掉類聲明后的類體,稱作匿名類。

    下列代碼就是用實現了Computable接口的類(匿名類)創建對象:

    ??????new Computable() {

    ????????????實現接口的匿名類的類體

    ???????} ; ???

    異常類 :

    所謂異常就是程序運行時可能出現一些錯誤,比如試圖打開一個根本不存在的文件等,異常處理將會改變程序的控制流程,讓程序有機會對錯誤作出處理。

    異常對象可以調用如下方法得到或輸出有關異常的信息:

    ?public String getMessage();

    ?public void printStackTrace();

    ?public String toString(); ?

    try~catch語句:

    ?Java使用try~catch語句來處理異常,將可能出現的異常操作放在try~catch語句的try部分,將發生異常后的處理放在catch部分。

    ?try~catch語句的格式如下:

    ??try {

    ??????包含可能發生異常的語句

    ?}

    ?catch(ExceptionSubClass1 ?e) {

    ????…

    ?}

    ?catch(ExceptionSubClass2 ?e) {

    ????…

    ?}

    自定義異常類:

    我們也可以擴展Exception類定義自己的異常類,然后規定哪些方法產生這樣的異常。

    一個方法在聲明時可以使用throws關鍵字聲明要產生的若干個異常,并在該方法的方法體中具體給出產生異常的操作,即用相應的異常類創建對象,并使用throw關鍵字拋出該異常對象,導致該方法結束執行。

    斷言:

    ?斷言語句用于調試代碼階段。在調試代碼階段讓斷言語句發揮作用,這樣就可以發現一些致命的錯誤,當程序正式運行時就可以關閉斷言語句,但仍把斷言語句保留在源代碼中,如果以后應用程又需要調試,可以重新啟用斷言語句。

    使用關鍵字assert聲明一條斷言語句,斷言語句有以下兩種格式:

    ??assert booleanExpression;

    ??assert booleanExpression:messageException;

    String類 :

    ??Java專門提供了用來處理字符序列的String類。String類在java.lang包中,由于java.lang包中的類被默認引入,因此程序可以直接使用String類。需要注意的是Java把String類聲明為final類,因此用戶不能擴展String類,即String類不可以有子類。

    String 類的常用方法:

    1.public int length():獲取一個字符串的長度

    2.public boolean equals(String s):比較當前字符串對象的實體是否與參數s指定的字符串的實體相同 ????????????????

    3.public boolean startsWith(String s)

    ???public boolean endsWith(String s)方法:判斷當前字符串對象的前綴(后綴)是否參數s指定的字符串

    ????String tom = "天氣預報,陰有小雨",jerry = "比賽結果,中國隊贏得勝利";

    ????tom.startsWith(“天氣”)的值是true;

    ????tom.endsWith("大雨")的值是false,

    4. public int compareTo(String s):按字典序與參數s指定的字符串比較大小

    ?????如果當前字符串與s相同,該方法返回值0

    ?????如果當前字符串對象大于s,該方法返回正值

    ?????如果小于s,該方法返回負值

    ?????例如,字符a在Unicode表中的排序位置是97、字符b是98,那么對于

    ????????String str = "abcde"; ??str.compareTo("boy")小于0;

    其相關方法 public int compareToIgnoreCase(String s)

    5.public boolean contains(String s):判斷當前字符串對象是否含有參數指定的字符串s?

    ????????例如 ?tom=“student”;那么tom.contains(“stu”)的值就是true;

    ???????????????????而tom.contains("ok")的值是false。

    6. public int indexOf (String s):從當前字符串的頭開始檢索字符串s,并返回首次出現s的位置,其相關方法:

    ???indexOf(String s ,int startpoint)

    ???lastIndexOf (String s)

    ????例如 String tom = "I am a good cat";

    ??????????????tom.indexOf("a");//值是2

    ??????????????tom.indexOf("good",2);//值是7

    ??????????????tom.indexOf("a",7);//值是13

    ??????????????tom.indexOf("w",2);//值是-1

    7. public String substring(int startpoint):獲得一個當前字符串的子串??

    ?????其相關方法:substring(int start ,int end)

    ????例如: ?String tom = "我喜歡籃球";

    ??????????????????String s = tom.substring(1,3);

    ??????????????????那么s是:"喜歡"

  • public String trim() :得到一個s去掉前后空格后的字符串對象
  • 符串與基本數據的相互轉化:

    java.lang包中的Integer類調用其類方法:

    ??????public static int parseInt(String s)

    可以將由“數字”字符組成的字符串,如“876”,轉化為int型數據

    可以使用String 類的類方法

    ????????public static String valueOf(byte n)

    ???????public static String valueOf(int n)

    ???????public static String valueOf(long n) ?

    ???????public static String valueOf(float n)

    對象的字符串表示 :

    ?所有的類都默認是java.lang包中Object類的子類或間接子類。

    Object類有一個public String toString()方法,一個對象通過調用該方法可以獲得該對象的字符串表示。一個對象調用toString()方法返回的字符串的一般形式為:創建對象的類的名字@對象的引用的字符串表示

    字符串與字符、字節數組:

    String 類的構造方法:

    ◆ String(char[])和String(char[],int offset,int length)分別用字符數組中的全部字符和部分字符創建字符串對象

    ◆ String類提供了將字符串存放到數組中的方法:

    ???public void getChars(int start,int end,char c[],int offset )

    ◆將字符串中的全部字符存放在一個字符數組中的方法:

    public char[] toCharArray()

    ◆String(byte[])用指定的字節數組構造一個字符串對象。

    ???String(byte[],int offset,int length) 用指定的字節數組的一部分,即從數組起始位置offset開始取length個字節構造一個字符串對象。

    ◆public byte[] getBytes() 方法使用平臺默認的字符編碼,將當前字符串轉化為一個字節數組。

    ◆ public byte[] getBytes(String charsetName) 使用參數指定字符編碼,將當前字符串轉化為一個字節數組。 ?

    字符串的加密算法 ?:

    使用一個字符串password作為密碼對另一個字符串sourceString進行加密 。將密碼password存放到一個字符數組char [] p = password.toCharArray();

    假設數組p的長度為n,那么就將待加密的字符串sourceString按順序以n個字符為一組,對每一組中的字符用數組a的對應字符做加法運算。

    正則表達式及字符串的替換與分解:

    ?1.正則表達式

    一個正則表達式是含有一些具有特殊意義字符的字符串,這些特殊字符稱作正則表達式中的元字符。比如,“\\dcat”中的\\d就是有特殊意義的元字符,代表0到9中的任何一個。字符串對象調用 public boolean matches(String regex)方法可以判斷當前字符串對象是否和參數regex指定的正則表達式匹配。

    ?2.字符串的替換

    ?字符串對象調用public String replaceAll(String regex,String replacement)方法返回一個字符串,該字符串是當前字符串中所有和參數regex指定的正則表達式匹配的子字符串被參數replacement指定的字符串替換后的字符串,例如:

    ?????String s ="12hello567bird".replaceAll("[a-zA-Z]+","你好");

    字符串的分解

    ?3.字符串調用public String[] split(String regex)使用參數指定的正則表達式regex做為分隔標記分解出其中的單詞,并將分解出的單詞存放在字符串數組中。

    ??????例如,對于字符串str ?

    ?String str = "1949年10月1日是中華人民共和國成立的日子";

    如果準備分解出全部由數字字符組成的單詞,就必須用非數字字符串做為分隔標記,因此,可以使用正則表達式:String regex="\\D+";

    做為分隔標記分解出str中的單詞:String digitWord[]=str.split(regex);

    那么,digitWord[0]、digitWord[1]和digitWord[2]就分別是“1949”、“10”和“1”。

    StringTokenizer類 :

    本節學習怎樣使用StringTokenizer對象分解字符串。

    StringTokenizer類在java.util包中,有兩個常用的構造方法:

    ◆StringTokenizer(String s):為字符串s構造一個分析器。使用默認的分隔標記,即空格符(若干個空格被看做一個空格)、換行符、回車符、Tab符、進紙符。

    ◆ StringTokenizer(String s, String delim):為字符串s構造一個分析器。參數dilim中的字符被作為分隔標記 。

    例如:

    ????StringTokenizer fenxi = new StringTokenizer("you are welcome");

    ????StringTokenizer fenxi = new StringTokenizer("you,are ; welcome", ?", ; ");

    ◆ StringTokenizer對象稱作一個字符串分析器可以使用下列方法:

    ?????nextToken():逐個獲取字符串中的語言符號(單詞),字符串分析器中的負責計數的變量的值就自動減一 ?。

    hasMoreTokens():只要字符串中還有語言符號,即計數變量的值大于0,該方法就返回true,否則返回false。 countTokens():得到分析器中計數變量的值。

    ??Scanner類:

    使用Scanner類從字符串中解析程序所需要的數據。

    ????1.使用默認分隔標記解析字符串

    ???????創建Scanner對象,并將要解析的字符串傳遞給所構造的對象,

    ?????例如 String NBA = "I Love This Game";

    ?????如下構造一個Scanner對象:

    ?????Scanner scanner = new Scanner(NBA);

    那么scanner將空格做為分隔標記來解析字符串中的單詞,解析操作的特點如下:

    ◆ scanner調用next()方法依次返回NBA中的單詞,如果NBA最后一個單詞已被next()方法返回,scanner調用hasNext()將返回false,否則返回true。

    ◆ ?對于被解析的字符串中的數字型的單詞,比如618,168.98等,scanner可以用nextInt()或nextDouble()方法來代替next()方法,即scanner可以調用nextInt()或nextDouble()方法將數字型單詞轉化為int或double數據返回。

    ◆ 如果單詞不是數字型單詞,scanner調用nextInt()或nextDouble()方法將發生InputMismatchException異常,在處理異常時可以調用next()方法返回該非數字化單詞。

    ???????例題13 ???使用Scanner對象解析字符串"TV cost 876 dollar.Computer cost 2398 dollar.telephone cost 1278 dollar"中的全部價格數字(價格數字的前后需有空格),并計算了總消費。

    ??2.使用正則表達式作為分隔標記解析字符串

    ???????Scanner對象可以調用 useDelimiter(正則表達式); 方法將一個正則表達式作為分隔標記,即和正則表達式匹配的字符串都是分隔標記。

    ?Date類 :

    ???Date類在java.util包中。

    1.使用Date類的無參數構造方法創建的對象可以獲取本地當前時間。 Date()

    ?????例: Date nowTime=new Date();

    當前nowTime對象中含有的日期、時間就是創建nowTime對象時的本地計算機的日期和時間。例如,假設當前時間是:2011年3月10日23:05:32(CST時區),那么

    System.out.println(nowTime); 輸出結果是:Thu Mar 10 23:05:32 CST 2011。

    ??????Date對象表示時間的默認順序是:星期、月、日、小時、分、秒、年

    2.使用帶參數的構造方法 ?Date(long time)

    計算機系統將其自身的時間的“公元”設置在1970年1月1日0時(格林威治時間),可以根據這個時間使用Date的帶參數的構造方法:Date(long time)來創建一個Date對象,例如:

    ????????Date date1=new Date(1000), date2=new Date(-1000);

    其中的參數取正數表示公元后的時間,取負數表示公元前的時間,例如1000表示1000毫秒,那么,date1含有的日期、時間就是計算機系統公元后1秒時刻的日期、時間。如果運行Java程序的本地時區是北京時區(與格林威治時間相差8個小時),那么上述date1就是1970年01月01日08時00分01秒、date2就是1970年01月01日07時59分59秒。

    3.System類的靜態方法 public long currentTimeMillis() 獲取系統當前時間

    Calendar類:

    1 ?Calendar類在java.util包中。使用Calendar類的static方法 getInstance()可以初始化一個日歷對象,如:

    ????Calendar calendar= Calendar.getInstance();

    2 calendar對象可以調用方法:

    ???public final void set(int year,int month,int date)

    ???public final void set(int year,int month,int date,int hour,int minute)

    ???public final void set(int year,int month, int date, int hour, int minute,int second)

    ?????將日歷翻到任何一個時間

    3 calendar對象常用方法

    ◆public int get(int field) :可以獲取有關年份、月份、小時、星期等信息

    ???例如:calendar.get(Calendar.MONTH); 返回一個整數,如果該整數是0表示當前日歷是在一月,該整數是1表示當前日歷是在二月等。

    ???例如:calendar.get(Calendar.DAY_OF_WEEK);返回一個整數,如果該整數是1表示星期日,如果是2表示是星期一,依次類推,如果是7表示是星期六。 ???

    ◆ public long getTimeInMillis() :可以將時間表示為毫秒。?

    format方法 :

    Formatter類的format方法:format(格式化模式, 日期列表)

    按著“格式化模式”返回“日期列表”中所列各個日期中所含數據(年,月,日,小時等數據)的字符串表示。Java已經將format方法做為了String類的靜態方法,因此,程序可以直接使用String類調用format方法對日期進行格式化。

    1.格式化模式

    format方法中的“格式化模式”是一個用雙引號括起的字符序列(字符串),該字符序列中的字符由時間格式符和普通字符所構成。例如:"日期:%ty-%tm-%td"

    String s = String.format("%tY年%tm月%td日",new Date(),new Date(),new Date()); 那么s就是"2011年02月10日

    2.日期列表

    format方法中的“日期列表”可以是用逗號分隔的Calendar對象或Date對象。 format方法默認按從左到右的順序使用“格式化模式”中的格式符來格式“日期列表”中對應的日期,而“格式化模式”中的普通字符保留原樣。

    3.格式化同一日期 ????可以在“格式化模式”中使用“<”,比如:"%ty-%<tm-%<td"中的三個格式符將格式化同一日期,即含有“<”的格式符和它前面的格式符格式同一個日期,例如:String s = String.format("%ty年%<tm月%<td日",new Date());那么%<tm和%<td都格式化new Date(),因此字符串s就是:"11年02月10日"。

    不同區域的星期格式 :

    如果想用特定地區的星期格式來表示日期中的星期,可以用format的重載方法:

    format (Locale locale,格式化模式,日期列表);

    其中的參數locale是一個Locale類的實例,用于表示地域。

    Locale類的static常量都是Locale對象,其中US是表示美國的static常量。

    比如,假設當前時間是2011-02-10,對于(%ta表示簡稱的星期):

    String s = String.format(Locale.US,"%ta(%<tF)",new Date());

    那么s是"Thu(2011-02-10)",

    對于(%tA表示全稱的星期)

    String s = String.format(Locale.JAPAN,"%tA(%<tF)",new Date());

    那么s是"木曜日(2011-02-10)"。

    ??Math類 :

    ?Math類在java.lang包中。Math類包含許多用來進行科學計算的類方法,這些方法可以直接通過類名調用。另外,Math類還有兩個靜態常量,它們分別是:

    E ??2.7182828284590452354和PI ???3.14159265358979323846。

    以下是Math類的常用類方法:

    * public static long abs(double a) ?返回a的絕對值。

    * public static double max(double a,double b) 返回a、b的最大值。

    * public static double min(double a,double b) 返回a、b的最小值。

    * public static double random() ?產生一個0到1之間的隨機數(不包括0和1)。

    * public static double pow(double a,double b) 返回a的b次冪。

    * public static double sqrt(double a) 返回a的平方根。

    * public static double log(double a) ?返回a的對數。

    * public static double sin(double a) 返回正弦值。

    * public static double asin(double a) ?返回反正弦值。

    ?BigInteger類 :

    1 java.math包中的BigInteger類提供任意精度的整數運算。可以使用構造方法:

    ??????public BigInteger(String val) ?構造一個十進制的BigInteger對象。

    2 以下是BigInteger類的常用類方法:

    *public BigInteger add(BigInteger val) ?返回當前大整數對象與參數指定的大整數對象的和。

    *public BigInteger subtract(BigInteger val)返回當前大整數對象與參數指定的大整數對象的差。

    * public BigInteger multiply(BigInteger val)返回當前大整數對象與參數指定的大整數對象的積。

    *public BigInteger divide(BigInteger val)返回當前大整數對象與參數指定的大整數對象的商。

    *public BigInteger remainder(BigInteger val)返回當前大整數對象與參數指定的大整數對象的余。

    *public int compareTo(BigInteger val) 返回當前大整數對象與參數指定的大整數的比較結果,返回值是1、-1或0,分別表示當前大整數對象大于、小于或等于參數指定的大整數。

    *public BigInteger abs() ?返回當前大整數對象的絕對值。

    *public BigInteger pow(int a) ?返回當前大整數對象的a次冪。

    *public String toString() ?返回當前大整數對象十進制的字符串表示。

    *public String toString(int p) ?返回當前大整數對象p進制的字符串表示。

    Random類 :

    ??Java提供了更為靈活的用于獲得隨機數的Random類(該類在java.util包中)。 Random類的如下構造方法:

    ?????public Random();

    ?????public Random(long seed);使用參數seek指定的種子創建一個Random對象

    ?????人們習慣地將Random對象稱為隨機數生成器。

    ?返回一個隨機整數 ??隨機數生成器random調用不帶參數的nextInt()方法:

    ??????Random random=new Random();

    ??????random.nextInt();

    ◆ 返回一個0至n之間(包括0,但不包括n)的隨機數 隨機數生成器random調用帶參數的nextInt(int m)方法(參數m必須取正整數值)

    ????例如,random.nextInt(100);返回一個0至100之間的隨機整數(包括0,但不包括100)

    ◆ 隨機得到true和false兩個表示真和假的boolean值, 隨機數生成器random調用nextBoolean()方法

    ???例如 random.nextBoolean();返回一個隨機boolean值。

    Formatter 類:

    Formatter類提供了一個和C語言printf函數類似的format方法:

    format(格式化模式,值列表)

    該方法按著“格式化模式”返回“值列表”的字符串表示。

    Java已經將format方法做為了String類的靜態方法,因此,程序可以直接使用String類調用format方法對數字進行格式化。

    1.格式化模式 ?format方法中的“格式化模式”是一個用雙引號括起的字符序列(字符串),該字符序列中的字符由格式符和普通字符所構成。

    例如:"輸出結果%d,%f,%d"中的%d和%f是格式符號 .

    ?????format方法返回的字符串就是“格式化模式”中的格式符被替換為它得到的格式化結果后的字符串。例如:String s = String.format(“%.2f”,3.141592);那么s就是“3.14”.

    2.值列表 ??format方法中的“值列表”是用逗號分隔的變量、常量或表達式。 例如:

    String s=format("%d元%0.3f公斤%d臺",888,999.777666,123); 那么,s就是"888元999.778公斤123臺"。

    3.格式化順序

    format方法默認按從左到右的順序使用“格式化模式”中的格式符來格式化“值列表”中對應的值,而“格式化模式”中的普通字符保留原樣。

    例如,假設int型變量x和double型變量y的值分別是888和3.1415926,

    那么對于String s = format("從左向右:%d,%.3f,%d",x,y,100);字符串s就是:從左向右:888,3.142,100

    格式化整數:

    1.%d,%o,%x和%格式符可格式化byte、Byte、short、Short、int、Integer、long和Long型數據,詳細說明見Page204. 例如,對于:

    String s = String.format("%d,%o,%x,%X",703576,703576,703576,703576);

    字符串s就是:703576,2536130,abc58,ABC58

    2.修飾符

    加號修飾符"+"格式化正整數時,強制添加上正號,例如,%+d將123格式化為"+123"。

    逗號修飾符“,”格式化整數時,按"千"分組,例如,對于:

    String s=String.format("按千分組:%,d。按千分組帶正號%+,d",1235678,9876);

    字符串s就是:按千分組:1,235,678。按千分組帶正號+9,876

    3.數據的寬度

    數據的寬度就是format方法返回的字符串的長度。規定數據寬度的一般格式為“%md”,其效果是在數字的左面增加空格;或"%-md“,其效果是在數字的右面增加空格,

    例如,將數字59格式化為寬度為8的字符串:String s=String.format("%8d",59);

    字符串s就是:" ?????59",其長度(s.length())為8,即s在59左面添加了6個空格字符。

    對于:String s=String.format(“%-8d”,59);字符串s就是:"59 ???????",其長度(s.length())為8。

    對于:String s=String.format("%5d%5d%8d",59,60,90);字符串s就是:" ??59 ??60 ?????90"(長度為18

    格式化浮點數 :

    1.%f,%e(%E),%g(%G)和%a(%A)格式符可格式化float、Float、double和Double:

    ???%f 將值格式化為十進制浮點數,小數保留6位。

    ???%e(%E) 將值格式化為科學記數法的十進制的浮點數(%E在格式化時將其中的指數符號大寫,例如5E10)。

    例如,對于:String s = String.format("%f,%e",13579.98,13579.98);

    字符串s就是:13579.980000,1.357998e+04

    2.修飾符

    加號修飾符"+"格式化正數時,強制添加上正號,例如%+f將123.78格式化為"+123.78", %+E將123.78格式化為"+1.2378E+2"。 逗號修飾符“,”格式化浮點數時,將整數部分按“千”分組,

    例如,對于:String s=String.format("整數部分按千分組: %+,f",1235678.9876);

    字符串s就是:整數部分按千分組:+1,235,678.987600

    3.限制小數位數與數據的“寬度”

    ?????◆ ?"%.nf"可以限制小數的位數,其中的n是保留的小數位數,例如%.3f將6.1256格式化為"6.126"(保留3位小數)。

    ?規定寬度的一般格式為“%mf”(在數字的左面增加空格),或“%-md”(在數字的右面增加空格)。

    例如,將數字59.88格式化為寬度為11的字符串

    String s=String.format(“%11f”,59.88); 字符串s就是:" ?59.880000",其長度(s.length())為11。

    String s=String.format(“%-11f”,59.88);字符串s就是: "59.880000 ?",其長度(s.length())為11。

    ◆在指定寬度的同時也可以限制小數位數(%m.nf),

    String s=String.format(“%11.2f”,59.88); ?字符串s就是:" ?????59.88",即s在59.88左面添加了6個空格字符。

    ◆ 在寬度的前面增加前綴0,表示用數字0(不用空格)來填充寬度左面的富裕部分,例如:

    String s=String.format(“%011f”,59.88); 字符串s就是:"0059.880000",其長度(s.length())11

    StringBuffer對象的創建:

    StringBuffer類能創建可修改的字符串序列,該類的對象的實體的內存空間可以自動的改變大小,便于存放一個可變的字符序列。一個StringBuffer對象調用append方法可以追加字符序列,如圖819所示。例如:

    StringBuffer s = new StringBuffer("我喜歡");

    s.append("玩籃球"); ??

    StringBuffer類有三個構造方法:

    1.StringBuffer()

    2.StringBuffer(int size)

    3.StringBuffer(String s)

    StringBuffer類的常用方法:

    1.StringBuffer append(String s):將一個字符串對象追加到當前StringBuffer對象中 StringBuffer append(int n):將一個int型數據轉化為字符串對象后再追加到當前StringBuffer對象中StringBuffer append(Object o):將一個Object對象的字符串表示追加到當前StringBuffer對象中

    類似的方法還有:

    ???StringBuffer append(long n),StringBuffer append(boolean n),

    ???StringBuffer append(float n),StringBuffer append(double n),

    ???StringBuffer append(char n)

    2.public chat charAt(int n ):得到參數n指定的置上的單個字符

    ???public void setCharAt(int n ,char ch):將當前StringBuffer對象實體中的字符串位置n處的字符用參數ch指定的字符替換

    3.StringBuffer insert(int index, String str) :將參數str指定的字符串插入到參數index指定的位置

    4.public StringBuffer reverse() :將該對象實體中的字符翻轉

    5.StringBuffer delete(int startIndex, int endIndex):從當前StringBuffer對象實體中的字符串中刪除一個子字符串

    ???其相關方法:deleteCharAt(int index) 刪除當前StringBuffer對象實體的字符串中index位置處的一個字符。

  • StringBuffer replace(int startIndex,int endIndex,String str):將當前StringBuffer對象實體中的字符串的一個子字符串用參數str指定的字符串替換 ???
  • Pattern與Matcher類:

    Java提供了專門用來進行模式匹配的Pattern類和Matcher類,這些類在java.util.regex包中。 ?以下結合具體問題來講解使用Pattern類和Matcher類的步驟。假設有字符串:

    String input = "hello,good morning,this is a good idea"

    我們想知道input從哪個位置開始至哪個位置結束曾出現了字符串good。

    使用Pattern類和Matcher類檢索字符串str中的子字符串的步驟如下:

    1.建立模式對象

    使用正則表達式regex做參數得到一個稱為模式的Pattern類的實例pattern:

    例如:String regex = "good";

    ?????Pattern pattern = Pattern.compile(regex);

    模式對象是對正則表達式的封裝。Pattern類調用類方法compile(String regex)返回一個模式對象,其中的參數regex是一個正則表達式, 稱為模式對象使用的模式。

    2.得到匹配對象

    ?????模式對象pattern調用matcher(CharSequence input)方法返回一個Matcher對象matcher,稱為匹配對象 ????????????

    Matcher matcher = pattern.matcher(input);

    Matcher對象matcher可以使用下列方法尋找字符串input中是否有和模式regex匹配的子序列(regex是創建模式對象pattern時使用的正則表達式)。

    ◆public boolean find():尋找input和regex匹配的下一子序列,如果成功該方法返回true,否則返回false。

    ◆ public boolean matches():matcher調用該方法判斷input是否完全和regex匹配。

    ◆ public boolean lookingAt():matcher調用該方法判斷從input的開始位置是否有和regex匹配的子序列。

    ◆ public boolean find(int start) : matcher調用該方法判斷input從參數start指定位置開始是否有和regex匹配的子序列 。

    ◆ public String replaceAll(String replacement) matcher調用該方法可以返回一個字符串,該字符串是通過把input中與模式regex匹配的子字符串全部替換為參數replacement指定的字符串得到的.

    ◆ public String replaceFirst(String replacement) matcher調用該方法可以返回一個字符串,該字符串是通過把input中第1個與模式regex匹配的子字符串替換為參數replacement指定的字符串得到的。

    使用Class實例化一個對象 :

    ?Class是java.lang包中的類,該類的實例可以幫助程序創建其他類的實例或者取得其他類的對象的內部信息。

    創建對象最常用的方式就是使用new運算符和類的構造方法,實際上也可以使用Class對象得到某個類的實例。步驟如下:

    (1)使用Class的類方法得到一個和某類(參數className指定的類)相關的Class對象:

    ?public static Class forName(String className) throws ClassNotFoundException

    ?上述方法返回一個和參數className指定的類相關的Class對象。

    (2)步驟(1)中獲得的Class對象調用

    public Object newInstance() throws InstantiationException,IllegalAccessException

    方法就可以得到一個className類的對象。要特別注意的是:使用Class對象調用newInstance()實例化一個className類的對象時,className類必須有無參數的構造方法。

    獲取類的有關信息 :

    Class對象經常調用的方法如下:

    ◆ String getName() 返回類的名字

    ◆ Constructor[] getDeclaredConstructors() ?返回類的全部構造方法。

    ◆ Field[] getDeclaredFields() ?返回類的全部成員變量。

    ◆ Method[] getDeclaredMethods() ?返回類的全部方法。

    ?Java Swing概述 :

    ?javax.swing包中JComponent類是java.awt包中Container類的一個直接子類、是java.awt包中Component類的一個間接子類,學習GUI編程主要是學習掌握使用Component類的一些重要的子類。以下是GUI編程經常提到的基本知識點 。

    (1)Java把Component類的子類或間接子類創建的對象稱為一個組件。

    (2)Java把Container的子類或間接子類創建的對象稱為一個容器。

    (3)可以向容器添加組件。Container類提供了一個public方法:add( ),一個容器可以調用這個方法將組件添加到該容器中。

    (4)容器調用removeAll()方法可以移掉容器中的全部組件;調用remove(Component c)方法可以移掉容器中參數c指定的組件。

    (5)注意到容器本身也是一個組件,因此可以把一個容器添加到另一個容器中實現容器的嵌套。

    (6)每當容器添加新的組件或移掉組件時,應當讓容器調用validate()方法,以保證容器中的組件能正確顯示出來

    窗口 :

    Java提供的JFrame類的實例是一個底層容器,即通常所稱的窗口。其他組件必須被添加到底層容器中,以便借助這個地層容器和操作系統進行信息交互。 JFrame類是Container類的間接子類。當需要一個窗口時,可使用JFrame或其子類創建一個對象

    ???JFrame常用方法 :

    JFrame() 創建一個無標題的窗口。

    JFrame(String s) 創建標題為s的窗口。

    public void setBounds(int a,int b,int width,int height 設置窗口的初始位置是(a,b),即距屏幕左面a個像素、距屏幕上方b個像素;窗口的寬是width,高是height。

    public void setSize(int width,int height) 設置窗口的大小。

    public void setLocation(int x,int y) 設置窗口的位置,默認位置是(0,0)。

    public void setVisible(boolean b) 設置窗口是否可見,窗口默認是不可見的。

    public void setResizable(boolean b) 設置窗口是否可調整大小,默認可調整大小。

    public void dispose() 撤消當前窗口,并釋放當前窗口所使用的資源。

    public void setExtendedState(int state) 設置窗口的擴展狀態.

    public void setDefaultCloseOperation(int operation) ?該方法用來設置單擊窗體右上角的關閉圖標后,程序會做出怎樣的處理。

    菜單條、菜單、菜單項 :

    1.菜單條

    ????JComponent類的子類JMenubar負責創建菜單條,JFrame類有一個將菜單條放置到窗口中的方法:setJMenuBar(JMenuBar bar);該方法將菜單條添加到窗口的頂端

    2.菜單:JComponent類的子類JMenu負責創建菜單, JMenu類的主要方法有以下幾種

    ???public void add(JMenuItem item) 向菜單增加由參數item指定的菜單選項。

    ???public JMenuItem getItem(int n) 得到指定索引處的菜單選項。

    ???public int getItemCount() 得到菜單選項的數目。

    3.菜單項

    ???JComponent類的子類JMenuItem負責創建菜單項,JMenuItem類的主要方法有以下幾種:

    ??JMenuItem(String s) 構造有標題的菜單項。

    ??JMenuItem(String text, Icon icon) 構造有標題和圖標的菜單項

    ??public void setAccelerator(KeyStroke keyStroke) 為菜單項設置快捷鍵。

    常用組件 :

    1.文本框:由JComponent的子類JTextField創建文本框。

    2.文本區:由JComponent的子類JTexArea創建文本區。

    3.按鈕:由JComponent的子類JButton類用來創建按鈕。

    4.標簽:由JComponent的子類JLabel類用來創建標簽。

    5.選擇框:由JComponent的子類JCheckBox類用來創建選擇框。

    6.單選按鈕:由JComponent的子類JRadioButton類用來創建單項選擇框。

    7.下拉列表:由JComponent的子類JComboBox類用來創建下拉列表。

    8.密碼框:由JComponent的子類JPasswordField創建密碼框。

    密碼框可以使用setEchoChar(char c)重新設置回顯字符 。

    密碼框調用char[] getPassword()方法可以返回實際的密碼

    常用容器:

    ?JComponent是Container的子類,因此JComponent子類創建的組件也都是容器。容器經常用來添加組件。Jframe是底層容器,本節提到的容器被習慣地稱做中間容器,中間容器必須被添加到底層容器中才能發揮作用。

    1.JPanel 面板:使用JPanel創建面板,再向這個面板添加組件,然后把這個面板添加到其它容器中。JPanel面板的默認布局是FlowLayout布局。

    2.滾動窗格JScrollPane:可以將文本區放到一個滾動窗格中。

    ?JScorollPane scroll=new JScorollPane(new JTextArea());

    3.拆分窗格JSplitPane:窗格有兩種類型:水平拆分和垂直拆分

    JSplitPane的兩個常用的構造方法:

    ??JSplitPane(int a,Component b,Component c)

    ??JSplitPane(int a, boolean b,Component c,Component d) ?

    4.JLayeredPane分層窗格:分層窗格使用

    add(Jcomponent com, int layer);添加組件com,并指定com所在的層

    public void setLayer(Component c,int layer)可以重新設置組件c所在的層

    public int getLayer(Component c)可以獲取組件c所在的層數。

    常用布局:

    ?容器可以使用方法setLayout(布局對象);設置自己的布局,控制組件在容器中的位置。 ?

    1.FlowLayout布局 :

    1)創建布局對象 FlowLayout flow=new FlowLayout();

    2)容器con使用布局對象con.setLayout(flow);

    3)con可以使用Container類提供的add方法將組件順序地添加到容器中;

    FlowLayout布局對象調用相應的方法可以重新設置布局的對齊方式等.

    2.BorderLayout布局 :

    BorderLayout 布局是Window型容器的默認布局 。

    使用BorderLayout布局的容器con,可以使用add方法將一個組件b添加到中心區域:con.add(b,BorderLayout.CENTER);或 ?con.add(BorderLayour.CENTER,b);

    3.CardLayout 布局 : ?使用CardLayout的一般步驟如下:

    ??1)創建CardLayout對象 CardLayout card=new CardLayout();

    ??2)為容器設置布局 con.setLayout(card);

    ??3)容器調用add(String s,Component b)將組件b加入容器,并給出了顯示該組件的代號s。

    ??4)布局對象card用CardLayout類提供的show()方法,顯示容器con中組件代號為s的組件:card.show(con,s);

    4.GridLayout布局 :

    GridLayout布局策略是把容器劃分成若干行乘若干列的網格區域,組件就位于這些劃分出來的小格中。 GridLayout布局編輯器的一般步驟如下:

    1)創建布局對象,指定劃分網格的行數m和列數n GridLayout grid=new new GridLayout(10,8);

    2)使用GridLayout布局的容器調用方法add(Component c)將組件c加入容器。

    5.BoxLayout布局:

    使用盒式布局的容器將組件排列在一行或一列 .BoxLayout布局的一般步驟如下:

    1)創建布局對象,使用BoxLayou的構造方法BoxLayout(Container con,,int axis)可以創建一個盒式布局對象.

    2)可以使用Box類的類(靜態)方法 createHorizontalBox()獲得一個具有行型盒式布局的盒式容器; ?使用Box類的類(靜態)方法 createVerticalBox()獲得一個具有列型盒式布局的盒式容器。

    3)控制盒式布局容器中組件之間的距離

    Box類調用靜態方法createHorizontalStrut(int width)可以得到一個不可見的水平Struct對象,稱做水平支撐。 Box類調用靜態方法createVertialStrut(int height)可以得到一個不可見的垂直Struct對象,稱做垂直支撐。

    例子5 ?Example9_5.java ?WindowBoxLayout.java

    兩個列型盒式容器boxV1、boxV2和一個行型盒式容器baseBox。

    在列型盒式容器的組件之間添加垂直支撐,控制組件之間的距離,將boxV1、boxV2添加到baseBox中,并在它倆之間添加了水平支撐。程序運行效果如圖9.6。

    6.null布局 :

    空布局容器可以準確地定位組件在容器的位置和大小。組件調用setBounds(int a,int b,int width,int height)方法可以設置本身的大小和在容器中的位置。

    處理事件:

    學習組件除了要熟悉組件的屬性和功能外,一個更重要的方面是學習怎樣處理組件上發生的界面事件。當用戶在文本框中鍵入文本后按回車鍵、單擊按鈕、在一個下拉式列表中選擇一個條目等操作時,都發生界面事件。

    程序有時需對發生的事件作出反應,來實現特定的任務,例如,用戶單擊一個名字叫“確定”或名字叫“取消”的按鈕,程序可能需要作出不同的處理。

    ?事件處理模式 :

    1.事件源 :能夠產生事件的對象都可以成為事件源 .

    2.監視器 :事件源通過調用相應的方法將某個對象注冊為自己的監視器。對于文本框,這個方法是:addActionListener(監視器);事件源注冊監視器之后,相應的操作就會導致相應的事件的發生,并通知監視器,監視器就會作出相應的處理。

    3.處理事件的接口:

    監視器負責處理事件源發生的事件。監視器是一個對象,為了處理事件源發生的事件,監視器這個對象會自動調用一個方法來處理事件。 Java規定:為了讓監視器這個對象能對事件源發生的事件進行處理,創建該監視器對象的類必須聲明實現相應的接口,那么當事件源發生事件時,監視器就自動調用被類重寫的某個接口方法

    ActionEvent事件:

    ?1. ActionEvent事件源 :

    文本框、按紐、菜單項、密碼框和單選按紐都可以觸發ActionEvent事件,即都可以成為ActionEvent事件的事件源。

    2.注冊監視器: 能觸發ActionEvent事件的組件使用

    addActionListener(ActionListener listen)

    將實現ActionListener接口的類的實例注冊為事件源的監視器。

    3.ActionListener接口 :

    ActionListener接口在java.awt.event包中,該接口中只有一個方法:

    public void actionPerformed(ActinEvent e)

    事件源觸發ActionEvent事件后,監視器將發現觸發的ActionEvent事件,然后調用接口中的方法:actionPerformed(ActinEvent e)對發生的事件作出處理。ActionEvent類事先創建的事件對象就會傳遞給該方法的參數e。 ?

    4.ActionEvent類中的方法 :

    public Object getSource() 調用該方法可以獲取發生ActionEvent事件的事件源對象的引用。

    public String getActionCommand() 調用該方法可以獲取發生ActionEvent事件時,和該事件相關的一個命令字符串。

    ItemEvent事件:

    1.ItemEvent事件源 :選擇框、下拉列表都可以觸發ItemEvent事件。

    2.注冊監視器:能觸發ItemEvent事件的組件使用

    addItemListener(ItemListener listen)

    將實現ItemListener接口的類的實例注冊為事件源的監視器。

    3.ItemListener接口 :

    ItemListener接口在java.awt.event包中,該接口中只有一個方法:

    public void itemStateChanged(ItemEvent e)

    事件源觸發ItemEvent事件后,監視器將發現觸發的ItemEvent事件,然后調用接口中的itemStateChanged(ItemEvent ?e)方法對發生的事件作出處理。ItemEvent類事先創建的事件對象就會傳遞給該方法的參數e。

    4. ItemEvent類中的方法 :

    getSource()方法返回發生Itemevent事件的事件源外

    getItemSelectable()方法返回發生Itemevent事件的事件源。

    ?DocumentEvent事件:

  • DocumentEvent事件源 :文本區所維護的文檔能觸發DocumentEvent事件 ?
  • 2.注冊監視器:能觸發DocumentEven事件的事件源使用

    addDucumentListener(DocumentListener listen)

    將實現DocumentListener接口的類的實例注冊為事件源的監視器。

    3.DocumentListener接口 :

    DocumentListener接口在javax.swing.event包中,該接口中有三個方法:

    public void changedUpdate(DocumentEvent e) ???

    public void removeUpdate(DocumentEvent e)

    public void insertUpdate(DocumentEvent e)

    MouseEvent事件:

    任何組件上都可以發生鼠標事件,如:鼠標進入組件、退出組件、在組件上方單擊鼠標、拖動鼠標等都觸發鼠標事件,即導致MouseEvent類自動創建一個事件對象。

    ?1.使用MouseListener接口可以處理以下5種操作觸發的鼠標事件

    ????在事件源上按下鼠標鍵、在事件源上釋放鼠標鍵、在事件源上擊鼠標鍵、鼠標進入事件源、鼠標退出事件源。

    ?? MouseEvent 中有下列幾個重要的方法:

    ???getX() 獲取鼠標指針在事件源坐標系中的x-坐標。

    ???getY() 獲取鼠標指針在事件源坐標系中的y-坐標。

    ???getModifiers() 獲取鼠標的左鍵或右鍵。

    ???getClickCount() 獲取鼠標被單擊的次數。

    ???getSource() 獲取發生鼠標事件的事件源。

    ??事件源注冊監視器的方法是addMouseListener(MouseListener listener)。

    ?? MouseListener接口中有如下方法:

    ???mousePressed(MouseEvent) 負責處理在組件上按下鼠標鍵觸發的鼠標事件

    ???mouseReleased(MouseEvent) 負責處理在組件上釋放鼠標鍵觸發的鼠標事件

    ???mouseEntered(MouseEvent) 負責處理鼠標進入組件觸發的鼠標事件

    ???mouseExited(MouseEvent) 負責處理鼠標離開組件觸發的鼠標事件

    ???mouseClicked(MouseEvent) 負責處理在組件上單擊鼠標鍵觸發的

    2.使用MouseMotionListener接口可以處理以下兩種操作觸發的鼠標事件, ?在事件源上拖動鼠標、在事件源上移動鼠標。

    ?? 事件源注冊監視器的方法是

    ????addMouseMotionListener(MouseMotionListener listener)。

    ?? MouseMotionListener接口中有如下方法:

    ????mouseDragged(MouseEvent) ?負責處理拖動鼠標觸發的鼠標事件。

    mouseMoved(MouseEvent) ?負責處理移動鼠標觸發的鼠標事件。

    ??焦點事件:

    1.焦點事件源 :組件可以觸發焦點事件。

    2.注冊監視器:組件可以使用

    ????addFocusListener(FocusListener listener)

    注冊焦點事件監視器。

    3.FocusListener接口 :

    ???創建監視器的類必須要實現FocusListener接口,該接口有兩個方法:

    ??????public void focusGained(FocusEvent e)

    ??????public void focusLost(FocusEvent e)

    ???當發生FocusEvent事件時,監視器調用類實現的接口中的相應方法。

    ?4.組件也可調用

    ???????public boolean requestFocusInWindow()

    方法可以獲得輸入焦點。

    鍵盤事件:

    當一個組件處于激活狀態時,敲擊鍵盤上一個鍵就導致這個組件觸發鍵盤事件。

    1.某個組件使用addKeyListener方法注冊監視器。

    2.接口KeyListener中有如下方法:

    ??public void keyPressed(KeyEvent e),

    ??public void keyTyped(KeyEvent e),

    ??public void KeyReleased(KeyEvent e) ?

    3.相關方法:

    ???public int getKeyCode()判斷哪個鍵被按下、敲擊或釋放,返回一個鍵碼值 。 ?????

    ???getKeyChar()判斷哪個鍵被按下、敲擊或釋放,返回鍵上的字符。

    ?窗口事件:

    JFrame及子類創建的窗口可以調用

    setDefaultCloseOperation(int operation);

    方法設置窗口的關閉方式(如前面各個例子所示).

    但是setDefaultCloseOperation方式可能不能滿足程序的需要,比如,用戶單擊窗口上的關閉圖標時,可能程序需要提示用戶是否需要保存窗口中的有關數據到磁盤等 .

  • WindowListener接口.
  • ?public void windowActivated(WindowEvent e) ?當窗口從非激活狀態到激活時,窗口的監視器調用該方法。
  • ?public void windowDeactivated(WindowEvent e) ?當窗口激活狀態到非激活狀態時,窗口的監視器調用該方法。
  • ?public void windowClosing(WindowEvent e) ?當窗口正在被關閉時,窗口的監視器調用該方法。
  • ?public void windowClosed(WindowEvent e) ?當窗口關閉后,窗口的監視器調用該方法。(5) public void windowIconified(WindowEvent e) ?當窗口圖標化時,窗口的監視器調用該方法。
  • 6) public void windowDeiconified(WindowEvent e) ?當窗口撤消圖標化時,窗口的監視器調用該方法。

    7) public void windowOpened(WindowEvent e) ?當窗口打開時,窗口的監視器調用該方法。

    2. WindowAdapter適配器 .

    適配器可以代替接口來處理事件,當Java提供處理事件的接口中多于一個方法時,Java相應地就提供一個適配器類,比如WindowAdapter類。適配器已經實現了相應的接口,例如WindowAdapter類實現了WindowListener接口。因此,可以使用WindowAdapte的子類創建的對象做監視器,在子類中重寫所需要的接口方法即可。

    匿名類實例或窗口做監視器:

    匿名類的方便之處是匿名類的外嵌類的成員變量在匿名類中仍然有效,當發生事件時,監視器就比較容易操作事件源所在的外嵌類中的成員.當事件的處理比較簡單、系統也不復雜時,使用匿名類做監視器是一個不錯的選擇。

    讓事件源所在的類的實例作為監視器,能讓事件的處理比較方便,這是因為,監視器可以方便的操作事件源所在的類中的其他成員。當事件的處理比較簡單,系統也不復雜時,讓事件源所在的類的實例作為監視器是一個不錯的選擇。

    事件總結:

    1.授權模式

    Java的事件處理是基于授權模式,即事件源調用調用方法將某個對象注冊為自己的監視器。

    2.接口回調

    addXXXListener(XXXListener listener)方法中的參數是一個接口,listener可以引用任何實現了該接口的類所創建的對象,當事件源發生事件時,接口listener立刻回調被類實現的接口中的某個方法。

    3.方法綁定

    當事件源觸發事件發生后,監視器準確知道去調用哪個方法。

    4.保持松耦合

    當事件源觸發事件發生后,系統知道某個方法會被執行,但無須關心到底是哪個對象去調用了這個方法,因為任何實現接口的類的實例(做為監視器)都可以調用這個方法來處理事件

    ?

    ?使用MVC結構 :

    ?模型-視圖-控制器(Model-View-Controller),簡稱為MVC。

    ???MVC是一種先進的設計結構,其目的是以會話形式提供方便的GUI支持。

    ???MVC是一種通過三個不同部分構造一個軟件或組件的理想辦法:

    ?模型(model) ?用于存儲數據的對象。

    ?視圖(view) ??為模型提供數據顯示的對象。

    ?控制器(controller)處理用戶的交互操作,對于用戶的操作作出響應,讓模型和視圖進行必要的交互,即通過視圖修改、獲取模型中的數據;當模型中的數據變化時,讓視圖更新顯示。

    對話框 :

    JDialog類和JFrame都是Window的子類,二者的實例都是底層容器。

    JDialog類創建的對話框必須要依賴于某個窗口。

    對話框分為無模式和有模式兩種。

    有模式的對話框:當這個對話框處于激活狀態時,只讓程序響應對話框內部的事件,而且將堵塞其它線程的執行,用戶不能再激活對話框所在程序中的其它窗口,直到該對話框消失不可見。

    無模式對話框:當這個對話框處于激活狀態時,能再激活其它窗口,也不堵塞其它線程的執行。

    消息對話框 :

    消息對話框是有模式對話框,進行一個重要的操作動作之前,最好能彈出一個消息對話框。可以用javax.swing包中的JOptionPane類的靜態方法:

    ????public static void showMessageDialog(

    ???????????????????????Component parentComponent,

    ???????????????????????String message,

    ???????????????????????String title,

    ???????????????????????int messageType)

    創建一個消息對話框。

    輸入對話框 :

    輸入對話框含有供用戶輸入文本的文本框、一個確認和取消按鈕,是有模式對話框 。

    可以用javax.swing包中的JOptionPane類的靜態方法:

    ??public static String showInputDialog(Component parentComponent,

    ??????????????????????????????????????Object message,

    ??????????????????????????????????????String title,

    ??????????????????????????????????????int messageType)

    ??創建一個輸入對話框。

    確認對話框 :

    確認對話框是有模式對話框。

    可以用javax.swing包中的JOptionPane類的靜態方法:

    public static int showConfirmDialog(Component parentComponent,

    ????????????????????????????????????Object message,

    ????????????????????????????????????String title,

    ????????????????????????????????????int optionType)

    ?得到一個確認對話框。

    顏色對話框:

    ?可以用javax.swing包中的JColorChooser類的靜態方法: public static Color showDialog(Component component, ???????

    ????????????????????????????????????????String title,

    ????????????????????????????????????????Color initialColor)

    創建一個有模式的顏色對話框 ?。

    自定義對話框:

    創建對話框與創建窗口類似,通過建立JDialog的子類來建立一個對話框類,然后這個類的一個實例,即這個子類創建的一個對象,就是一個對話框。對話框是一個容器,它的默認布局是BorderLayout,對話框可以添加組件,實現與用戶的交互操作。

    構造對話框的2個常用構造方法

    JDialog() 構造一個無標題的初始不可見的對話框,對話框依賴一個默認的不可見的窗口,該窗口由Java運行環境提供。

    JDialog(JFrame owner) 構造一個無標題的初始不可見的無模式的對話框,owner是對話框所依賴的窗口,如果owner取null,對話框依賴一個默認的不可見的窗口,該窗口由Java運行環境提供。

    樹組件與表格組件:

    樹組件:

  • DefaultMutableTreeNode節點
  • DefaultMutableTreeNode類的兩個常用的構造方法是:

    DefaultMutableTreeNode(Object userObject)

    DefaultMutableTreeNode(Object userObject,boolean allowChildren)

    2.樹上的TreeSelectionEvent事件

    使用addTreeSelectionListener(TreeSelectionListener listener)方法獲得一個監視器。

    表格組件:

    表格組件以行和列的形式顯示數據,允許對表格中的數據進行編輯。表格的模型功能強大、靈活并易于執行。表格是最復雜的組件,對于初學者,這里只介紹默認的表格模型。

    JTable有7個構造方法,這里介紹常用的三個。

    ?????JTable() 創建默認的表格模型。

    ?????JTable(int a,int b) 創建a行,b列的默認模型表格

    ?????JTable (Object data[][],Object ?columnName[]) 創建默認表格模型對象,并且顯示由data指定的二維數組的值,其列名由數組columnName指定。

    通過對表格中的數據進行編輯,可以修改表格中二維數組data中對應的數據數據。在表格中輸入或修改數據后,需按回車或用鼠標單擊表格的單元格確定所輸入或修改的結果。當表格需要刷新顯示時,讓表格調用repaint方法。

    按鈕綁定到鍵盤 :

    (1) 獲取輸入映射. ??按鈕首先調用

    ???public final InputMap getInputMap(int condition) ?

    ???方法返回一個InputMap對象.

    (2)綁定按鈕的鍵盤操作. ??步驟(1)返回的輸入映射首先調用方法

    ???public void put(KeyStroke keyStroke,Object actionMapKey)

    ??將敲擊鍵盤上的某鍵指定為按鈕的鍵盤操作.

    (3)為按鈕的鍵盤操作指定監視器. ???按鈕調用方法

    ????public final ActionMap getActionMap()

    ????返回一個ActionMap對象:

    ????ActionMap actionmap = button.getActionMap();

    ????然后,該對象actionmap調用方法:

    ????public void put(Object key,Action action)

    ????為按鈕的鍵盤操作指定監視器

    打印組件:

    步驟如下:

    1.獲取ToolKit對象

    讓組件調用getToolkit()方法返回系統提供的Toolkit對象。

    2.獲得PrintJob對象

    Toolkit對象調用getPrintJob()方法返回一個PrintJob對象。

    3.獲取Graphics對象

    PrintJob對象使用getGraphics()方法獲得一個Graphics對象。

    4.打印組件

    步驟3獲取的Graphics對象是g,組件調用

    paintAll(g)

    將打印出該組件及其子組件。如果調用方法:

    pain(g)

    將打印出該組件本身,但不打印子組件。

    ?發布GUI程序:

    可以使用jar.exe把一些文件壓縮成一個JAR文件,來發布我們的應用程序。

    生成一個Jar文件的步驟如下:

    1.首先用文本編輯器(比如Windows下的記事本)編寫一個清單文件 ,擴展名為.mf,如Mymoon.mf 。

    2.生成JAR文件

    如果目錄test下的字節碼文件剛好是應用程序需要的全部字節碼文件,也可以如下生成JAR文件:

    ??D:\test\jar cfm Tom.jar Mymoon.mf ?*.class

    可以將Tom.jar文件復制到任何一個安裝了java運行環境的計算機上,只要用鼠標雙擊該文件就可以運行該java應用程序了

    將打印出該組件本身,但不打印子組件。

    ?發布GUI程序:

    可以使用jar.exe把一些文件壓縮成一個JAR文件,來發布我們的應用程序。

    生成一個Jar文件的步驟如下:

    1.首先用文本編輯器(比如Windows下的記事本)編寫一個清單文件 ,擴展名為.mf,如Mymoon.mf 。

    2.生成JAR文件

    如果目錄test下的字節碼文件剛好是應用程序需要的全部字節碼文件,也可以如下生成JAR文件:

    ??D:\test\jar cfm Tom.jar Mymoon.mf ?*.class

    可以將Tom.jar文件復制到任何一個安裝了java運行環境的計算機上,只要用鼠標雙擊該文件就可以運行該java應用程序了

    總結

    以上是生活随笔為你收集整理的Java期末复习基础知识整理(有点长)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    又粗又大又硬毛片免费看 | 日本丰满熟妇videos | 国产真实伦对白全集 | 欧美freesex黑人又粗又大 | 国产肉丝袜在线观看 | 丰满护士巨好爽好大乳 | 亚洲欧美日韩成人高清在线一区 | 人人妻人人澡人人爽人人精品浪潮 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 成人免费视频一区二区 | 精品人妻人人做人人爽夜夜爽 | 日本熟妇人妻xxxxx人hd | 久久精品人人做人人综合试看 | 色妞www精品免费视频 | 在线天堂新版最新版在线8 | 国产香蕉97碰碰久久人人 | 九九综合va免费看 | 蜜桃臀无码内射一区二区三区 | 国产va免费精品观看 | 欧美自拍另类欧美综合图片区 | 无码播放一区二区三区 | 精品欧洲av无码一区二区三区 | 成人免费视频在线观看 | 亚洲精品中文字幕久久久久 | 国产成人精品一区二区在线小狼 | 中国女人内谢69xxxx | 红桃av一区二区三区在线无码av | 久久久久国色av免费观看性色 | 国产精品亚洲а∨无码播放麻豆 | 极品嫩模高潮叫床 | 日韩人妻无码中文字幕视频 | 少妇被粗大的猛进出69影院 | 少妇无码av无码专区在线观看 | 久久久精品欧美一区二区免费 | 一本加勒比波多野结衣 | 三上悠亚人妻中文字幕在线 | 女人被爽到呻吟gif动态图视看 | 亚洲狠狠婷婷综合久久 | 色欲人妻aaaaaaa无码 | 荫蒂添的好舒服视频囗交 | 国产99久久精品一区二区 | 亚洲最大成人网站 | 国产午夜精品一区二区三区嫩草 | 国产精品怡红院永久免费 | 亚洲午夜福利在线观看 | 三上悠亚人妻中文字幕在线 | 少妇的肉体aa片免费 | 精品一区二区不卡无码av | 亚洲综合另类小说色区 | 色一情一乱一伦一视频免费看 | 久久久久99精品成人片 | 日本xxxx色视频在线观看免费 | 欧美国产亚洲日韩在线二区 | 亚洲 日韩 欧美 成人 在线观看 | 国产明星裸体无码xxxx视频 | 国产成人精品必看 | 国产精品久久国产精品99 | 精品人妻中文字幕有码在线 | 在线视频网站www色 | 欧美亚洲日韩国产人成在线播放 | 国产午夜亚洲精品不卡 | 国产精品无码一区二区三区不卡 | 色一情一乱一伦一视频免费看 | 欧美老人巨大xxxx做受 | 无码人妻黑人中文字幕 | 1000部夫妻午夜免费 | 成人综合网亚洲伊人 | 国产欧美精品一区二区三区 | 色欲久久久天天天综合网精品 | 日产精品高潮呻吟av久久 | 中文字幕人妻丝袜二区 | 亚拍精品一区二区三区探花 | 野外少妇愉情中文字幕 | av无码久久久久不卡免费网站 | 欧美老熟妇乱xxxxx | 国产乱人伦av在线无码 | 欧美人与禽zoz0性伦交 | 国产在线精品一区二区三区直播 | 欧美 亚洲 国产 另类 | 亚洲成av人片在线观看无码不卡 | 欧美老人巨大xxxx做受 | 水蜜桃av无码 | √天堂资源地址中文在线 | 国产精品18久久久久久麻辣 | 久久久中文字幕日本无吗 | 久久精品成人欧美大片 | 国产成人午夜福利在线播放 | 色妞www精品免费视频 | 午夜无码人妻av大片色欲 | 国产在线一区二区三区四区五区 | 色五月五月丁香亚洲综合网 | 人人澡人人透人人爽 | 日本丰满护士爆乳xxxx | 亚洲 另类 在线 欧美 制服 | 国精产品一区二区三区 | 天天爽夜夜爽夜夜爽 | аⅴ资源天堂资源库在线 | 丁香花在线影院观看在线播放 | 精品乱码久久久久久久 | 国产性生大片免费观看性 | 2019午夜福利不卡片在线 | 亚洲精品欧美二区三区中文字幕 | 欧美激情综合亚洲一二区 | 精品熟女少妇av免费观看 | 强辱丰满人妻hd中文字幕 | 日韩欧美中文字幕在线三区 | 一本大道久久东京热无码av | 国产精品亚洲五月天高清 | 亚洲中文字幕在线无码一区二区 | 亚洲精品欧美二区三区中文字幕 | 国产人成高清在线视频99最全资源 | 天天摸天天碰天天添 | 国产一区二区三区影院 | 日韩亚洲欧美中文高清在线 | 成人性做爰aaa片免费看 | 国产97在线 | 亚洲 | 人人妻人人澡人人爽欧美一区 | 黑人巨大精品欧美黑寡妇 | 久9re热视频这里只有精品 | 日韩精品无码一区二区中文字幕 | 色妞www精品免费视频 | 精品国精品国产自在久国产87 | 成人精品一区二区三区中文字幕 | 日产精品高潮呻吟av久久 | 免费无码av一区二区 | 丰满少妇人妻久久久久久 | 天天做天天爱天天爽综合网 | 亚洲日本在线电影 | 免费人成在线观看网站 | 无码中文字幕色专区 | 欧洲熟妇精品视频 | 97夜夜澡人人爽人人喊中国片 | 水蜜桃av无码 | 国产精品久久久久久无码 | 国产精品多人p群无码 | 婷婷五月综合缴情在线视频 | 熟妇女人妻丰满少妇中文字幕 | 夫妻免费无码v看片 | 国产一区二区三区精品视频 | 亚洲色www成人永久网址 | 久久国产劲爆∧v内射 | 国产成人无码av片在线观看不卡 | 亚洲精品午夜无码电影网 | 成人无码精品一区二区三区 | 成人影院yy111111在线观看 | 强辱丰满人妻hd中文字幕 | 亚洲午夜久久久影院 | 人妻与老人中文字幕 | 国精产品一品二品国精品69xx | 老子影院午夜伦不卡 | 国产精品无码久久av | 久激情内射婷内射蜜桃人妖 | 国产在线精品一区二区三区直播 | 好男人社区资源 | 亚洲中文字幕成人无码 | 亚洲熟妇色xxxxx欧美老妇 | 欧美野外疯狂做受xxxx高潮 | 在线观看国产一区二区三区 | 我要看www免费看插插视频 | 欧洲精品码一区二区三区免费看 | 久久久中文久久久无码 | 日产国产精品亚洲系列 | 红桃av一区二区三区在线无码av | 少妇激情av一区二区 | 国产情侣作爱视频免费观看 | 国产va免费精品观看 | 思思久久99热只有频精品66 | 十八禁视频网站在线观看 | 精品一区二区三区波多野结衣 | 国产农村乱对白刺激视频 | 国产乱人偷精品人妻a片 | 欧美 日韩 亚洲 在线 | 性啪啪chinese东北女人 | 人妻无码久久精品人妻 | av人摸人人人澡人人超碰下载 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲日本一区二区三区在线 | 国产片av国语在线观看 | 国产麻豆精品精东影业av网站 | 精品国精品国产自在久国产87 | 18无码粉嫩小泬无套在线观看 | 无码精品国产va在线观看dvd | 午夜无码人妻av大片色欲 | 亚洲毛片av日韩av无码 | 国产精品香蕉在线观看 | 久久亚洲国产成人精品性色 | 国产亚洲人成a在线v网站 | 国产av久久久久精东av | 久久99精品久久久久婷婷 | 亚洲成色www久久网站 | 精品久久久无码人妻字幂 | 国内少妇偷人精品视频免费 | 中文字幕中文有码在线 | 97夜夜澡人人爽人人喊中国片 | 狠狠色欧美亚洲狠狠色www | 久久亚洲a片com人成 | 亚洲日本一区二区三区在线 | 丝袜足控一区二区三区 | 无码毛片视频一区二区本码 | 国产疯狂伦交大片 | 午夜时刻免费入口 | 亚洲第一网站男人都懂 | 亚洲精品综合五月久久小说 | 97久久国产亚洲精品超碰热 | 亚洲自偷自拍另类第1页 | 久久zyz资源站无码中文动漫 | 一本加勒比波多野结衣 | 欧美国产日产一区二区 | 伊人久久大香线蕉午夜 | 免费无码一区二区三区蜜桃大 | 一本无码人妻在中文字幕免费 | 55夜色66夜色国产精品视频 | 女人和拘做爰正片视频 | 精品欧洲av无码一区二区三区 | 两性色午夜免费视频 | 国产成人无码a区在线观看视频app | 又粗又大又硬毛片免费看 | 久久久精品欧美一区二区免费 | 亚洲国产精品一区二区美利坚 | 少妇高潮喷潮久久久影院 | 精品久久久久久亚洲精品 | 亚洲精品综合五月久久小说 | 高潮毛片无遮挡高清免费 | 久久久中文久久久无码 | 亚洲成av人在线观看网址 | 人人妻人人澡人人爽欧美一区九九 | 欧美人与牲动交xxxx | 国产97色在线 | 免 | 国产在线无码精品电影网 | 精品无码国产一区二区三区av | 国产午夜无码视频在线观看 | 国产人妻精品一区二区三区 | 1000部夫妻午夜免费 | 日韩少妇白浆无码系列 | 国产人妻大战黑人第1集 | 四虎影视成人永久免费观看视频 | 中文字幕无码av激情不卡 | 国产av一区二区精品久久凹凸 | 激情国产av做激情国产爱 | 国产欧美亚洲精品a | 久久久久免费看成人影片 | 国产一精品一av一免费 | 欧洲熟妇精品视频 | 国产精品无套呻吟在线 | 成人一区二区免费视频 | 成人免费视频一区二区 | 99精品久久毛片a片 | √天堂中文官网8在线 | 久久久久久av无码免费看大片 | 一区二区三区乱码在线 | 欧洲 | 久久午夜夜伦鲁鲁片无码免费 | 欧美日韩综合一区二区三区 | 久久精品国产99久久6动漫 | 黄网在线观看免费网站 | 亚洲人亚洲人成电影网站色 | 国产手机在线αⅴ片无码观看 | 中文字幕无码免费久久9一区9 | 亚洲成a人片在线观看无码 | 无码精品国产va在线观看dvd | 无码人妻少妇伦在线电影 | 久久久亚洲欧洲日产国码αv | 欧美丰满老熟妇xxxxx性 | 亚洲色无码一区二区三区 | 给我免费的视频在线观看 | 真人与拘做受免费视频一 | 亚洲欧美国产精品专区久久 | 国产内射爽爽大片视频社区在线 | 欧美 日韩 亚洲 在线 | 婷婷五月综合激情中文字幕 | 国产亚洲精品久久久久久 | 初尝人妻少妇中文字幕 | 超碰97人人射妻 | 亚洲精品成人福利网站 | 国产内射老熟女aaaa | 青青久在线视频免费观看 | 亚洲成色www久久网站 | 精品久久久久久人妻无码中文字幕 | 人妻体内射精一区二区三四 | 国产精品亚洲一区二区三区喷水 | 无套内谢老熟女 | 亚洲欧美国产精品专区久久 | 大屁股大乳丰满人妻 | 国内精品久久久久久中文字幕 | 久久精品人人做人人综合试看 | 人人妻人人澡人人爽欧美一区 | av无码电影一区二区三区 | 夜夜躁日日躁狠狠久久av | 国产成人人人97超碰超爽8 | 国产精品亚洲一区二区三区喷水 | 国产 浪潮av性色四虎 | 亚洲乱码国产乱码精品精 | 亚洲成av人综合在线观看 | 在线a亚洲视频播放在线观看 | 国产黑色丝袜在线播放 | 亚洲va中文字幕无码久久不卡 | 久久久亚洲欧洲日产国码αv | 亚洲精品欧美二区三区中文字幕 | 国产一区二区三区影院 | 日本精品人妻无码免费大全 | 精品久久久无码人妻字幂 | 成人无码影片精品久久久 | 国产精品美女久久久网av | 久久99精品久久久久久 | 亚洲毛片av日韩av无码 | 午夜福利电影 | 国产成人无码av一区二区 | 少妇人妻大乳在线视频 | 欧美性生交活xxxxxdddd | 夜夜影院未满十八勿进 | 熟妇女人妻丰满少妇中文字幕 | 精品熟女少妇av免费观看 | 特级做a爰片毛片免费69 | 宝宝好涨水快流出来免费视频 | 国产av无码专区亚洲awww | 秋霞成人午夜鲁丝一区二区三区 | 久久久中文久久久无码 | 美女扒开屁股让男人桶 | 一本大道久久东京热无码av | 强辱丰满人妻hd中文字幕 | 丰满岳乱妇在线观看中字无码 | 日日噜噜噜噜夜夜爽亚洲精品 | 欧美老熟妇乱xxxxx | 免费视频欧美无人区码 | 又湿又紧又大又爽a视频国产 | 两性色午夜视频免费播放 | 欧美日韩久久久精品a片 | 国产精品亚洲一区二区三区喷水 | 午夜精品久久久久久久久 | 欧美乱妇无乱码大黄a片 | 亚洲精品无码国产 | 亚洲乱码国产乱码精品精 | 国产人妻久久精品二区三区老狼 | 亚洲国产精品久久人人爱 | 无人区乱码一区二区三区 | 男女爱爱好爽视频免费看 | 亚洲国产一区二区三区在线观看 | 亚洲色欲久久久综合网东京热 | 国产精品国产三级国产专播 | 久久精品国产亚洲精品 | 国内精品一区二区三区不卡 | 国产亚洲人成在线播放 | 亚洲一区二区观看播放 | 性生交大片免费看l | 狂野欧美性猛交免费视频 | 久久精品国产大片免费观看 | 久久久久亚洲精品中文字幕 | 国产精品99爱免费视频 | 久久精品人人做人人综合试看 | 亚洲区欧美区综合区自拍区 | 国产精品自产拍在线观看 | 7777奇米四色成人眼影 | 在线精品亚洲一区二区 | 一二三四在线观看免费视频 | 人人妻人人澡人人爽精品欧美 | 人妻少妇精品久久 | 人人澡人人妻人人爽人人蜜桃 | 亚洲人交乣女bbw | 成人试看120秒体验区 | 中文久久乱码一区二区 | 色综合久久久久综合一本到桃花网 | 老熟妇仑乱视频一区二区 | 国产在线一区二区三区四区五区 | 久久综合九色综合欧美狠狠 | 玩弄少妇高潮ⅹxxxyw | 女人被男人躁得好爽免费视频 | 国产亚洲视频中文字幕97精品 | 久热国产vs视频在线观看 | 亚洲 激情 小说 另类 欧美 | 99久久婷婷国产综合精品青草免费 | 国产 浪潮av性色四虎 | 亚洲人成影院在线无码按摩店 | 亚洲日本一区二区三区在线 | 亚洲色www成人永久网址 | 美女扒开屁股让男人桶 | 亚洲中文字幕va福利 | 色综合久久88色综合天天 | 国产精品手机免费 | 国产真人无遮挡作爱免费视频 | 亚洲无人区一区二区三区 | 亚洲一区二区观看播放 | 婷婷五月综合缴情在线视频 | 亚洲 a v无 码免 费 成 人 a v | 久久99精品久久久久久 | 中文字幕无码热在线视频 | 久久aⅴ免费观看 | 久久久国产精品无码免费专区 | 免费人成在线观看网站 | 天堂在线观看www | 秋霞成人午夜鲁丝一区二区三区 | 国产特级毛片aaaaaa高潮流水 | 人妻少妇精品无码专区动漫 | 免费网站看v片在线18禁无码 | 精品欧洲av无码一区二区三区 | 国产精品igao视频网 | 99久久精品午夜一区二区 | 少妇被粗大的猛进出69影院 | 成人欧美一区二区三区黑人免费 | 亚洲热妇无码av在线播放 | 国产凸凹视频一区二区 | 久久久久久亚洲精品a片成人 | 内射老妇bbwx0c0ck | 国产偷抇久久精品a片69 | 少妇人妻偷人精品无码视频 | 亚洲中文字幕无码中文字在线 | 性生交大片免费看女人按摩摩 | 久久久久久亚洲精品a片成人 | 国产亚洲人成在线播放 | 18禁止看的免费污网站 | 久久成人a毛片免费观看网站 | 亚洲精品一区二区三区在线观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 免费无码的av片在线观看 | v一区无码内射国产 | 国产精品久久久久久亚洲影视内衣 | 无码人妻精品一区二区三区不卡 | 高清不卡一区二区三区 | 精品aⅴ一区二区三区 | 久久无码专区国产精品s | 午夜无码区在线观看 | 欧美成人高清在线播放 | 久在线观看福利视频 | 一本加勒比波多野结衣 | 亚洲精品国产精品乱码不卡 | 国产香蕉尹人视频在线 | 在线播放亚洲第一字幕 | 男人的天堂2018无码 | 欧美日韩一区二区三区自拍 | 国产成人一区二区三区别 | 日韩精品一区二区av在线 | 日韩精品无码免费一区二区三区 | 蜜臀av无码人妻精品 | 亚洲欧美日韩国产精品一区二区 | 亚洲日本va午夜在线电影 | 妺妺窝人体色www在线小说 | 国产午夜亚洲精品不卡 | 久久午夜无码鲁丝片午夜精品 | 久久午夜夜伦鲁鲁片无码免费 | 欧美自拍另类欧美综合图片区 | 激情爆乳一区二区三区 | 欧美自拍另类欧美综合图片区 | 国产疯狂伦交大片 | 曰韩少妇内射免费播放 | 熟女少妇人妻中文字幕 | 久久精品国产日本波多野结衣 | 久久视频在线观看精品 | 精品乱子伦一区二区三区 | 任你躁国产自任一区二区三区 | 国产成人无码av片在线观看不卡 | 少妇性荡欲午夜性开放视频剧场 | 人人妻人人澡人人爽欧美精品 | 日本大香伊一区二区三区 | 久久久亚洲欧洲日产国码αv | 国产成人无码专区 | 中文字幕无码日韩专区 | 亚洲欧美日韩成人高清在线一区 | 97久久精品无码一区二区 | 国产九九九九九九九a片 | 在线观看国产一区二区三区 | 亚洲精品国产a久久久久久 | 久久99久久99精品中文字幕 | 欧美日韩一区二区综合 | 国产日产欧产精品精品app | 亚洲精品中文字幕久久久久 | 久久97精品久久久久久久不卡 | 国产真人无遮挡作爱免费视频 | 国産精品久久久久久久 | 亚洲日韩av一区二区三区中文 | 中文字幕日韩精品一区二区三区 | 四虎永久在线精品免费网址 | 无码午夜成人1000部免费视频 | 亚洲人亚洲人成电影网站色 | 成人试看120秒体验区 | 四虎永久在线精品免费网址 | 亚洲综合色区中文字幕 | 无遮挡啪啪摇乳动态图 | 四虎4hu永久免费 | 学生妹亚洲一区二区 | 精品久久久久久亚洲精品 | 亚洲自偷精品视频自拍 | 97无码免费人妻超级碰碰夜夜 | 亚洲阿v天堂在线 | 色情久久久av熟女人妻网站 | 激情五月综合色婷婷一区二区 | 97精品人妻一区二区三区香蕉 | 国产午夜福利亚洲第一 | 亚洲国产精品成人久久蜜臀 | 久久精品人妻少妇一区二区三区 | 亚洲人成影院在线观看 | 亚洲精品成人av在线 | 丰满人妻一区二区三区免费视频 | 久青草影院在线观看国产 | 人妻少妇精品无码专区动漫 | 欧美丰满熟妇xxxx性ppx人交 | 无码播放一区二区三区 | 麻豆果冻传媒2021精品传媒一区下载 | 精品久久久无码人妻字幂 | 免费网站看v片在线18禁无码 | 特级做a爰片毛片免费69 | 亚洲va中文字幕无码久久不卡 | 亚洲伊人久久精品影院 | 麻豆国产丝袜白领秘书在线观看 | 国产精品人人爽人人做我的可爱 | 亚洲人成影院在线观看 | 熟女少妇在线视频播放 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 中文字幕人妻丝袜二区 | 久久久久亚洲精品男人的天堂 | 国产精品无码mv在线观看 | 国产精品久久久久久久9999 | 亚洲乱码国产乱码精品精 | 亚洲s码欧洲m码国产av | 欧美老人巨大xxxx做受 | 国产精品va在线播放 | 樱花草在线播放免费中文 | 国产午夜无码视频在线观看 | 国产午夜无码精品免费看 | 亚洲综合另类小说色区 | 欧美freesex黑人又粗又大 | 亚洲色在线无码国产精品不卡 | 131美女爱做视频 | 偷窥村妇洗澡毛毛多 | 国产成人午夜福利在线播放 | 中文毛片无遮挡高清免费 | 精品无码国产自产拍在线观看蜜 | 特级做a爰片毛片免费69 | 亚洲国产精品成人久久蜜臀 | 99视频精品全部免费免费观看 | 久久五月精品中文字幕 | 无码中文字幕色专区 | 日韩欧美中文字幕在线三区 | 免费视频欧美无人区码 | 国产办公室秘书无码精品99 | aa片在线观看视频在线播放 | 真人与拘做受免费视频一 | 国产亚av手机在线观看 | 国产精品久久久久久亚洲影视内衣 | 亚洲中文字幕av在天堂 | 人妻体内射精一区二区三四 | 国产精品va在线观看无码 | 少妇高潮一区二区三区99 | 乱人伦人妻中文字幕无码 | 国内少妇偷人精品视频 | 欧美激情综合亚洲一二区 | 久久国产精品二国产精品 | 婷婷五月综合缴情在线视频 | 给我免费的视频在线观看 | 国产成人精品优优av | 亚洲成a人一区二区三区 | 漂亮人妻洗澡被公强 日日躁 | 5858s亚洲色大成网站www | 中文字幕人妻丝袜二区 | 亚洲综合精品香蕉久久网 | 女人被爽到呻吟gif动态图视看 | 人妻少妇精品视频专区 | 377p欧洲日本亚洲大胆 | 青草视频在线播放 | 免费乱码人妻系列无码专区 | 性欧美熟妇videofreesex | 最近免费中文字幕中文高清百度 | 亚洲精品鲁一鲁一区二区三区 | 久久国语露脸国产精品电影 | 亚洲日韩av一区二区三区四区 | 久久亚洲国产成人精品性色 | 两性色午夜视频免费播放 | 中文字幕无码视频专区 | 99久久人妻精品免费二区 | 久精品国产欧美亚洲色aⅴ大片 | 青青草原综合久久大伊人精品 | 亚洲国产精华液网站w | 国产成人精品必看 | 国产成人一区二区三区别 | 色综合久久88色综合天天 | 国产精品久久久久7777 | 国产成人精品视频ⅴa片软件竹菊 | 国产极品视觉盛宴 | 欧美人妻一区二区三区 | 国产高潮视频在线观看 | 人妻插b视频一区二区三区 | 性生交大片免费看l | 国产精品第一国产精品 | 免费人成在线观看网站 | 无码帝国www无码专区色综合 | 水蜜桃av无码 | 日日麻批免费40分钟无码 | 久久久久久国产精品无码下载 | 国精产品一区二区三区 | 国产舌乚八伦偷品w中 | 蜜臀av在线播放 久久综合激激的五月天 | 国产香蕉尹人综合在线观看 | 国产精品无码一区二区三区不卡 | 少妇高潮喷潮久久久影院 | 国产精品久久久av久久久 | 九九在线中文字幕无码 | 久久久久久av无码免费看大片 | 任你躁国产自任一区二区三区 | 奇米影视888欧美在线观看 | 激情五月综合色婷婷一区二区 | 国产成人久久精品流白浆 | 欧美一区二区三区 | 久久久无码中文字幕久... | 日韩 欧美 动漫 国产 制服 | 牲欲强的熟妇农村老妇女视频 | 美女极度色诱视频国产 | 无码国产色欲xxxxx视频 | 亚洲中文字幕va福利 | 亚洲中文字幕无码一久久区 | 日韩精品无码一本二本三本色 | 久久久久久久人妻无码中文字幕爆 | 色综合视频一区二区三区 | 精品国偷自产在线 | 伊人久久婷婷五月综合97色 | 黑人大群体交免费视频 | 国产精品久久久久久亚洲影视内衣 | 中文字幕 亚洲精品 第1页 | 精品无码av一区二区三区 | 18无码粉嫩小泬无套在线观看 | 精品久久久久香蕉网 | 黑人玩弄人妻中文在线 | 精品人人妻人人澡人人爽人人 | 免费观看又污又黄的网站 | 午夜肉伦伦影院 | 久久视频在线观看精品 | 女人被男人躁得好爽免费视频 | 亚洲人亚洲人成电影网站色 | 午夜精品久久久内射近拍高清 | 色婷婷综合激情综在线播放 | 亚洲成av人综合在线观看 | 色妞www精品免费视频 | 久久久久亚洲精品中文字幕 | 久久精品人妻少妇一区二区三区 | 国产特级毛片aaaaaaa高清 | 国产欧美亚洲精品a | 久久精品丝袜高跟鞋 | 久久综合狠狠综合久久综合88 | 强辱丰满人妻hd中文字幕 | 亚洲精品无码人妻无码 | 中文字幕乱码人妻无码久久 | 色欲综合久久中文字幕网 | 波多野结衣乳巨码无在线观看 | www国产亚洲精品久久久日本 | 欧美自拍另类欧美综合图片区 | 欧美喷潮久久久xxxxx | 久久综合九色综合97网 | 国产av一区二区三区最新精品 | 捆绑白丝粉色jk震动捧喷白浆 | 人人妻人人澡人人爽欧美一区九九 | 国产亚洲美女精品久久久2020 | 人人爽人人澡人人人妻 | 丰满肥臀大屁股熟妇激情视频 | 东京热一精品无码av | 啦啦啦www在线观看免费视频 | 精品久久综合1区2区3区激情 | 夜精品a片一区二区三区无码白浆 | 亚洲区小说区激情区图片区 | 少妇被黑人到高潮喷出白浆 | 亚洲精品国产精品乱码视色 | 亚洲中文字幕va福利 | 国产一区二区三区四区五区加勒比 | 麻花豆传媒剧国产免费mv在线 | 亚洲一区av无码专区在线观看 | 精品 日韩 国产 欧美 视频 | 性史性农村dvd毛片 | 国产精品人人妻人人爽 | 激情内射亚州一区二区三区爱妻 | 国语自产偷拍精品视频偷 | 国产小呦泬泬99精品 | 国产熟妇另类久久久久 | 国产激情一区二区三区 | 高潮毛片无遮挡高清免费 | 国产内射爽爽大片视频社区在线 | 精品国产精品久久一区免费式 | 一本一道久久综合久久 | 欧美国产日产一区二区 | 樱花草在线社区www | 少妇人妻av毛片在线看 | 大地资源网第二页免费观看 | 97资源共享在线视频 | 亚无码乱人伦一区二区 | 国产亚洲精品久久久久久久 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 97无码免费人妻超级碰碰夜夜 | 日日麻批免费40分钟无码 | 成 人 网 站国产免费观看 | 欧美人与善在线com | 久久精品女人天堂av免费观看 | 国产精品爱久久久久久久 | 午夜福利一区二区三区在线观看 | 7777奇米四色成人眼影 | 色综合久久久无码中文字幕 | 亚洲阿v天堂在线 | 亚洲の无码国产の无码影院 | 久久这里只有精品视频9 | 沈阳熟女露脸对白视频 | 成人无码精品1区2区3区免费看 | 国产9 9在线 | 中文 | 在线a亚洲视频播放在线观看 | 人妻aⅴ无码一区二区三区 | 男女爱爱好爽视频免费看 | 国产麻豆精品一区二区三区v视界 | 日韩精品无码一区二区中文字幕 | 日本xxxx色视频在线观看免费 | 久精品国产欧美亚洲色aⅴ大片 | 久久99久久99精品中文字幕 | 日日天日日夜日日摸 | 丰满少妇人妻久久久久久 | 51国偷自产一区二区三区 | 久久久久se色偷偷亚洲精品av | 丰满诱人的人妻3 | 丁香花在线影院观看在线播放 | 性色欲情网站iwww九文堂 | 又湿又紧又大又爽a视频国产 | 无码人妻少妇伦在线电影 | 亚洲国产欧美在线成人 | 成人三级无码视频在线观看 | 久久久成人毛片无码 | 久久天天躁狠狠躁夜夜免费观看 | 国产av剧情md精品麻豆 | 51国偷自产一区二区三区 | 久久久久国色av免费观看性色 | 日韩av无码一区二区三区 | 天天拍夜夜添久久精品大 | 红桃av一区二区三区在线无码av | 成人免费视频一区二区 | 亚洲男女内射在线播放 | www一区二区www免费 | 国产精品久久久久无码av色戒 | 永久免费观看国产裸体美女 | 亚洲男人av天堂午夜在 | 无码国产激情在线观看 | 高潮喷水的毛片 | 国产猛烈高潮尖叫视频免费 | 亚洲欧美日韩国产精品一区二区 | 伊人久久大香线蕉av一区二区 | 日本又色又爽又黄的a片18禁 | 婷婷丁香五月天综合东京热 | 日本爽爽爽爽爽爽在线观看免 | 人妻人人添人妻人人爱 | 久久精品中文字幕大胸 | 国产极品美女高潮无套在线观看 | 亚洲精品中文字幕 | 久久亚洲精品中文字幕无男同 | 国产特级毛片aaaaaa高潮流水 | 全黄性性激高免费视频 | 亚洲s色大片在线观看 | 无码帝国www无码专区色综合 | 无码毛片视频一区二区本码 | 无码一区二区三区在线观看 | 亚洲精品午夜国产va久久成人 | 久久久久99精品成人片 | 国产精品免费大片 | 久久熟妇人妻午夜寂寞影院 | 欧美亚洲日韩国产人成在线播放 | 久久国产精品偷任你爽任你 | 日韩人妻系列无码专区 | 国产一区二区三区四区五区加勒比 | 久久人人爽人人爽人人片av高清 | 99久久精品无码一区二区毛片 | 久久国产精品二国产精品 | 色婷婷综合激情综在线播放 | 日韩欧美中文字幕在线三区 | 人妻人人添人妻人人爱 | 永久免费精品精品永久-夜色 | 一本久久a久久精品vr综合 | 图片区 小说区 区 亚洲五月 | 久久午夜无码鲁丝片 | 亚洲精品午夜无码电影网 | 国产办公室秘书无码精品99 | 中文字幕中文有码在线 | 又色又爽又黄的美女裸体网站 | 秋霞特色aa大片 | 精品一区二区三区无码免费视频 | 日韩人妻无码一区二区三区久久99 | 97久久超碰中文字幕 | 久久久中文久久久无码 | 日韩欧美成人免费观看 | 精品国产一区二区三区四区在线看 | 成人综合网亚洲伊人 | 亚洲精品国产a久久久久久 | 黑人粗大猛烈进出高潮视频 | 久久综合给合久久狠狠狠97色 | 2020久久香蕉国产线看观看 | 女人被男人爽到呻吟的视频 | 亚洲一区二区三区国产精华液 | 欧美丰满老熟妇xxxxx性 | 亚洲男人av天堂午夜在 | 18禁止看的免费污网站 | 欧美日韩精品 | 国产偷抇久久精品a片69 | 麻豆国产丝袜白领秘书在线观看 | 久9re热视频这里只有精品 | 欧美日本日韩 | 国产欧美熟妇另类久久久 | 黑人玩弄人妻中文在线 | 性欧美videos高清精品 | 无码一区二区三区在线观看 | 国产精品无码成人午夜电影 | 激情内射亚州一区二区三区爱妻 | 久久久国产一区二区三区 | 性做久久久久久久免费看 | 亚洲性无码av中文字幕 | 欧美丰满少妇xxxx性 | 国产精品久久久午夜夜伦鲁鲁 | 欧美肥老太牲交大战 | 波多野结衣高清一区二区三区 | 欧美人与禽zoz0性伦交 | 国产精品第一区揄拍无码 | aa片在线观看视频在线播放 | 国产性生交xxxxx无码 | 欧美zoozzooz性欧美 | 麻豆成人精品国产免费 | 久久人人97超碰a片精品 | 人人爽人人澡人人高潮 | 97久久精品无码一区二区 | 男女猛烈xx00免费视频试看 | 国产精品久久久久7777 | 中文毛片无遮挡高清免费 | 亚洲精品一区二区三区婷婷月 | 丰满少妇高潮惨叫视频 | 无码av最新清无码专区吞精 | 精品 日韩 国产 欧美 视频 | 欧美刺激性大交 | 亚洲爆乳精品无码一区二区三区 | 国产精品无码一区二区桃花视频 | 亚洲中文无码av永久不收费 | 亚欧洲精品在线视频免费观看 | 国产亚洲tv在线观看 | 国产精品怡红院永久免费 | 久久99精品国产.久久久久 | 久久99国产综合精品 | 国产suv精品一区二区五 | 亚洲国产成人av在线观看 | 红桃av一区二区三区在线无码av | 夜精品a片一区二区三区无码白浆 | 久久久久免费看成人影片 | 亚洲毛片av日韩av无码 | 中文字幕人妻无码一区二区三区 | 国产国语老龄妇女a片 | 久久久久久国产精品无码下载 | 国产精品手机免费 | 亚洲男女内射在线播放 | 无码av中文字幕免费放 | 亚洲人成影院在线观看 | 欧美熟妇另类久久久久久不卡 | 撕开奶罩揉吮奶头视频 | 亚洲乱码日产精品bd | 成人精品视频一区二区 | 又粗又大又硬毛片免费看 | 久久综合色之久久综合 | 日韩av无码一区二区三区 | 377p欧洲日本亚洲大胆 | 在线观看免费人成视频 | 久久婷婷五月综合色国产香蕉 | 亚洲精品国产品国语在线观看 | 精品水蜜桃久久久久久久 | 美女黄网站人色视频免费国产 | 麻豆国产人妻欲求不满谁演的 | 88国产精品欧美一区二区三区 | 国产婷婷色一区二区三区在线 | 国产精品办公室沙发 | 日本精品久久久久中文字幕 | 中文字幕av伊人av无码av | 7777奇米四色成人眼影 | 亚洲精品一区三区三区在线观看 | 精品国精品国产自在久国产87 | 国产做国产爱免费视频 | 欧美 日韩 亚洲 在线 | 国产在热线精品视频 | 色老头在线一区二区三区 | 亚洲欧美精品aaaaaa片 | 亚洲毛片av日韩av无码 | 丰满人妻精品国产99aⅴ | 国产女主播喷水视频在线观看 | 丁香花在线影院观看在线播放 | 人妻少妇精品无码专区二区 | 国产精品-区区久久久狼 | 久久国产劲爆∧v内射 | 欧美放荡的少妇 | 久久久精品欧美一区二区免费 | 国产成人一区二区三区别 | 正在播放东北夫妻内射 | 国产av剧情md精品麻豆 | 人妻与老人中文字幕 | 国产激情一区二区三区 | 波多野结衣高清一区二区三区 | 性做久久久久久久久 | 国产 精品 自在自线 | 性欧美大战久久久久久久 | 国产精品办公室沙发 | 国产亚洲欧美在线专区 | 狠狠色欧美亚洲狠狠色www | 无码精品国产va在线观看dvd | 亚洲国产成人av在线观看 | 国产卡一卡二卡三 | 清纯唯美经典一区二区 | 婷婷五月综合激情中文字幕 | 国产精品va在线观看无码 | 午夜福利试看120秒体验区 | 在线亚洲高清揄拍自拍一品区 | 国产精品久久久久久亚洲毛片 | 亚洲经典千人经典日产 | 帮老师解开蕾丝奶罩吸乳网站 | 女人色极品影院 | 人妻少妇精品无码专区二区 | 国产真实夫妇视频 | 久久久精品456亚洲影院 | 亚洲日韩av一区二区三区中文 | 国产福利视频一区二区 | 国产一区二区三区影院 | 东京无码熟妇人妻av在线网址 | 久久亚洲精品成人无码 | 99久久久国产精品无码免费 | 蜜桃臀无码内射一区二区三区 | 欧美老妇与禽交 | 国产九九九九九九九a片 | 欧美日韩视频无码一区二区三 | 色综合久久久久综合一本到桃花网 | 无码中文字幕色专区 | 色窝窝无码一区二区三区色欲 | 丝袜足控一区二区三区 | 久久午夜无码鲁丝片秋霞 | 蜜桃无码一区二区三区 | 小鲜肉自慰网站xnxx | 日本乱偷人妻中文字幕 | 亚洲乱码日产精品bd | 日本熟妇浓毛 | 男女下面进入的视频免费午夜 | 国内精品一区二区三区不卡 | 无码午夜成人1000部免费视频 | 男女超爽视频免费播放 | 丰满人妻精品国产99aⅴ | 午夜无码人妻av大片色欲 | 国精产品一品二品国精品69xx | 午夜熟女插插xx免费视频 | 99精品无人区乱码1区2区3区 | √天堂资源地址中文在线 | 丰满妇女强制高潮18xxxx | 成人毛片一区二区 | 无码国产色欲xxxxx视频 | 国产午夜亚洲精品不卡下载 | 在线亚洲高清揄拍自拍一品区 | 5858s亚洲色大成网站www | 美女极度色诱视频国产 | 精品成在人线av无码免费看 | 红桃av一区二区三区在线无码av | 玩弄人妻少妇500系列视频 | 国产成人无码av在线影院 | 鲁大师影院在线观看 | 成熟妇人a片免费看网站 | 亚洲人亚洲人成电影网站色 | 国产亚av手机在线观看 | 精品少妇爆乳无码av无码专区 | 国产精品美女久久久久av爽李琼 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲日韩精品欧美一区二区 | 亚洲成av人综合在线观看 | 久久综合激激的五月天 | 无码福利日韩神码福利片 | 免费男性肉肉影院 | 亚洲午夜福利在线观看 | 麻豆蜜桃av蜜臀av色欲av | 狠狠色噜噜狠狠狠狠7777米奇 | 99麻豆久久久国产精品免费 | 亚洲 高清 成人 动漫 | 永久免费观看美女裸体的网站 | 亚洲经典千人经典日产 | 亚洲熟妇色xxxxx欧美老妇y | 午夜性刺激在线视频免费 | 麻豆成人精品国产免费 | 日韩人妻无码一区二区三区久久99 | av在线亚洲欧洲日产一区二区 | 亚洲天堂2017无码中文 | 成人亚洲精品久久久久软件 | 欧美日韩人成综合在线播放 | 2020久久超碰国产精品最新 | 日韩精品无码一本二本三本色 | 亚洲成av人片天堂网无码】 | 97精品国产97久久久久久免费 | 国产精品丝袜黑色高跟鞋 | 在线成人www免费观看视频 | 成人无码视频在线观看网站 | 国产卡一卡二卡三 | 两性色午夜视频免费播放 | 中文字幕无码av激情不卡 | 亚洲熟妇色xxxxx欧美老妇y | 国产激情无码一区二区 | 国产亚洲精品久久久久久 | 色偷偷人人澡人人爽人人模 | 亚洲七七久久桃花影院 | 欧洲熟妇精品视频 | 久久精品人妻少妇一区二区三区 | 大地资源中文第3页 | 成人一区二区免费视频 | 97精品人妻一区二区三区香蕉 | 中文字幕人妻无码一夲道 | 精品无码成人片一区二区98 | 国产一区二区三区四区五区加勒比 | 日韩av激情在线观看 | 国产人成高清在线视频99最全资源 | 天堂在线观看www | 久久人人爽人人人人片 | 西西人体www44rt大胆高清 | 性做久久久久久久免费看 | 无遮挡国产高潮视频免费观看 | 亚洲国产精品无码一区二区三区 | 亚洲成a人一区二区三区 | 国产精品怡红院永久免费 | 亚洲欧美精品伊人久久 | 成人av无码一区二区三区 | 久久zyz资源站无码中文动漫 | 我要看www免费看插插视频 | 97夜夜澡人人双人人人喊 | 三上悠亚人妻中文字幕在线 | 蜜桃av抽搐高潮一区二区 | 国产97在线 | 亚洲 | 中文毛片无遮挡高清免费 | 亚洲区小说区激情区图片区 | 亚洲精品国产a久久久久久 | 国产人妻久久精品二区三区老狼 | 未满成年国产在线观看 | 精品一区二区三区无码免费视频 | 国产后入清纯学生妹 | 亚洲人成人无码网www国产 | 三级4级全黄60分钟 | 波多野结衣 黑人 | 国产后入清纯学生妹 | 97精品国产97久久久久久免费 | 99精品久久毛片a片 | 一本久道久久综合婷婷五月 | 67194成是人免费无码 | 纯爱无遮挡h肉动漫在线播放 | 一本无码人妻在中文字幕免费 | 久激情内射婷内射蜜桃人妖 | 亚洲精品久久久久中文第一幕 | 成熟女人特级毛片www免费 | 国产精品高潮呻吟av久久4虎 | 在线播放免费人成毛片乱码 | 荫蒂被男人添的好舒服爽免费视频 | 精品厕所偷拍各类美女tp嘘嘘 | 精品水蜜桃久久久久久久 | 综合激情五月综合激情五月激情1 | 国产9 9在线 | 中文 | 久久久中文久久久无码 | 成年女人永久免费看片 | 999久久久国产精品消防器材 | 久久午夜无码鲁丝片秋霞 | 人人澡人摸人人添 | 午夜福利一区二区三区在线观看 | 久久99精品久久久久久 | 亚洲男人av天堂午夜在 | 国产亚洲欧美日韩亚洲中文色 | 日本一区二区更新不卡 | 亚洲精品久久久久久一区二区 | 一本久久a久久精品vr综合 | 国产办公室秘书无码精品99 | 亚洲一区二区三区在线观看网站 | 中国女人内谢69xxxxxa片 | 女人被男人爽到呻吟的视频 | 国产精品18久久久久久麻辣 | 麻豆成人精品国产免费 | 亚洲中文字幕无码一久久区 | 强伦人妻一区二区三区视频18 | 国产真实夫妇视频 | 日本xxxx色视频在线观看免费 | 日本饥渴人妻欲求不满 | 成年美女黄网站色大免费视频 | 久久久久av无码免费网 | 人妻有码中文字幕在线 | 精品无码一区二区三区的天堂 | 中文精品无码中文字幕无码专区 | 久久精品无码一区二区三区 | 搡女人真爽免费视频大全 | 国内丰满熟女出轨videos | 精品国产一区二区三区四区在线看 | 国产午夜福利100集发布 | 妺妺窝人体色www婷婷 | 国产性生交xxxxx无码 | 波多野结衣av一区二区全免费观看 | 红桃av一区二区三区在线无码av | 97久久国产亚洲精品超碰热 | 亚洲色大成网站www国产 | 天天爽夜夜爽夜夜爽 | 无码国产乱人伦偷精品视频 | 久久久久se色偷偷亚洲精品av | 国内精品九九久久久精品 | 97久久精品无码一区二区 | 日本熟妇乱子伦xxxx | 天天燥日日燥 | 精品久久久久久人妻无码中文字幕 | 国产精品多人p群无码 | 亚洲成a人一区二区三区 | 日韩精品成人一区二区三区 | 午夜精品一区二区三区的区别 | 亚洲精品中文字幕久久久久 | 国产亚av手机在线观看 | 东京热无码av男人的天堂 | 性欧美videos高清精品 | 亚洲自偷自偷在线制服 | 激情五月综合色婷婷一区二区 | 国产精品爱久久久久久久 | 少妇高潮一区二区三区99 | 无码国产乱人伦偷精品视频 | 亚洲理论电影在线观看 | 国产办公室秘书无码精品99 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 九月婷婷人人澡人人添人人爽 | 人人超人人超碰超国产 | 少妇人妻大乳在线视频 | 无套内谢的新婚少妇国语播放 | 又大又黄又粗又爽的免费视频 | 国产精品亚洲专区无码不卡 | 激情综合激情五月俺也去 | 装睡被陌生人摸出水好爽 | 欧美自拍另类欧美综合图片区 | 免费看少妇作爱视频 | 久久综合狠狠综合久久综合88 | 亚洲国产高清在线观看视频 | 国产精品无码一区二区三区不卡 | 伊人久久大香线蕉午夜 | 色五月丁香五月综合五月 | 自拍偷自拍亚洲精品被多人伦好爽 | 国产高潮视频在线观看 | 国产精华av午夜在线观看 | 无套内谢的新婚少妇国语播放 | 香蕉久久久久久av成人 | 人妻体内射精一区二区三四 | 欧美日本免费一区二区三区 | 成人无码精品1区2区3区免费看 | 成人精品一区二区三区中文字幕 | 丰满少妇人妻久久久久久 | 精品乱子伦一区二区三区 | 亚洲码国产精品高潮在线 | 久久五月精品中文字幕 | 正在播放东北夫妻内射 | 国产亚洲精品久久久ai换 | 成人动漫在线观看 | 亚洲日韩av一区二区三区中文 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 精品一二三区久久aaa片 | 成人无码精品一区二区三区 | 欧美野外疯狂做受xxxx高潮 | 亚洲国产精品久久人人爱 | 成人片黄网站色大片免费观看 | 亚洲精品中文字幕乱码 | 婷婷五月综合缴情在线视频 | www国产精品内射老师 | 精品欧美一区二区三区久久久 | 久久午夜无码鲁丝片秋霞 | 精品成在人线av无码免费看 | 亚洲综合在线一区二区三区 | 久久99精品国产麻豆 | 无套内谢的新婚少妇国语播放 | 色情久久久av熟女人妻网站 | 亚洲狠狠婷婷综合久久 | 精品偷拍一区二区三区在线看 | 天干天干啦夜天干天2017 | 日日橹狠狠爱欧美视频 | 无套内射视频囯产 | 一区二区三区高清视频一 | 中文字幕乱妇无码av在线 | 思思久久99热只有频精品66 | 欧美老熟妇乱xxxxx | 中文字幕日产无线码一区 | 久久99国产综合精品 | 狠狠色丁香久久婷婷综合五月 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产精品理论片在线观看 | 国产欧美熟妇另类久久久 | 国产免费观看黄av片 | 人人爽人人澡人人人妻 | 午夜福利试看120秒体验区 | 婷婷五月综合激情中文字幕 | 久久国产自偷自偷免费一区调 | 午夜精品久久久久久久久 | 美女扒开屁股让男人桶 | 午夜福利试看120秒体验区 | 国产在线精品一区二区高清不卡 | 日本乱人伦片中文三区 | 日韩精品一区二区av在线 | 激情内射日本一区二区三区 | 国产精品美女久久久久av爽李琼 | 日韩精品无码免费一区二区三区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲精品一区二区三区大桥未久 | 久久精品国产日本波多野结衣 | 亚洲精品国产第一综合99久久 | 97人妻精品一区二区三区 | 高潮毛片无遮挡高清免费视频 | 蜜臀av在线播放 久久综合激激的五月天 | 水蜜桃亚洲一二三四在线 | 久久久精品国产sm最大网站 | 无码国产乱人伦偷精品视频 | 国产成人亚洲综合无码 | 精品久久久无码人妻字幂 | 爽爽影院免费观看 | 国产偷抇久久精品a片69 | 蜜桃av抽搐高潮一区二区 | 无码吃奶揉捏奶头高潮视频 | 男人扒开女人内裤强吻桶进去 | 亚洲小说春色综合另类 | 玩弄人妻少妇500系列视频 | 国产精品-区区久久久狼 | 欧美大屁股xxxxhd黑色 | aⅴ在线视频男人的天堂 | 西西人体www44rt大胆高清 | 久久午夜夜伦鲁鲁片无码免费 | 熟妇女人妻丰满少妇中文字幕 | 欧美日韩在线亚洲综合国产人 | 国产亚洲精品久久久久久久 | 欧美日韩色另类综合 | 婷婷综合久久中文字幕蜜桃三电影 | 久久97精品久久久久久久不卡 | 国产无遮挡又黄又爽免费视频 | 国产真实乱对白精彩久久 | 色综合久久网 | 全球成人中文在线 | 无码帝国www无码专区色综合 | 日本欧美一区二区三区乱码 | 久在线观看福利视频 | 欧美自拍另类欧美综合图片区 | 免费看男女做好爽好硬视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲一区二区三区四区 | 国产精品嫩草久久久久 | 欧美三级不卡在线观看 | 18禁止看的免费污网站 | 国产又粗又硬又大爽黄老大爷视 | 亚洲精品久久久久中文第一幕 | 无码国产色欲xxxxx视频 | 女人高潮内射99精品 | 国产精品高潮呻吟av久久 | 欧美真人作爱免费视频 | 色欲综合久久中文字幕网 | 久久久久久a亚洲欧洲av冫 | 欧美丰满熟妇xxxx性ppx人交 | 久久精品中文字幕一区 | 丰满人妻精品国产99aⅴ | 欧美国产亚洲日韩在线二区 | 国产无av码在线观看 | 国产精品亚洲lv粉色 | 欧美野外疯狂做受xxxx高潮 | 亚洲中文字幕av在天堂 | 久久精品99久久香蕉国产色戒 | 国产成人无码区免费内射一片色欲 | 999久久久国产精品消防器材 | 少妇高潮喷潮久久久影院 | 偷窥村妇洗澡毛毛多 | 久久国产精品精品国产色婷婷 | 亚洲一区二区三区 | 人妻人人添人妻人人爱 | 久久久久久久人妻无码中文字幕爆 | 亚洲中文字幕av在天堂 | 激情人妻另类人妻伦 | 97精品人妻一区二区三区香蕉 | 丰腴饱满的极品熟妇 | 国产精品自产拍在线观看 | 爆乳一区二区三区无码 | 国产卡一卡二卡三 | 狠狠色噜噜狠狠狠7777奇米 | 国产 精品 自在自线 | 狂野欧美性猛交免费视频 | 国产亚洲欧美在线专区 | 亚拍精品一区二区三区探花 | 亚洲国产日韩a在线播放 | 性欧美牲交在线视频 | 久久精品无码一区二区三区 | 97资源共享在线视频 | 国产精品无码一区二区桃花视频 | 天干天干啦夜天干天2017 | 4hu四虎永久在线观看 | 美女极度色诱视频国产 | 麻豆精品国产精华精华液好用吗 | 国产午夜视频在线观看 | 大色综合色综合网站 | 欧洲精品码一区二区三区免费看 | 日日摸天天摸爽爽狠狠97 | 色欲av亚洲一区无码少妇 | 精品无码一区二区三区爱欲 | 久久97精品久久久久久久不卡 | 久久久中文字幕日本无吗 | 男人和女人高潮免费网站 | 国产9 9在线 | 中文 | 国产精品欧美成人 | 奇米影视7777久久精品人人爽 | 婷婷五月综合缴情在线视频 | av无码不卡在线观看免费 | 日本熟妇人妻xxxxx人hd | 久精品国产欧美亚洲色aⅴ大片 | 日本熟妇乱子伦xxxx | 国产免费无码一区二区视频 | 女人被男人躁得好爽免费视频 | 欧美精品无码一区二区三区 | 欧美老人巨大xxxx做受 | 亚洲国产一区二区三区在线观看 | 亚洲精品鲁一鲁一区二区三区 | 久久伊人色av天堂九九小黄鸭 | aⅴ在线视频男人的天堂 | 久久国产自偷自偷免费一区调 | 国内老熟妇对白xxxxhd | 成年女人永久免费看片 | 麻豆人妻少妇精品无码专区 | 国产高清av在线播放 | 日韩少妇内射免费播放 | 色狠狠av一区二区三区 | 国产亚洲欧美在线专区 | 精品无人区无码乱码毛片国产 | 日日干夜夜干 | 久久综合激激的五月天 | 亚洲精品一区二区三区在线观看 | 亚洲综合无码一区二区三区 | 亚洲色无码一区二区三区 | 一二三四社区在线中文视频 | 亚洲欧美色中文字幕在线 | 国产国产精品人在线视 | 亚洲欧美综合区丁香五月小说 | 国产色在线 | 国产 | 久久久久99精品成人片 | 熟妇人妻无码xxx视频 | 全黄性性激高免费视频 | 久久久久免费精品国产 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲中文字幕乱码av波多ji | 青草青草久热国产精品 | 蜜臀aⅴ国产精品久久久国产老师 | 国产亚洲精品精品国产亚洲综合 | 无码精品人妻一区二区三区av | 色婷婷综合激情综在线播放 | 久久久久99精品成人片 | 特大黑人娇小亚洲女 | 亚洲成a人片在线观看日本 | 老熟妇乱子伦牲交视频 | 精品国产一区二区三区四区在线看 | 一本久道久久综合狠狠爱 | 日日鲁鲁鲁夜夜爽爽狠狠 | 久久久国产一区二区三区 | ass日本丰满熟妇pics | 午夜不卡av免费 一本久久a久久精品vr综合 | 55夜色66夜色国产精品视频 | 亚洲精品一区二区三区四区五区 | 鲁大师影院在线观看 | 国产精品人妻一区二区三区四 | а√天堂www在线天堂小说 | 野狼第一精品社区 | 玩弄少妇高潮ⅹxxxyw | 无码av免费一区二区三区试看 | 97精品国产97久久久久久免费 | 无码人妻久久一区二区三区不卡 | 色欲av亚洲一区无码少妇 | 老子影院午夜精品无码 | 在线观看国产午夜福利片 | 色婷婷综合激情综在线播放 | 国产午夜福利100集发布 | 中文无码成人免费视频在线观看 | 欧美激情一区二区三区成人 | 中文字幕亚洲情99在线 | 亚洲午夜福利在线观看 | 中文字幕乱妇无码av在线 | 国产午夜无码视频在线观看 | 又大又黄又粗又爽的免费视频 | 国产在线aaa片一区二区99 | 欧美丰满熟妇xxxx性ppx人交 | 在线а√天堂中文官网 | 狠狠色色综合网站 | 内射白嫩少妇超碰 | 蜜桃臀无码内射一区二区三区 | 国产午夜视频在线观看 | 少妇激情av一区二区 | 亚洲国产高清在线观看视频 | 无码人妻丰满熟妇区毛片18 | 伊人久久大香线蕉av一区二区 | 综合网日日天干夜夜久久 | 无码一区二区三区在线观看 | 人妻无码久久精品人妻 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲国产精品一区二区第一页 | 麻豆国产人妻欲求不满谁演的 | 国产亚洲精品精品国产亚洲综合 | 露脸叫床粗话东北少妇 | 国产凸凹视频一区二区 | 成人欧美一区二区三区黑人 | 性欧美疯狂xxxxbbbb | 无码人妻黑人中文字幕 | 对白脏话肉麻粗话av | 中文字幕无线码免费人妻 | 粉嫩少妇内射浓精videos | 亚洲成av人片在线观看无码不卡 | 国产人成高清在线视频99最全资源 | 国产精品无套呻吟在线 | 波多野结衣一区二区三区av免费 | 熟妇激情内射com | 黑人巨大精品欧美一区二区 | 久久久久成人片免费观看蜜芽 | 国产真人无遮挡作爱免费视频 | 色婷婷av一区二区三区之红樱桃 | 国产精品久久久久影院嫩草 | 国产极品美女高潮无套在线观看 | 亚洲成a人一区二区三区 | 欧美老熟妇乱xxxxx | 欧美喷潮久久久xxxxx | 欧美野外疯狂做受xxxx高潮 | 樱花草在线播放免费中文 | a片免费视频在线观看 | 欧洲vodafone精品性 | 国内精品九九久久久精品 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲成av人片在线观看无码不卡 | 大乳丰满人妻中文字幕日本 | 双乳奶水饱满少妇呻吟 | 小泽玛莉亚一区二区视频在线 | 中文字幕人妻无码一区二区三区 | 国产精品99爱免费视频 | 亚洲一区二区三区四区 | 性做久久久久久久免费看 | 久精品国产欧美亚洲色aⅴ大片 | 爽爽影院免费观看 | 福利一区二区三区视频在线观看 | 亚洲男人av香蕉爽爽爽爽 | 性生交大片免费看l | 免费看少妇作爱视频 | 亚洲国产av精品一区二区蜜芽 | 日韩亚洲欧美精品综合 | 女人高潮内射99精品 | 初尝人妻少妇中文字幕 | 精品熟女少妇av免费观看 | 九九在线中文字幕无码 | 色 综合 欧美 亚洲 国产 | 亚洲乱亚洲乱妇50p | 国产精品99爱免费视频 | 欧美zoozzooz性欧美 | 无码人妻久久一区二区三区不卡 | 熟妇激情内射com | 午夜精品久久久久久久 | 国产av无码专区亚洲awww | 麻豆av传媒蜜桃天美传媒 | 爽爽影院免费观看 | 国产亚洲精品久久久久久久久动漫 | 三上悠亚人妻中文字幕在线 | 漂亮人妻洗澡被公强 日日躁 | 亚洲精品国产精品乱码视色 | 色综合久久久久综合一本到桃花网 | 久久综合久久自在自线精品自 | 美女张开腿让人桶 | 在线精品国产一区二区三区 | 久久成人a毛片免费观看网站 | 久久久久成人片免费观看蜜芽 | 亚洲精品一区二区三区婷婷月 | 久久人人爽人人爽人人片av高清 | 99精品国产综合久久久久五月天 | √天堂中文官网8在线 | 国产高潮视频在线观看 | 国产两女互慰高潮视频在线观看 | 亚洲欧美综合区丁香五月小说 | 一个人看的www免费视频在线观看 | 高清国产亚洲精品自在久久 | 久久精品人人做人人综合试看 | 丰满人妻被黑人猛烈进入 | 中文字幕无码乱人伦 | 中文字幕无线码免费人妻 | 男女猛烈xx00免费视频试看 | 伊人久久大香线蕉午夜 | 奇米影视7777久久精品人人爽 | 131美女爱做视频 | 无码吃奶揉捏奶头高潮视频 | 无套内谢的新婚少妇国语播放 | 亚洲欧洲无卡二区视頻 | 成人无码精品1区2区3区免费看 | 亚洲欧美色中文字幕在线 | 国产乱人伦偷精品视频 | 国产内射老熟女aaaa | 午夜熟女插插xx免费视频 | 亚洲 a v无 码免 费 成 人 a v | 丰满岳乱妇在线观看中字无码 | 大地资源网第二页免费观看 | 国产香蕉尹人综合在线观看 | 人妻人人添人妻人人爱 | 纯爱无遮挡h肉动漫在线播放 | 中国大陆精品视频xxxx | 亚洲最大成人网站 | 99久久久国产精品无码免费 | 欧美乱妇无乱码大黄a片 | 俺去俺来也在线www色官网 | 欧美人与善在线com | 欧美xxxxx精品 | 无码人妻丰满熟妇区五十路百度 | 澳门永久av免费网站 | 伊人久久大香线焦av综合影院 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲欧美国产精品久久 | 无码中文字幕色专区 | 男女猛烈xx00免费视频试看 | 大地资源网第二页免费观看 | 久久久久久国产精品无码下载 | 欧美亚洲日韩国产人成在线播放 | 国产精品久久久久久久影院 | 四十如虎的丰满熟妇啪啪 | 中文字幕人成乱码熟女app | 精品亚洲成av人在线观看 | 少妇愉情理伦片bd | 西西人体www44rt大胆高清 | 国产特级毛片aaaaaa高潮流水 | 一个人免费观看的www视频 | 乌克兰少妇xxxx做受 | 无码人妻av免费一区二区三区 | 精品人人妻人人澡人人爽人人 | 久久精品99久久香蕉国产色戒 | 欧美 丝袜 自拍 制服 另类 | 人妻中文无码久热丝袜 | 国产舌乚八伦偷品w中 | 国产艳妇av在线观看果冻传媒 | 少妇人妻偷人精品无码视频 | 久在线观看福利视频 | 亚洲成av人片在线观看无码不卡 | 亚洲日本在线电影 | 暴力强奷在线播放无码 | 激情内射亚州一区二区三区爱妻 | 色综合久久久无码中文字幕 | 久久久亚洲欧洲日产国码αv | 亚洲综合久久一区二区 | 暴力强奷在线播放无码 | 久久综合色之久久综合 | 久久亚洲国产成人精品性色 | 国产香蕉尹人视频在线 | 国产av人人夜夜澡人人爽麻豆 | 一本大道久久东京热无码av | 色欲av亚洲一区无码少妇 | 啦啦啦www在线观看免费视频 | 亚洲精品中文字幕 | 女人被爽到呻吟gif动态图视看 | 国产精品99爱免费视频 | 国产乱人伦av在线无码 | 麻豆成人精品国产免费 | 欧洲美熟女乱又伦 | 无码人妻丰满熟妇区五十路百度 | 精品国产成人一区二区三区 | av在线亚洲欧洲日产一区二区 | 色老头在线一区二区三区 | 国产尤物精品视频 | 色综合天天综合狠狠爱 | 免费国产黄网站在线观看 | 久久天天躁狠狠躁夜夜免费观看 | 一本色道久久综合狠狠躁 | 精品熟女少妇av免费观看 | 红桃av一区二区三区在线无码av | 久久精品国产日本波多野结衣 | 国产成人一区二区三区在线观看 | 精品无码一区二区三区的天堂 | 国产精品资源一区二区 | 色综合久久久无码网中文 | 国产成人无码a区在线观看视频app | 成人免费视频视频在线观看 免费 | 亚洲 欧美 激情 小说 另类 | 亚洲欧美日韩综合久久久 | 性啪啪chinese东北女人 | 精品 日韩 国产 欧美 视频 | 久激情内射婷内射蜜桃人妖 | 亚洲精品久久久久久一区二区 | 欧洲熟妇色 欧美 | 国产成人无码一二三区视频 | 国产av一区二区精品久久凹凸 | 欧美日韩综合一区二区三区 | 国产亚洲欧美日韩亚洲中文色 | 国产精品人人爽人人做我的可爱 | 在线观看国产一区二区三区 | 曰韩无码二三区中文字幕 | 日韩精品a片一区二区三区妖精 | 欧美 丝袜 自拍 制服 另类 | 在线播放免费人成毛片乱码 | 给我免费的视频在线观看 | 久久久国产一区二区三区 | 久久综合九色综合97网 | 正在播放老肥熟妇露脸 | 青青青爽视频在线观看 | 国产两女互慰高潮视频在线观看 | 亚洲综合色区中文字幕 | 国产人妻人伦精品1国产丝袜 | 美女极度色诱视频国产 | 97se亚洲精品一区 | 欧美丰满熟妇xxxx性ppx人交 | 国产精品办公室沙发 | 久久国产劲爆∧v内射 | 亚洲国产日韩a在线播放 | 日韩欧美中文字幕公布 | 国产色精品久久人妻 | 成人毛片一区二区 | 久久亚洲日韩精品一区二区三区 | 国精产品一品二品国精品69xx | 十八禁真人啪啪免费网站 | 四虎国产精品免费久久 | 精品厕所偷拍各类美女tp嘘嘘 | 欧美xxxx黑人又粗又长 | 99精品国产综合久久久久五月天 | 一本久道久久综合婷婷五月 | 桃花色综合影院 | 2020最新国产自产精品 | 天堂在线观看www | 亚洲国产成人a精品不卡在线 | 欧美国产亚洲日韩在线二区 | 久久久久99精品国产片 | 中文字幕久久久久人妻 | 久久99精品国产麻豆 | 蜜臀av无码人妻精品 | 无码人妻出轨黑人中文字幕 | 中文字幕人妻无码一区二区三区 | 中文精品久久久久人妻不卡 | 领导边摸边吃奶边做爽在线观看 | 亚洲成a人片在线观看无码3d | 成人影院yy111111在线观看 | 少妇人妻偷人精品无码视频 | 水蜜桃亚洲一二三四在线 | 一个人看的www免费视频在线观看 | 亚洲精品无码人妻无码 | 亚洲综合久久一区二区 | 国产精品久久久久久亚洲影视内衣 | 午夜精品久久久内射近拍高清 | 午夜丰满少妇性开放视频 | 免费无码的av片在线观看 | 午夜性刺激在线视频免费 | 国产成人无码区免费内射一片色欲 | 学生妹亚洲一区二区 | 亚洲爆乳大丰满无码专区 | 76少妇精品导航 | 强辱丰满人妻hd中文字幕 | 国产亚洲精品久久久久久久 | 欧美国产日韩亚洲中文 | 亚洲色无码一区二区三区 | 精品熟女少妇av免费观看 | 好屌草这里只有精品 | 97色伦图片97综合影院 | 中文无码伦av中文字幕 | 亚洲精品欧美二区三区中文字幕 | 九九久久精品国产免费看小说 | 色情久久久av熟女人妻网站 | 国产成人无码区免费内射一片色欲 | 国产97色在线 | 免 | 无人区乱码一区二区三区 | 国产精品久久福利网站 | 无码av免费一区二区三区试看 | 老司机亚洲精品影院无码 | 青草视频在线播放 | 丰满少妇女裸体bbw | 国内精品一区二区三区不卡 | 高潮毛片无遮挡高清免费视频 | 国产猛烈高潮尖叫视频免费 | 日韩视频 中文字幕 视频一区 | 国内精品人妻无码久久久影院蜜桃 | 成人无码视频免费播放 | 国产午夜亚洲精品不卡 | 荡女精品导航 | 在线播放免费人成毛片乱码 | 日韩精品a片一区二区三区妖精 | 激情五月综合色婷婷一区二区 | 国产亚洲精品久久久久久大师 | 国产凸凹视频一区二区 | 日产精品99久久久久久 | 亚洲国产成人a精品不卡在线 | 国产精品美女久久久久av爽李琼 | 中文无码成人免费视频在线观看 | 99国产精品白浆在线观看免费 | 欧美国产日韩久久mv | 国精产品一品二品国精品69xx | 精品人妻人人做人人爽夜夜爽 | 中文精品久久久久人妻不卡 | 亚洲国产欧美在线成人 | 亚洲欧洲无卡二区视頻 | 极品尤物被啪到呻吟喷水 | 国产成人精品久久亚洲高清不卡 | 女人被男人爽到呻吟的视频 | 免费中文字幕日韩欧美 | 老熟妇乱子伦牲交视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲人成无码网www | 日韩视频 中文字幕 视频一区 | 激情国产av做激情国产爱 | 亚洲午夜无码久久 | 久久久久久久人妻无码中文字幕爆 | 亚洲精品国产品国语在线观看 | 午夜精品久久久久久久久 |