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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【编程语言】Java基础进阶——面向对象部分

發(fā)布時(shí)間:2025/5/22 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【编程语言】Java基础进阶——面向对象部分 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

斷斷續(xù)續(xù)終于把男神的Java都看完了,只是囫圇吞棗走馬觀花罷了,還有好多地方不是很理解,很多細(xì)節(jié)都沒能理清。之后再邊動手邊復(fù)習(xí)一遍,然后開始嘗試做點(diǎn)東西吧!

?

0. 一些小tips

·為避免出現(xiàn)錯誤提示:The local variable may not have been initialized.應(yīng)該每個(gè)函數(shù)內(nèi)的局部變量都定義初始化。即保持良好的編程習(xí)慣,每個(gè)變量都定義初始化。

·String s = “”;

·boolean b = false;

·int a = 0;

?

·為避免構(gòu)造方法的歧義重載,良好的編程習(xí)慣是默認(rèn)建立一個(gè)空的構(gòu)造方法:

<類名>()

{

}

·每一個(gè)類中都可以寫一個(gè)main方法,用來測試這個(gè)類的一些功能和屬性

·時(shí)刻謹(jǐn)記對象變量只是對象的管理者而非對象本身,聲明對象變量并沒有創(chuàng)建對象,就好比聲明一個(gè)指針,指針并不會指向任何有意義的內(nèi)存空間一樣。對象變量和指針變量,兩者都需被具體賦值,才能進(jìn)行接下來的操作。

·需要對字符串進(jìn)行很多復(fù)雜操作并會產(chǎn)生大量新的字符串時(shí),為減少系統(tǒng)開銷,應(yīng)使用StringBuffer,最后用toString()輸出結(jié)果字符串即可

1. 類與對象

·對象是實(shí)體,需要被創(chuàng)建,可以為我們做事情

·類是規(guī)范,根據(jù)類的定義來創(chuàng)建對象

類定義了對象,而對象是類的實(shí)體。

對象 = 屬性 + 服務(wù)

封裝:把數(shù)據(jù)和對數(shù)據(jù)的操作放在一起,由操作來保護(hù)數(shù)據(jù),數(shù)據(jù)不對外公開。

其中,

·數(shù)據(jù):屬性或狀態(tài) //? 類的成員變量

·操作:函數(shù)?????? // 類的成員函數(shù)

定義一個(gè)類,即是封裝的過程:

類中的變量都是類的成員變量(數(shù)據(jù)),類中的函數(shù)都是類的成員函數(shù)(對數(shù)據(jù)的操作)。

可以形象地將類描述成一個(gè)切開一半的咸蛋:蛋黃是數(shù)據(jù),而包裹在蛋黃外面的蛋白則是對數(shù)據(jù)的操作,由蛋白包裹覆蓋蛋黃以起到保護(hù)的作用,就是用對數(shù)據(jù)的操作來保護(hù)數(shù)據(jù)。

用類創(chuàng)建(new)一個(gè)對象,語法上表達(dá)為:

<類> <對象名> = new <類>();

定義出來的變量是對象變量,是對象的管理者而非所有者(即對象變量不是對象本身,類似指針與被指針指向的內(nèi)存區(qū)域的關(guān)系)。

一個(gè)類可以任意創(chuàng)建多個(gè)對象,每個(gè)對象都是獨(dú)立不同的。在Debug中可以看到每個(gè)對象變量的細(xì)節(jié):對象內(nèi)部的變量當(dāng)前的值,對應(yīng)的value項(xiàng)會顯示對象所屬的類名以及id等。

在創(chuàng)建對象變量之后,就可以用.運(yùn)算符進(jìn)行對象的操作了,即調(diào)用對象的某個(gè)函數(shù),寫法為:

<對象>.<對象的成員函數(shù)名>();

?

1)函數(shù)與成員變量

在函數(shù)中可以直接寫成員變量的名字來訪問成員變量,就好比C中的函數(shù)可以直接用全局變量的名字一樣。

函數(shù)是通過對象來調(diào)用的:

·v.insertMoney();

·這次調(diào)用臨時(shí)建立了insertMoney()和V之間的關(guān)系,讓insertMoney()內(nèi)部的成員變量指的是v的成員變量。

this是成員函數(shù)的一個(gè)特殊的固有本地變量,它表達(dá)了調(diào)用這個(gè)函數(shù)的那個(gè)對象(可以用指針的思想來理解:有一個(gè)固有的對象管理者this,函數(shù)調(diào)用時(shí)this臨時(shí)指向了.前面的那個(gè)對象,以表達(dá)當(dāng)前調(diào)用函數(shù)的具體是哪個(gè)對象)

this可以寫在函數(shù)內(nèi)部,用來表示此次調(diào)用該函數(shù)的那個(gè)對象,因此,

·可以用this來區(qū)分同名的 對象的成員變量 與 函數(shù)內(nèi)部的本地變量:

class A {int a;void function( int a ) {this.a = a; // 若不用this則語法上是錯誤的,this.a表達(dá)的是對象的成員變量,而a則是函數(shù)function()內(nèi)的參數(shù),即一個(gè)本地變量,兩者是不同的 } }

?

·也可以用來方便地(偷懶少打幾個(gè)字)來調(diào)用其他成員函數(shù):

1 class B { 2 int a; 3 … ; 4 5 void function1() 6 { 7 this.function2(); //等同于function2();在eclipse上輸入.之后會列出該類中的全部成員函數(shù),然后選擇所需即可自動填補(bǔ) 8 9 } 10 void function2() 11 { 12 … ; 13 } 14 }

?

2)本地變量與成員變量

·定義在函數(shù)內(nèi)部的是本地變量,其生存期和作用域都是函數(shù)內(nèi)部

·成員變量是定義在類內(nèi)函數(shù)外的,生存期是對象的生存期,作用域是類內(nèi)部

3)成員變量初始化

在Java中,不允許存在未使用的本地變量,而成員變量的初始化則是自動的。

·成員變量在定義的地方就可以給初始值

·沒有初始值的成員變量會自動獲得0值 // 這里的0值是廣義的:0/false/null

·對象變量的0值表示它沒有管理任何對象,也可以主動給null值

·定義初始化時(shí)可以使用調(diào)用函數(shù)的返回值,甚至可以使用已經(jīng)定義過的成員變量的值

4)構(gòu)造函數(shù)與函數(shù)重載

如果有一個(gè)成員函數(shù)的名字與類名完全相同,則在創(chuàng)建這個(gè)類的每一個(gè)對象的時(shí)候會自動調(diào)用這個(gè)函數(shù),即構(gòu)造函數(shù),也稱構(gòu)造器。

構(gòu)造函數(shù):在構(gòu)造(創(chuàng)建)對象的時(shí)候會被自動調(diào)用的函數(shù),執(zhí)行時(shí)先執(zhí)行構(gòu)造函數(shù)外面的定義初始化,之后再進(jìn)入構(gòu)造函數(shù),最后構(gòu)造函數(shù)結(jié)束返回new處,將構(gòu)造出來的對象交給對象變量管理。構(gòu)造函數(shù)不能有返回類型(包括void,void可以理解為這個(gè)函數(shù)有返回類型,類型是空(void),沒有返回值)。

在Java中,函數(shù)可以重載:

·一個(gè)類可以有多個(gè)構(gòu)造函數(shù),只要它們的參數(shù)表不同

·創(chuàng)建對象的時(shí)候給出不同的參數(shù)值,就會自動調(diào)用不同的構(gòu)造函數(shù)

·通過this()還可以調(diào)用其他構(gòu)造函數(shù)

·一個(gè)類里的同名但參數(shù)不同的函數(shù)構(gòu)成了重載關(guān)系

關(guān)于this():只能在構(gòu)造函數(shù)內(nèi)的第一句處使用一次。寫法:

1 class A { 2 int a; 3 … ; 4 A() // 構(gòu)造函數(shù),與類名完全一致且無返回類型 5 { 6 … ; 7 } 8 A( int a ) // 多個(gè)同名但參數(shù)表不同的函數(shù)實(shí)現(xiàn)函數(shù)重載 9 { 10 this(); //在A(int a)內(nèi)重載A(),只能在函數(shù)內(nèi)第一句處使用一次 11 … ; 12 } 13 }

?

?

2. 對象交互

面向?qū)ο蟪绦蛟O(shè)計(jì)的第一步,就是在問題領(lǐng)域中識別出有效的對象,然后從識別出的對象中抽象出類來。

面向?qū)ο蟮暮诵脑谟诳吹皆趩栴}中有些什么樣的東西,每樣?xùn)|西有什么樣的屬性,這些東西之間是如何交互的。

?

一個(gè)類中的成員變量可以使其他類的對象,最后得到的該類的對象是由多個(gè)其他類的對象組成的(就好比C中的結(jié)構(gòu)體嵌套結(jié)構(gòu)體一樣,Java中是對象包含對象,但Java中的對象能做的事情比C中的結(jié)構(gòu)體多太多了)。

?

面向?qū)ο笤O(shè)計(jì)思想:

對象和對象之間的聯(lián)系緊密程度叫做耦合。對象和對象的耦合程度越緊,表現(xiàn)在源代碼上,就是它們的代碼是互相依賴、互相牽制的。我們理想的模型,是對象和對象之間的耦合要盡可能的松,平行的對象要盡量減少直接聯(lián)系,讓更高層次的對象來提供通信服務(wù)。

即,同一個(gè)類的每一個(gè)對象都盡可能的相互獨(dú)立,彼此之間沒有直接聯(lián)系。這樣在編寫對象甲的時(shí)候就不用去考慮對象乙的情況,編寫對象乙的時(shí)候也不需要考慮對象甲。讓兩者之間的交互由更高級的對象丙(同時(shí)包含對象甲和對象乙)來完成。

?

封裝,就是把數(shù)據(jù)和對這些數(shù)據(jù)的操作放在一起,并且用這些操作把數(shù)據(jù)掩蓋起來,是面向?qū)ο蟮幕靖拍钪?#xff0c;也是最核心的概念。

一個(gè)非常直截了當(dāng)?shù)氖侄蝸肀WC在類的設(shè)計(jì)的時(shí)候做到封裝:

·所有的成員變量必須是private的,這樣就避免別人任意使用你的內(nèi)部數(shù)據(jù);

·所有public的函數(shù),只是用來實(shí)現(xiàn)這個(gè)類的對象或類自己要提供的服務(wù)的,而不是用來直接訪問數(shù)據(jù)的。除非對數(shù)據(jù)的訪問就是這個(gè)類及對象的服務(wù)。簡單地說,給每個(gè)成員變量提供一對用于讀寫的get/set函數(shù)也是不合適的設(shè)計(jì)。

?

封閉的訪問屬性:private(私有的):

·只有這個(gè)類的內(nèi)部可以訪問(即如果在別的類中創(chuàng)造了該類的對象,也無法通過這個(gè)對象來訪問private的成員變量,因?yàn)椴皇窃谠擃惖膬?nèi)部)

·類的內(nèi)部指的是成員函數(shù)和定義初始化

·這個(gè)限制是針對類的而不是針對對象的:即,對于私有的理解是從代碼的層面而非運(yùn)行的層面上來看的。只要對private的成員變量的訪問是在該類的內(nèi)部發(fā)生的,這個(gè)操作就是合理的。也就是說,同一個(gè)類的不同對象之間可以互相訪問私有成員。

?

開放的訪問屬性:public(公共的):

·任何部分(其他類)都可以自由訪問

如果一個(gè)類是public的:

·表明任何類都可以利用該類定義變量

·該類所處源文件的文件名必須與該類名相同,否則會報(bào)錯:The public type <class name> must be defined in its own file.修改建議為:Rename compilation unit to ‘<class name>.java’

?

編譯單元:

·一個(gè)源代碼文件(.java文件)是一個(gè)編譯單元(compilation unit),編譯時(shí)一次僅對一個(gè)編譯單元進(jìn)行編譯。

·一個(gè)編譯單元中可以有很多Java類,但只能有一個(gè)類是public的。如果類不是public的,則該類只能在所處的包中起作用。

?

若在成員前未加任何關(guān)鍵字來修飾限定它,那么表明該成員是friendly的,意為與該成員所屬類位于同一個(gè)包(package)的其他類可以訪問它。

?

包:

包是Java的類庫管理機(jī)制,它借助文件系統(tǒng)的目錄來管理類庫,一個(gè)包就是一個(gè)目錄,一個(gè)包內(nèi)的所有的類必須放在一個(gè)目錄下,那個(gè)目錄的名字必須是包的名字。

?

每一個(gè)Java源文件的第一個(gè)語句一定是package ?<包名>;這句話表明了這個(gè)public類屬于哪個(gè)包,也就是與public類同名的Java源文件位于那個(gè)與包同名的文件夾下。在Eclipse中,如果一個(gè)文件中沒有package語句,則表明該類屬于一個(gè)沒有名字的默認(rèn)包(default package)。

?

如果在一個(gè)類中使用了另外的與其不在同一個(gè)包中的類,則有兩種方式:

1)在使用該類的時(shí)候?qū)懗鲱惖娜?#xff1a;<包名>.<類名>

2)使用import,寫法如下:

import <包名>.<類名>(即類的全名)

這樣寫的好處是:

清晰:在查找其他包的類時(shí)只需要看import處的那一列即可。

方便:在一個(gè)類中使用import的類只需要寫類名而不用寫類的全名。

同時(shí)import還可以寫成:

import <包名>.*(此處的*的含義是通配符)

這樣的寫法表示import該包里的全部類。一般來說不建議這種寫法,因?yàn)橛锌赡軙l(fā)生重名沖突。

注意,即使import過所需其他包的類,也無法訪問該類的friendly成員,因?yàn)閒riendly成員只能被同一個(gè)包的其他類訪問,不同包則不能。

?

包中包:

在建立新的包時(shí)如果起名為<已有包>.<包名>,則意味著這個(gè)新的包是一個(gè)包中包,在文件系統(tǒng)里體現(xiàn)為與該包同名的文件夾是已有包同名文件夾的子文件夾,在import類時(shí)則寫成:

import <包名>.<包名>.<類名>;

此時(shí)兩個(gè)包之間的.就等同于文件目錄路徑中的\

?

具體體現(xiàn)在文件系統(tǒng)中的層級依次為:

workspace

??? project

?????? src

?????????? package

????????????? *.java

?????? bin

?????????? package

????????????? *.class

例:

workspace

??? Project_1? //? 文件夾名與項(xiàng)目名一致,為Project_1

?????? src??? //? 文件夾名即src,按包分類存放.java文件(源文件)

?????????? clock? // 文件夾名與包名一致,為clock

????????????? Clock.java // 文件名與類名一致,為Clock

????????????? Display.java? //? 文件名與類名一致,為Display

????????????? time // 文件夾名為time,該包即是包中包,包名為clock.time

Time.java? //? 文件名與類名一致,為Time,該類全名為clock.time.Time

?????? bin??? //? 文件夾名即bin,按包分類存放.class文件(字節(jié)碼文件)

?????????? clock?

????????????? Clock.class??

????????????? Display.class

????????????? time??

????????????????? Time.class

??? Project_2

?????? src

?????????? a.java // 如果是默認(rèn)包,則文件直接保存在src目錄下

?????? bin

  • class
  • ?

    在以上的情況下,如果在Clock.java文件中想要使用Time類,則應(yīng)該在Clock類的前面寫import clock.time.Time; ? ?// 包的路徑是 ..\clock\time

    ?

    static,類變量與類函數(shù):

    ?

    類是描述,對象是實(shí)體。在類里所描述的成員變量,是位于這個(gè)類的每一個(gè)對象中的。

    而如果某個(gè)成員有static關(guān)鍵字做修飾,它就不再屬于每一個(gè)對象,而是屬于整個(gè)類的了。

    通過每個(gè)對象都可以訪問到這些類變量和類函數(shù),但是也可以通過類的名字來訪問它們。類函數(shù)由于不屬于任何對象,因此也沒有辦法建立與調(diào)用它們的對象的關(guān)系,就不能訪問任何非static的成員變量和成員函數(shù)了。

    ?

    static與public和private一樣,是用來修飾變量或函數(shù)的關(guān)鍵字。

    static意味著它所修飾的那個(gè)東西不屬于類中的任何對象,而屬于這個(gè)類。

    ?

    在類體中,如果定義一個(gè)變量/函數(shù),在前面加上關(guān)鍵字static,則表明這個(gè)變量/函數(shù)是類變量/函數(shù)而非成員變量/函數(shù):

    ·成員變量/函數(shù)位于每個(gè)對象之中而非這個(gè)對象的類之中,即同一個(gè)類的每個(gè)對象擁有屬于自己的成員變量/函數(shù),對象與對象之間的成員變量/函數(shù)相互獨(dú)立沒有聯(lián)系;

    ·而static變量/函數(shù)則是類變量/函數(shù),類變量/函數(shù)屬于整個(gè)類,而不屬于這個(gè)類的任何一個(gè)對象,但每個(gè)對象都可以訪問到它。

    有兩種方式可以訪問類變量/函數(shù):

    <對象名>.<類變量/函數(shù)名>或<類名>.<類變量/函數(shù)名>

    前者是通過對象來訪問類變量/函數(shù),因此只要屬于同一個(gè)類,任何對象都可以這樣寫。

    后者是通過類來訪問類變量/函數(shù),更建議使用這種寫法,以便與對象的成員變量/函數(shù)清晰地區(qū)分開來。

    ?

    關(guān)于static的規(guī)則:

    ·如果一個(gè)函數(shù)是static的,那么它只能訪問static變量/函數(shù)

    ·static的變量和函數(shù)既可以通過類名來訪問,也可以通過某個(gè)對象名訪問,但通過對象名訪問時(shí)并不能獲得該對象的具體信息。

    ·如果在定義static變量時(shí)定義初始化,那么這個(gè)初始化只會在加載這個(gè)類的時(shí)候(即創(chuàng)建類變量,為其分配內(nèi)存空間時(shí))做一次,而與對象的創(chuàng)建無關(guān)。

    ?

    3. 容器

    程序設(shè)計(jì)的思想之一:人機(jī)交互與業(yè)務(wù)邏輯分離開來。在做業(yè)務(wù)邏輯的時(shí)候,只專注于數(shù)據(jù)本身,而不要去考慮人機(jī)交互方面的東西。因此,對于一個(gè)數(shù)據(jù)的讀取,不要在對象的方法里用單純的System.out.println()將它輸出,而是要把數(shù)據(jù)返回,由上層調(diào)用這個(gè)對象的函數(shù)來決定,得到這個(gè)返回值之后該做什么操作。這樣一方面使得函數(shù)的用法更加靈活(而不單單只能用來輸出),另一方面更符合面向?qū)ο蟪绦蛟O(shè)計(jì)的思想。人機(jī)交互與業(yè)務(wù)邏輯的統(tǒng)一標(biāo)準(zhǔn)由接口的設(shè)計(jì)來實(shí)現(xiàn),做項(xiàng)目的時(shí)候,先定義接口,再實(shí)現(xiàn)具體功能。

    ?

    ?

    1)順序容器:ArrayList<Type>

    ·ArrayList<String> notes = new ArrayList<String>;

    意為創(chuàng)建一個(gè)array list of string類型的對象變量notes

    ·ArrayList是系統(tǒng)類庫中的一個(gè)泛型類,java.util.ArrayList

    ·大小可以隨意改變

    ·有很多現(xiàn)成的庫函數(shù)可以用,需要閱讀官方文檔來了解更多信息

    關(guān)于系統(tǒng)類庫的使用:

    ·是否充分理解系統(tǒng)類庫的類

    ·是否充分了解類庫中各種函數(shù)的功能和使用方法

    ?

    容器類:

    ·用來存放任意數(shù)量的對象

    ·有兩個(gè)類型:

    ·容器的類型

    ·元素的類型

    ?

    2)對象數(shù)組:

    ·對象數(shù)組中的每個(gè)元素都是對象的管理者而非對象本身

    ·對象數(shù)組的for-each情況與基礎(chǔ)數(shù)據(jù)類型的情況不同:

    class Value {private int i = 0;public void set( int i ) { this.i = i; }public int get() { return i; } }public class TestArrayList {public static void main(String[] args) {Value[] a = new Value[10];for ( int i = 0 ; i < a.length; i++ ) {a[i] = new Value();a[i].set(i);}for ( Value v : a ) {System.out.println(v.get());}for ( Value v : a) {v.set(0);}for ( Value v : a ) {System.out.println(v.get());}}}

    ?

    ?

    則第一次輸出是0~9十個(gè)數(shù),而第二次輸出是十個(gè)0。由此可見,對象數(shù)組的for-each可以對數(shù)組內(nèi)容進(jìn)行修改。

    ·對于容器類來說,for-each循環(huán)也可以用

    ?

    3)集合容器:Set

    ·集合的概念與數(shù)學(xué)中的集合完全一致:

    ·集合中的每個(gè)元素都是不重復(fù)的,即每個(gè)元素具有唯一的值

    ·集合中的元素沒有順序

    ·集合也是一種泛型類:HashSet<String> s = new HashSet<String>();

    ?

    HashSet和ArrayList的對象都可以用System.out.println()直接輸出,輸出結(jié)果為[]中顯示元素值,其中ArraryList的值是順序的,而Set中是無序的。

    ?

    toString():

    任何一個(gè)Java類,只要在其中實(shí)現(xiàn):

    public String toString()

    {

    ??? return <String類型字符串>;

    }

    就可以直接寫成System.out.println( <該類的對象名> );

    這種寫法將會使System.out直接調(diào)用該類中的toString(),并輸出toString()返回的相應(yīng)結(jié)果(String)。

    如果類中沒有toString(),System.out.println( <該類的對象名> );則會輸出對象變量的值,即對象實(shí)體的引用,類似輸出指針會輸出指針指向的地址,格式為<類的全名>@<十六進(jìn)制數(shù)>。

    ?

    4)散列表

    HashMap<Integer, String> a = new HashMap<Integer, String>();

    數(shù)據(jù)結(jié)構(gòu)中的散列表里所有的東西都是以一對值的形式存放的:Key鍵 Value值

    關(guān)于Integer:容器中的類型必須是對象而不能是基本類型的數(shù)據(jù),所以對于整型int,應(yīng)使用其包裹類型Integer。

    對于散列表,每個(gè)Key一定是唯一的,所以如果對于同一個(gè)鍵多次放入不同值,最后保存的是最后一次放入的值。

    HashMap的一些方法:

    a.put( <key>, <value> ); // key->value

    a.get( <key> );????? // return value

    a.containsKey( <key> );? // return true / false

    a.keySet();?? // HashMap a中所有key的HashSet

    a.keySet().size();?????? // HashSet()的size()方法

    ?

    對HashMap的for-each:

    for ( Integer k : a.keySet() ) {?????? // 枚舉所有key

    ??? String s = a.get(k);

    ??? System.out.println(s);????? //? 輸出key對應(yīng)的value

    }

    ?

    4.繼承

    繼承是面向?qū)ο笳Z言的重要特征之一,沒有繼承的語言只能被稱作“使用對象的語言”。繼承是非常簡單而強(qiáng)大的設(shè)計(jì)思想,它提供了我們代碼重用和程序組織的有力工具。基于已有的設(shè)計(jì)創(chuàng)造新的設(shè)計(jì),就是面向?qū)ο蟪绦蛟O(shè)計(jì)中的繼承。在繼承中,新的類不是憑空產(chǎn)生的,而是基于一個(gè)已經(jīng)存在的類而定義出來的。通過繼承,新的類自動獲得了基礎(chǔ)類中所有的成員,包括成員變量和方法,包括各種訪問屬性的成員,無論是public還是private。當(dāng)然,在這之后,程序員還可以加入自己的新的成員,包括變量和方法。顯然,通過繼承來定義新的類,遠(yuǎn)比從頭開始寫一個(gè)新的類要簡單快捷和方便。繼承是支持代碼重用的重要手段之一。

    ?

    對理解繼承來說,最重要的事情是,知道哪些東西被繼承了,或者說,子類從父類那里得到了什么。答案是:所有的東西,所有的父類的成員,包括變量和方法,都成為了子類的成員,除了構(gòu)造方法。構(gòu)造方法是父類所獨(dú)有的,因?yàn)樗鼈兊拿志褪穷惖拿?#xff0c;所以父類的構(gòu)造方法在子類中不存在。除此之外,子類繼承得到了父類所有的成員。

    但是得到不等于可以隨便使用。每個(gè)成員有不同的訪問屬性,子類繼承得到了父類所有的成員,但是不同的訪問屬性使得子類在使用這些成員時(shí)有所不同:有些父類的成員直接成為子類的對外的界面,有些則被深深地隱藏起來,即使子類自己也不能直接訪問。

    ?

    public的成員直接成為子類的public的成員,protected的成員也直接成為子類的protected的成員。Java的protected的意思是包內(nèi)和子類可訪問,所以它比缺省的訪問屬性要寬一些。而對于父類的缺省的未定義訪問屬性的成員來說,他們是在父類所在的包內(nèi)可見,如果子類不屬于父類的包,那么在子類里面,這些缺省屬性的成員和private的成員是一樣的:不可見。父類的private的成員在子類里仍然是存在的,只是子類中不能直接訪問。我們不可以在子類中重新定義繼承得到的成員的訪問屬性。如果我們試圖重新定義一個(gè)在父類中已經(jīng)存在的成員變量,那么我們是在定義一個(gè)與父類的成員變量完全無關(guān)的變量,在子類中我們可以訪問這個(gè)定義在子類中的變量,在父類的方法中訪問父類的那個(gè)。盡管它們同名但是互不影響。

    ?

    在構(gòu)造一個(gè)子類的對象時(shí),父類的構(gòu)造方法也是會被調(diào)用的,而且父類的構(gòu)造方法在子類的構(gòu)造方法之前被調(diào)用。在程序運(yùn)行過程中,子類對象的一部分空間存放的是父類對象。因?yàn)樽宇悘母割惖玫嚼^承,在子類對象初始化過程中可能會使用到父類的成員。所以父類的空間正是要先被初始化的,然后子類的空間才得到初始化。在這個(gè)過程中,如果父類的構(gòu)造方法需要參數(shù),如何傳遞參數(shù)就很重要了。

    ?

    子類比父類更加具體。例如鳥是父類,那么啄木鳥,貓頭鷹,麻雀,鴕鳥都是鳥的子類。

    子類通過繼承得到了父類的所有東西,包括private的成員,盡管可能無法直接訪問和使用,但繼承自父類的東西確實(shí)存在,父類中所有public和protected的成員,在子類中都可以直接拿來使用。

    ?

    關(guān)鍵字:extends

    class thisClass extends superclass {?? // 表明thisClass是superClass 的子類

    ???

    }

    用關(guān)鍵字super表示父類,以區(qū)分調(diào)用的同名函數(shù)是子類中的還是父類中的,就像this用來表示當(dāng)前對象,以區(qū)分同名變量是局部的還是成員的一樣。

    ?

    在創(chuàng)建一個(gè)子類的對象時(shí)的代碼執(zhí)行順序總是:

    1子類的構(gòu)造器中的super()(如果有super的話)

    2父類構(gòu)造器中的super()(如果有super的話)

    3父類成員變量定義初始化(如果有初始化的話)

    ????????????????? ↓

    4父類構(gòu)造器內(nèi)部

    5子類成員變量定義初始化(如果有初始化的話)

    6子類構(gòu)造器內(nèi)部

    ?

    也就是說,在構(gòu)造一個(gè)子類的對象時(shí),父類的構(gòu)造方法在子類的構(gòu)造方法之前被調(diào)用。

    構(gòu)造器是構(gòu)造對象時(shí)的入口,但并不是最優(yōu)先被執(zhí)行的,成員變量定義初始化最優(yōu)先,若無定義初始化則跳過。

    在子類中,無論是否存在super(),在構(gòu)造子類的對象時(shí)都會自動調(diào)用父類的構(gòu)造器:若無super,則默認(rèn)調(diào)用父類無參構(gòu)造器,此時(shí)若父類中存在有參構(gòu)造器,但沒有無參構(gòu)造器則會報(bào)錯;若有super(<參數(shù)表>),則會根據(jù)參數(shù)表重載相應(yīng)的父類構(gòu)造器。

    ?

    ?

    5.多態(tài)變量與造型

    ?

    對象變量是多態(tài)變量,可以保存其聲明類型的對象,或該類型的任何子類型的對象。

    ?

    子類和子類型

    ·類定義了類型

    ·子類定義了子類型

    ·子類的對象可以被當(dāng)作父類的對象來使用

    ·賦值給父類的變量

    ·傳遞給需要父類對象的函數(shù)

    ·放進(jìn)存放父類對象的容器

    ?

    子類的對象可以賦值給父類的對象變量。

    如Vehicle類是父類,其子類有Car,Bicycle等,那么Bicycle類和Car類的對象都可以賦值給Vehicle類的對象變量:

    Vehicle v = new Vehicle();

    Vehicle v = new Car();

    Vehicle v = new Bicycle();

    ?

    子類和參數(shù)傳遞:

    子類的對象可以傳遞給需要父類對象的函數(shù)。

    子類的對象可以放在存放父類對象的容器里。

    ?

    多態(tài)變量

    ·Java的對象變量是多態(tài)的,它們能保存不止一種類型的對象

    ·它們可以保存的是聲明類型的變量,或聲明類型的子類的對象

    ·當(dāng)把子類的對象賦值給父類的變量時(shí),就發(fā)生了向上造型

    ?

    靜態(tài)類型與動態(tài)類型

    ·一個(gè)對象變量的聲明類型就是其靜態(tài)類型

    ·一個(gè)對象變量當(dāng)前指向的對象的類型是動態(tài)類型

    因此Java中的對象變量總是有兩個(gè)類型,一個(gè)是聲明類型,一個(gè)是動態(tài)類型,只是有時(shí)這兩個(gè)類型可能是一致的。

    ?

    造型cast

    ·一個(gè)類型的對象賦值給另一個(gè)類型的對象變量的過程

    ·子類的對象可以賦值給父類的變量

    ·注意!Java中不存在對象對對象的賦值

    ·父類的對象不能賦值給子類的變量

    ·當(dāng)父類的變量當(dāng)前指向的是子類的對象時(shí),可以用造型來賦值,否則會出現(xiàn)異常:ClassCastException

    ?

    如,Vehicle是父類Car是子類:

    Vehicle v;

    Car c = new Car();

    v = c; //? 可以

    c = v; //? 編譯錯誤

    c = (Car)v;?? // 造型,此時(shí)v指向的是Car的對象,即v的動態(tài)類型是Car,可以用造型來賦值給Car類型的變量

    再如,Item是父類,CD是子類:

    Item item = new Item();

    CD cd = new CD();

    item = cd; // 可以

    CD cc = (CD)item; ??? //? 造型,如果沒有(CD)則報(bào)錯

    ?

    造型

    ·用括號圍起類型放在值的前面

    ·對象本身并沒有發(fā)生任何變化

    ·所以不是“類型轉(zhuǎn)換”:類型轉(zhuǎn)換是將原來的值變成轉(zhuǎn)換類型的值之后賦值,而造型是將當(dāng)前類型的值(對象)看作是造型類型的值來看待,并沒有修改替換成為另外類型的值

    ·運(yùn)行時(shí)有機(jī)制來檢查這樣的轉(zhuǎn)化是否合理

    ·ClassCastException

    ?

    向上造型:把子類的對象賦值給父類的變量,(<父類型>)可以省略

    ·拿一個(gè)子類的對象,當(dāng)作父類的對象來用

    ·向上造型是默認(rèn)的,不需要運(yùn)算符

    ·向上造型總是安全的

    ?

    向下造型:把子類的對象通過父類變量賦值給子類變量,即父類變量當(dāng)前指向子類對象,需要用到(<子類型>)

    ?

    6.多態(tài)

    ?

    如果子類的方法覆蓋了父類的方法,我們也說父類的那個(gè)方法在子類有了新的版本或者新的實(shí)現(xiàn)。覆蓋的新版本具有與老版本相同的方法簽名:相同的方法名稱和參數(shù)表。因此,對于外界來說,子類并沒有增加新的方法,仍然是在父類中定義過的那個(gè)方法。不同的是,這是一個(gè)新版本,所以通過子類的對象調(diào)用這個(gè)方法,執(zhí)行的是子類自己的方法。

    ?

    覆蓋關(guān)系并不說明父類中的方法已經(jīng)不存在了,而是當(dāng)通過一個(gè)子類的對象調(diào)用這個(gè)方法時(shí),子類中的方法取代了父類的方法,父類的這個(gè)方法被“覆蓋”起來而看不見了。而當(dāng)通過父類的對象調(diào)用這個(gè)方法時(shí),實(shí)際上執(zhí)行的仍然是父類中的這個(gè)方法。注意我們這里說的是對象而不是變量,因?yàn)橐粋€(gè)類型為父類的變量有可能實(shí)際指向的是一個(gè)子類的對象。

    ?

    當(dāng)調(diào)用一個(gè)方法時(shí),究竟應(yīng)該調(diào)用哪個(gè)方法,這件事情叫做綁定。綁定表明了調(diào)用一個(gè)方法的時(shí)候,我們使用的是哪個(gè)方法。綁定有兩種:一種是早綁定,又稱靜態(tài)綁定,這種綁定在編譯的時(shí)候就確定了;另一種是晚綁定,即動態(tài)綁定。動態(tài)綁定在運(yùn)行的時(shí)候根據(jù)變量當(dāng)時(shí)實(shí)際所指的對象的類型動態(tài)決定調(diào)用的方法。Java缺省使用動態(tài)綁定。

    ?

    函數(shù)調(diào)用的綁定

    ·當(dāng)通過對象變量調(diào)用函數(shù)的時(shí)候,調(diào)用哪個(gè)函數(shù)這件事情可以叫做綁定

    ·靜態(tài)綁定:根據(jù)變量的聲明類型來決定

    ·動態(tài)綁定:根據(jù)變量的動態(tài)類型來決定

    ·在成員函數(shù)中調(diào)用其它成員函數(shù)也是通過this這個(gè)對象變量來調(diào)用的

    ?

    覆蓋/重寫override

    ·子類和父類中存在名稱和參數(shù)表完全相同的函數(shù),這一對函數(shù)構(gòu)成覆蓋關(guān)系

    ·通過父類的變量調(diào)用存在覆蓋關(guān)系的函數(shù)時(shí),會調(diào)用變量當(dāng)時(shí)所管理的對象所屬類的函數(shù)

    ?

    所謂的多態(tài)就是,通過一個(gè)對象變量調(diào)用一個(gè)函數(shù)時(shí),并不去判斷對象變量的動態(tài)類型可能是什么,當(dāng)程序執(zhí)行的時(shí)候,讓其自動通過當(dāng)前動態(tài)類型來執(zhí)行相應(yīng)的函數(shù)。

    ?

    在函數(shù)重寫時(shí),函數(shù)的前一句話應(yīng)該是@Override,子類中的重寫函數(shù)的聲明部分(即函數(shù)頭)應(yīng)與父類的完全一致,包括限定詞,返回值類型,函數(shù)名,參數(shù)表

    ?

    如:

    @Override

    public String toString()

    {

    ??? return <String>;

    }

    ?

    @Override的作用是,告訴編譯器接下來的函數(shù)是對父類同名函數(shù)的重寫(即覆蓋),如果接下來的函數(shù)與父類同名函數(shù)有任何不一致的地方,則會報(bào)錯;如果沒有@Override,則不會對接下來的函數(shù)做任何限制,同樣地也就不再必須是對父類函數(shù)的重寫。

    ?

    Java類型系統(tǒng)的根:Object類

    Java是一種單根結(jié)構(gòu)的語言,Java中的所有類默認(rèn)看作是Object類的子類,即,所有的類都是繼承自O(shè)bject的。

    ?

    Object類的函數(shù)

    ·toString()

    ·equals()

    ·可通過eclipse補(bǔ)全功能查看其他函數(shù)

    ?

    可擴(kuò)展性:代碼不需要經(jīng)過修改就可以適應(yīng)新的內(nèi)容或數(shù)據(jù)

    可維護(hù)性:代碼經(jīng)過修改可以適應(yīng)新的內(nèi)容或數(shù)據(jù)

    ?

    7.設(shè)計(jì)原則

    ?

    ?

    1)消除代碼復(fù)制:

    程序中存在相似甚至相同的代碼塊,是非常低級的代碼質(zhì)量問題。

    ?

    代碼復(fù)制存在的問題是,如果需要修改一個(gè)副本,那么就必須同時(shí)修改所有其他的副本,否則就存在不一致的問題。這增加了維護(hù)程序員的工作量,而且存在造成錯誤的潛在危險(xiǎn)。很可能發(fā)生的一種情況是,維護(hù)程序員看到一個(gè)副本被修改好了,就以為所有要修改的地方都已經(jīng)改好了。因?yàn)闆]有任何明顯跡象可以表明另外還有一份一樣的副本代碼存在,所以很可能會遺漏還沒被修改的地方。

    ?

    消除代碼復(fù)制的兩個(gè)基本手段,就是函數(shù)和父類。

    ?

    2)用封裝來降低耦合

    ·類和類之間的關(guān)系稱作耦合

    ·耦合越低越好,保持距離是形成良好代碼的關(guān)鍵

    ?

    要評判某些設(shè)計(jì)比其他的設(shè)計(jì)優(yōu)秀,就得定義一些在類的設(shè)計(jì)中重要的術(shù)語,以用來討論設(shè)計(jì)的優(yōu)劣。對于類的設(shè)計(jì)來說,有兩個(gè)核心術(shù)語:耦合和聚合。耦合這個(gè)詞指的是類和類之間的聯(lián)系。之前的章節(jié)中提到過,程序設(shè)計(jì)的目標(biāo)是一系列通過定義明確的接口通信來協(xié)同工作的類。耦合度反映了這些類聯(lián)系的緊密度。我們努力要獲得低的耦合度,或者叫作松耦合(loose coupling)。

    ?

    耦合度決定修改應(yīng)用程序的容易程度。在一個(gè)緊耦合的結(jié)構(gòu)中,對一個(gè)類的修改也會導(dǎo)致對其他一些類的修改。這是要努力避免的,否則,一點(diǎn)小小的改變就可能使整個(gè)應(yīng)用程序發(fā)生改變。另外,要想找到所有需要修改的地方,并一一加以修改,卻是一件既困難又費(fèi)時(shí)的事情。另一方面,在一個(gè)松耦合的系統(tǒng)中,常常可以修改一個(gè)類,但同時(shí)不會修改其他類,而且整個(gè)程序還可以正常運(yùn)作。

    ?

    聚合與程序中一個(gè)單獨(dú)的單元所承擔(dān)的任務(wù)的數(shù)量和種類相對應(yīng)有關(guān),它是針對類或方法這樣大小的程序單元而言的理想情況下,一個(gè)代碼單元應(yīng)該負(fù)責(zé)一個(gè)聚合的任務(wù)(也就是說,一個(gè)任務(wù)可以被看作是一個(gè)邏輯單元)。一個(gè)方法應(yīng)該實(shí)現(xiàn)一個(gè)邏輯操作,而一個(gè)類應(yīng)該代表一定類型的實(shí)體。聚合理論背后的要點(diǎn)是重用:如果一個(gè)方法或類是只負(fù)責(zé)一件定義明確的事情,那么就很有可能在另外不同的上下文環(huán)境中使用。遵循這個(gè)理論的一個(gè)額外的好處是,當(dāng)程序某部分的代碼需要改變時(shí),在某個(gè)代碼單元中很可能會找到所有需要改變的相關(guān)代碼段。

    ?

    3)增加可擴(kuò)展性:

    ·可以運(yùn)行的代碼 != 良好的代碼

    ·對代碼做維護(hù)的時(shí)候最能看出代碼的質(zhì)量

    ·可擴(kuò)展性的意思就是代碼的某些部分不需要經(jīng)過修改就能適應(yīng)將來可能的變化

    ?

    ·用接口來實(shí)現(xiàn)聚合

    ·在類的內(nèi)部實(shí)現(xiàn)新的方法,把具體細(xì)節(jié)徹底隱藏在類的內(nèi)部

    ·今后某一功能如何實(shí)現(xiàn)就和外部無關(guān)了

    ?

    ·用容器來實(shí)現(xiàn)靈活性

    ·減少“硬編碼”

    ·對于隨時(shí)變化數(shù)量的同類事物,用容器來實(shí)現(xiàn),比如HashMap

    ?

    ·框架+數(shù)據(jù)提高可擴(kuò)展性

    ·從程序中識別出框架和數(shù)據(jù),以代碼實(shí)現(xiàn)框架,將部分功能以數(shù)據(jù)的方式加載,這樣能在很大程度上實(shí)現(xiàn)可擴(kuò)展性。

    ?

    8.抽象

    ?

    我們用abstract關(guān)鍵字來定義抽象類。抽象類的作用僅僅是表達(dá)接口,而不是具體的實(shí)現(xiàn)細(xì)節(jié)。抽象類中可以存在抽象方法。抽象方法也是使用abstract關(guān)鍵字來修飾。抽象的方法是不完全的,它只是一個(gè)方法簽名而完全沒有方法體。

    ?

    如果一個(gè)類有了一個(gè)抽象的方法,這個(gè)類就必須聲明為抽象類。如果父類是抽象類,那么子類必須覆蓋所有在父類中的抽象方法,否則子類也成為一個(gè)抽象類。一個(gè)抽象類可以沒有任何抽象方法,所有的方法都有方法體,但是整個(gè)類是抽象的。設(shè)計(jì)這樣的抽象類主要是為了防止制造它的對象出來。

    ?

    抽象abstract

    ·抽象函數(shù):表達(dá)概念而無法實(shí)現(xiàn)具體代碼的函數(shù)

    ·帶有abstract修飾的函數(shù)

    ·public abstract void method();?? // 必須結(jié)尾帶分號,而不能是空的大括號{},就像C中的函數(shù)聲明

    ·抽象類:表達(dá)概念而無法構(gòu)造出實(shí)體的類

    ·有抽象函數(shù)的類一定是抽象類

    ·抽象類不能制造對象

    ·但是可以定義變量:任何繼承了該抽象類的非抽象子類的對象可以賦給這個(gè)抽象類的變量,即由抽象類變量管理其非抽象子類的對象。

    ?

    實(shí)現(xiàn)抽象函數(shù)

    ·繼承自抽象類的子類必須覆蓋所有父類中的抽象函數(shù),這里的對父類的抽象函數(shù)的覆蓋稱作實(shí)現(xiàn)implement

    ·否則子類也是抽象類。因?yàn)橛欣^承自父類的抽象函數(shù)未重寫,只要一個(gè)類中有抽象函數(shù),這個(gè)類就必須是抽象類。

    ?

    寫法:

    public abstract class Shape {

    ??? public abstract void draw(Graphics g); // 只有函數(shù)頭加;沒有函數(shù)體

    }

    ?

    public class Line extends Shape { // Line是繼承自抽象類Shape的非抽象子類

    ??? … …

    ??? @Override

    ??? public void draw(Graphics g)??? //對抽象類Shape的抽象方法draw的具體實(shí)現(xiàn)

    {

    ??? … …

    }

    }

    ?

    兩種抽象

    ·與具體相對:表示一種概念而非實(shí)體

    ·與細(xì)節(jié)相對:表示在一定程度上忽略細(xì)節(jié)而著眼大局

    ?

    數(shù)據(jù)與表現(xiàn)分離

    ·程序的業(yè)務(wù)邏輯與表現(xiàn)無關(guān)

    ·表現(xiàn)可以是圖形的也可以是文本的

    ·表現(xiàn)可以是當(dāng)?shù)氐囊部梢允沁h(yuǎn)程的

    ·負(fù)責(zé)表現(xiàn)的類只管根據(jù)數(shù)據(jù)來表現(xiàn)

    ·負(fù)責(zé)數(shù)據(jù)的類只管數(shù)據(jù)的存放

    ·一旦數(shù)據(jù)更新以后,表現(xiàn)仍然可以不變

    ·不用去精心設(shè)計(jì)哪個(gè)局部需要更新

    ·簡化了程序邏輯

    ·這是在計(jì)算機(jī)運(yùn)算速度提高的基礎(chǔ)上實(shí)現(xiàn)的

    責(zé)任驅(qū)動的設(shè)計(jì)

    ·將程序要實(shí)現(xiàn)的功能分?jǐn)偟竭m合的類/對象中去是設(shè)計(jì)中非常重要的一環(huán)

    ?

    網(wǎng)格化

    ·圖形界面本身有更高的解析度

    ·但是將畫面網(wǎng)格化以后,數(shù)據(jù)就更容易處理了

    ?

    9.接口

    ?

    接口interface

    ·類表達(dá)的是對某類東西的描述,而接口表達(dá)的是抽象的概念和規(guī)范

    ·接口是純抽象類

    ??? ·所有的成員函數(shù)都是抽象函數(shù)

    ·所有的成員變量都是public static final

    ·因此不需特意聲明abstract

    ·接口規(guī)定了長什么樣,但不管里面有什么東西

    ·在Java中,接口就是一種特殊的class

    ·它與class地位相同

    ·接口類型的變量可以被賦值任何實(shí)現(xiàn)了這個(gè)接口的類的對象

    ?

    寫法:

    public interface Cell {

    int size;? // public static final

    ??? void draw( … );?? // abstract

    }

    ?

    實(shí)現(xiàn)接口

    ·類用extends表達(dá)子類繼承父類,用implements表達(dá)一個(gè)類實(shí)現(xiàn)了一個(gè)接口

    ·一個(gè)類可以實(shí)現(xiàn)很多接口

    ·接口可以繼承接口,但不能繼承類

    ·接口不能實(shí)現(xiàn)接口

    ?

    寫法:

    public class Fox extends Animal implements Cell {

    ??? … …

    ??? @Override

    ??? public void draw()

    {

    ?????? … …

    }

    }

    ?

    面向接口的編程方式

    ·設(shè)計(jì)程序時(shí)先定義接口,再實(shí)現(xiàn)類

    ·任何需要在函數(shù)間傳入傳出的一定是接口而不是具體的類

    ·是Java的成功關(guān)鍵之一,因?yàn)闃O適合多人同時(shí)寫一個(gè)大程序

    ·也是Java被批評的要點(diǎn)之一,因?yàn)榇a量會迅速膨脹,整體顯得臃腫

    ?

    10.控制反轉(zhuǎn)與MVC設(shè)計(jì)模式

    ?

    內(nèi)部類就是指一個(gè)類定義在另一個(gè)類的內(nèi)部,從而成為外部類的一個(gè)成員。因此一個(gè)類中可以有成員變量、方法,還可以有內(nèi)部類。實(shí)際上Java的內(nèi)部類可以被稱為成員類,內(nèi)部類實(shí)際上是它所在類的成員。所以內(nèi)部類也就具有和成員變量、成員方法相同的性質(zhì)。比如,成員方法可以訪問私有變量,那么成員類也可以訪問私有變量了。也就是說,成員類中的成員方法都可以訪問成員類所在類的私有變量。內(nèi)部類最重要的特點(diǎn)就是能夠訪問外部類的所有成員。

    ?

    內(nèi)部類

    ·定義在別的類的內(nèi)部或函數(shù)內(nèi)部的類

    ·內(nèi)部類能直接訪問外部的全部資源

    ·包括任何私有成員,因?yàn)閮?nèi)部類也是類的成員之一

    ·外部是函數(shù)時(shí),只能訪問那個(gè)函數(shù)里的final的變量

    ?

    匿名類

    ·在new對象的時(shí)候給出的類的定義形成了匿名類

    ·匿名類一定是內(nèi)部類,可以繼承某類,也可以實(shí)現(xiàn)某接口

    ·Swing的消息機(jī)制廣泛使用匿名類

    ?

    寫法:

    new 類名/接口名() {

    ??? … …

    }

    如:

    JButton butStep = new JButton(“OneStep”);

    butStep.addActionListener(new ActionListener() {

    // addActionListener()是JButton類的方法,ActionListener是JButton的接口

    ??? @Override

    ??? public void actionPerformed()

    ??? {

    ?????? ……

    }

    });??? // 定義匿名類,實(shí)現(xiàn)ActionListener接口

    ?

    注入反轉(zhuǎn)·控制反轉(zhuǎn)

    ·由按鈕(別人寫的類)公布一個(gè)守聽者接口和一對注冊/注銷方法

    ·根據(jù)需要編寫代碼實(shí)現(xiàn)那個(gè)接口,將守聽者對象注冊在按鈕上

    ·一旦按鈕被按下,就會反過來調(diào)用你的守聽者對象的某個(gè)方法

    ?

    MVC

    ·數(shù)據(jù)、表現(xiàn)和控制三者分離,各負(fù)其責(zé)

    ·M = Model(模型)

    ·V = View(表現(xiàn))

    ·C = Control(控制)

    ·模型:保存和維護(hù)數(shù)據(jù),提供接口讓外部修改數(shù)據(jù),通知表現(xiàn)需要刷新

    ·表現(xiàn):從模型獲得數(shù)據(jù),根據(jù)數(shù)據(jù)畫出表現(xiàn)

    ·控制:從用戶得到輸入,根據(jù)輸入調(diào)整數(shù)據(jù)

    ·在MVC中,很重要的一件事是,Control和View之間沒有任何聯(lián)系。用戶在界面上所做的操作(控制)不直接修改界面上的顯示(表現(xiàn)),即,用來接收用戶操作/輸入的代碼并不直接修改在屏幕上顯示的內(nèi)容,而是用戶的輸入來調(diào)整內(nèi)部的數(shù)據(jù),再由內(nèi)部數(shù)據(jù)去觸發(fā)表現(xiàn)刷新。

    ·這樣做的好處是,每一部分都很單純,不需要去考慮其他細(xì)節(jié)的東西。

    ?

    11.異常

    ?

    捕捉異常

    Try {

    ??? //? 可能產(chǎn)生異常的代碼

    } catch(Type1 id1) {

    ??? //? 處理Type1異常的代碼

    } catch(Type2 id2) {

    ??? //? 處理Type2異常的代碼

    } catch(Type3 id3) {

    ??? //? 處理Type3異常的代碼

    }

    ?

    ·得到異常對象之后

    ??? ·String getMessage();

    ??? ·String toString();

    ??? ·void printStackTrace();

    ·并不能回到發(fā)生異常的地方,具體的處理邏輯取決于業(yè)務(wù)邏輯需要

    ?

    再度拋出

    catch(Exception e) {

    ??? System.err.println(“An exception was thrown”);

    ??? throw e;

    }

    ·如果在這個(gè)層面上需要處理,但并不能做最終的決定,就catch之后再throw

    ?

    讀取文件使用異常機(jī)制的例子(偽碼描述):

    try {

    ??? open the file;

    ??? determine its size;

    ??? allocate that much memory;

    ??? read the file into memory;

    ??? close the file;

    } catch ( fileOpenFailed ) {

    ??? doSomething;

    } catch ( sizeDeterminationFailed ) {

    ??? doSomething;

    } catch ( memoryAllocationFailed ) {

    ??? doSomething;

    } catch ( readFailed ) {

    ??? doSomething;

    } catch ( fileClosedFailed ) {

    ??? doSomething;

    }

    ?

    異常

    ·有不尋常的事情發(fā)生了

    ·當(dāng)這個(gè)事情發(fā)生的時(shí)候,原本打算要接著做的事情不能再繼續(xù)了,必須得要停下來,讓其他地方的某段代碼來處理

    ·異常機(jī)制最大的好處是清晰地分開了正常業(yè)務(wù)邏輯代碼和遇到情況時(shí)的處理代碼

    ?

    異常聲明

    ·如果函數(shù)可能拋出異常,就必須在函數(shù)頭部加以聲明

    ??? void f() throws TooBig, TooSmall, DivZero { … }

    ·可以聲明并不會真的拋出的異常,以使函數(shù)更加靈活,增加可擴(kuò)展性,方便以后的補(bǔ)充修改

    ?

    可以拋出的

    ·任何繼承了Throwable類的對象

    ·Exception類繼承了Throwable

    ??? ·throw new Exception();

    ??? ·throw new Exception(“HELP”);

    ?

    catch匹配異常

    ·Is-A的關(guān)系

    ·拋出的子類異常會被捕捉父類異常的catch捕捉到

    ?

    捕捉任何異常

    catch(Exception e) {

    ??? System.err.println(“Caught an exception”);

    }

    ?

    運(yùn)行時(shí)刻異常

    ·像ArrayIndexOutOfBoundsException這樣的異常是不需要聲明的

    ·但是如果沒有適當(dāng)?shù)臋C(jī)制來捕捉,就會最終導(dǎo)致程序終止

    ?

    異常聲明遇到繼承關(guān)系

    ·當(dāng)覆蓋一個(gè)函數(shù)的時(shí)候,子類不能聲明拋出比父類版本更多的異常

    ·在子類的構(gòu)造函數(shù)中,必須聲明父類可能拋出的全部異常,之后還可以增加子類自己的異常聲明

    ?

    12.流

    ?

    流的基礎(chǔ)類

    ·InputStream

    ·OutputStream

    ·都是對字節(jié)進(jìn)行操作:字節(jié)流

    ?

    InputStream

    ·read()

    ??? ·int read()

    ??? ·read(byte b[])

    ??? ·read(byte[], int off, int len)

    ??? ·skip(long n)

    ·int available()

    ·mark()

    ·reset()

    ·boolean markSupported()

    ·close()

    ?

    ?

    OutputStream

    ·write()

    ·write(int b)

    ·write(byte b[])

    ·write(byte b[], int off, int len)

    ·flush()

    ·close()

    ?

    文件流

    ·FileInputStream

    ·FileOutputStream

    ·對文件作讀寫操作,也是字節(jié)

    ·實(shí)際工程中已經(jīng)較少使用

    ·更常用的是以在內(nèi)存數(shù)據(jù)或通信數(shù)據(jù)上建立的流,如數(shù)據(jù)庫的二進(jìn)制數(shù)據(jù)讀寫或網(wǎng)絡(luò)端口通信

    ·具體的文件讀寫往往有更專業(yè)的類,比如配置文件和日志文件

    ?

    流過濾器

    ·以一個(gè)介質(zhì)流對象為基礎(chǔ)層層構(gòu)建過濾器流,最終形成的流對象能在數(shù)據(jù)的輸入輸出過程中,逐層使用過濾器流的方法來讀寫數(shù)據(jù)

    ?

    Data

    ·DataInputStream

    ·DataOutputStream

    ·用以讀寫二進(jìn)制方式表達(dá)的基本數(shù)據(jù)類型的數(shù)據(jù)

    ?

    文本流

    ?

    Reader/Writer

    ·二進(jìn)制數(shù)據(jù)采用InputStream/OutputStream

    ·文本數(shù)據(jù)采用Reader/Writer

    ?

    在流上建立文本處理

    PrintWriter pw == new PrintWriter(

    new BufferedWriter(

    new OutputStreamWriter(

    new FileOutputStream(“abc.txt”))));

    ?

    Reader

    ·常用的是BufferedReader

    ·readLine()

    ?

    LineNumberReader

    ·可以得到行號

    ·getLineNumber()

    ?

    FileReader

    ·InputStreamReader類的子類,所有方法都從父類中繼承而來

    ·FileReader(File file)

    ·在給定從中讀取數(shù)據(jù)的File的情況下創(chuàng)建一個(gè)新FileReader

    ·FileReader(String fileName)

    ??? ·在給定從中讀取數(shù)據(jù)的文件名的情況下創(chuàng)建一個(gè)新FileReader

    ·FileReader不能指定編碼轉(zhuǎn)換方式

    ?

    漢字編碼

    ·InputStreamReader(InputStream in)

    ??? 創(chuàng)建一個(gè)使用默認(rèn)字符集的InputStreamReader

    ·InputStreamReader(InputStream in, Charset cs)

    ??? 創(chuàng)建使用給定字符集的InputStreamReader

    ·InputStreamReader(InputStream in, CharsetDecoder dec)

    ??? 創(chuàng)建使用給定字符集解碼器的InputStreamReader

    ·InputStreamReader(InputStream in, String charsetName)

    ??? 創(chuàng)建使用指定字符集的InputStreamReader

    ?

    格式化輸入輸出

    ·PrintWriter

    ??? ·format();

    ??? ·printf();用法與C一致

    ??? ·print();

    ??? ·println();

    ·Scanner

    ·在InputStream或Reader上建立一個(gè)Scanner對象可以從流中的文本中解析出以文本表達(dá)的各種基本類型

    ·next…();

    ?

    Stream/Reader/Scanner

    數(shù)據(jù)是二進(jìn)制的

    是->用InputStream

    否->表達(dá)的是文本

    ??? 是->用Reader

    ??? 否->用Scanner

    ?

    ?

    阻塞/非阻塞

    ·read()函數(shù)是阻塞的,在讀到所需的內(nèi)容之前會停下來等

    ??? ·使用read()的更“高級”的函數(shù),如newInt()、readLine()都是這樣的

    ??? ·所以常用單獨(dú)的線程來做socket讀的等待,或使用nio的channel選擇機(jī)制

    ·對于socket,可以設(shè)置SO時(shí)間

    ??? ·setSoTimeout(int timeOut)

    ?

    ?對象串行化

    ·ObjectInputStream類

    ??? ·readObject()

    ·ObjectOutputStream類

    ??? ·writeObjeact()

    ·Serializable接口

    ?

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

    總結(jié)

    以上是生活随笔為你收集整理的【编程语言】Java基础进阶——面向对象部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    看av免费| 日韩福利在线观看 | 午夜精品久久久久久久99无限制 | 天天爽综合网 | 日日操天天操夜夜操 | 在线只有精品 | 精品亚洲成人 | 日本激情动作片免费看 | 午夜国产福利在线观看 | 欧美了一区在线观看 | 亚洲精品在线播放视频 | 成人午夜片av在线看 | 成人午夜性影院 | 国产中出在线观看 | 99这里只有精品视频 | 亚洲视频在线视频 | 日韩免费二区 | 亚洲精品视频免费在线观看 | 国产成人三级三级三级97 | 国产一区二区手机在线观看 | 一区二区三区四区五区在线 | 贫乳av女优大全 | 婷婷久久久久 | www夜夜 | 国产亚洲字幕 | 超碰av在线播放 | 久久激情视频免费观看 | 天堂av中文字幕 | 国产精品久久网 | va视频在线观看 | 一区二区三区四区五区六区 | 美女视频黄色免费 | 在线视频 影院 | 亚洲精品一区中文字幕乱码 | 亚洲精品免费观看视频 | 91日韩在线视频 | 欧美资源在线观看 | 超碰在97 | 狠狠干天天射 | 婷婷网址| 中文字幕观看av | 久久久香蕉视频 | 97精品视频在线播放 | 少妇搡bbbb搡bbb搡69 | 高清精品久久 | 久久国产经典 | 一区二区三区日韩在线观看 | 日本中文不卡 | 夜夜操天天干 | 夜夜躁狠狠躁日日躁视频黑人 | 91精品啪在线观看国产81旧版 | 亚州av网站 | 欧美性黑人 | 国产精品网站一区二区三区 | 视频91 | 国产我不卡 | 精品亚洲免费视频 | 中文字幕在线免费观看 | 黄色三级在线观看 | 久久综合影视 | 五月婷婷免费 | 国产精品理论视频 | 丁香花在线视频观看免费 | 精品国产一区二区三区久久久久久 | 人人要人人澡人人爽人人dvd | 日韩国产精品久久久久久亚洲 | 狠狠操影视 | 亚洲成av人片在线观看无 | 亚洲第一中文网 | av再线观看 | 亚洲 综合 激情 | bbb搡bbb爽爽爽| av在线免费播放网站 | 国产精品嫩草55av | 国产精品久久久久9999吃药 | 成人99免费视频 | 国产一区二区在线免费播放 | 中文字幕在线网 | 69欧美视频 | 开心激情网五月天 | av免费在线播放 | 粉嫩av一区二区三区四区在线观看 | 国产福利精品视频 | 久久久精品日本 | 精品久久久99 | 成人av电影在线 | 成人影音在线 | 欧美精品九九99久久 | 在线免费视频 你懂得 | 日韩精品一区二区三区第95 | 亚洲第一区在线播放 | 欧美一区二区在线刺激视频 | 国产精品网红直播 | 国产高清在线免费视频 | 9999免费视频 | 色成人亚洲 | 国产亚洲成人网 | www.com久久 | 91视视频在线直接观看在线看网页在线看 | 国语对白少妇爽91 | 色97在线| 五月婷婷中文字幕 | 996久久国产精品线观看 | 69中文字幕| 国产精品久久久久久久久久妇女 | 欧美视频网址 | 日韩精品一区电影 | 99国产精品一区二区 | 欧美午夜精品久久久久 | 国产黑丝袜在线 | 一区二区三区在线免费播放 | 91黄色成人| 国产伦精品一区二区三区四区视频 | 国产精品岛国久久久久久久久红粉 | 国产精品剧情 | 4438全国亚洲精品在线观看视频 | 四虎4hu永久免费 | 99热网站 | 午夜国产在线观看 | 日批视频在线 | 五月丁香| 激情 亚洲 | 国产精品久久久久久久久费观看 | www.97视频 | 五月婷久| 一本一本久久a久久精品综合 | 黄色av成人在线观看 | 国产精品麻豆视频 | 免费一级片观看 | 国产不卡av在线播放 | 九九久久久久99精品 | 免费中文字幕在线观看 | 日韩在线不卡av | 日韩在线视频不卡 | 国产精品国产毛片 | 午夜精品一区二区三区在线视频 | 亚洲伊人成综合网 | 欧美色婷 | 亚洲一区二区三区毛片 | 六月色婷 | 久久久精品网 | 婷婷中文字幕 | 天天操夜夜做 | 一区二区精品在线观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 在线精品亚洲一区二区 | 国产很黄很色的视频 | 国产在线观 | 日韩不卡高清 | 一区二区三区在线免费观看视频 | 天天操天天操天天操天天操 | 成人免费视频在线观看 | 色综合久久久网 | 日韩有码专区 | 亚洲美女精品区人人人人 | 在线免费观看涩涩 | 亚洲精品99久久久久久 | 99在线高清视频在线播放 | 激情视频在线观看网址 | 色综合天天狠狠 | 人人射网站 | 人人干人人模 | 国产精品久久久久影视 | 国产操在线 | 91久久国产综合精品女同国语 | 久久狠狠干 | 国产一级视频在线观看 | 伊人国产在线观看 | 一区二区三区在线免费观看视频 | 一区二区三区在线看 | 8x成人免费视频 | 91手机视频在线 | 婷婷九九| 中文字幕亚洲在线观看 | 欧美色图视频一区 | 亚洲日本一区二区在线 | 国产精品久久久久久久久免费看 | 天天干夜夜夜操天 | 亚洲国产精品久久 | 黄色一及电影 | 狠狠色丁香婷婷综合久久片 | 国产精品一区二 | 婷婷综合视频 | 欧美日韩精品区 | 国产中文字幕视频 | 精品国产aⅴ一区二区三区 在线直播av | 欧美成人在线免费 | 亚洲97在线 | 精品一区二区精品 | 精品福利视频在线 | 日韩免费电影网站 | 午夜精品一区二区三区在线视频 | 免费不卡中文字幕视频 | 国产精品一区二区你懂的 | 精品在线99 | 久久精品国产美女 | 天天综合狠狠精品 | 天天操天天射天天插 | 免费日韩av电影 | 米奇狠狠狠888| 在线免费观看视频你懂的 | 日日综合网 | 狠狠操天天干 | 国产精品久免费的黄网站 | 伊人婷婷网 | 蜜臀av性久久久久av蜜臀三区 | 午夜在线观看影院 | 欧美一级艳片视频免费观看 | 久久久久国产成人免费精品免费 | 日日干天天射 | 日韩精品中文字幕在线观看 | 超碰在线官网 | 久久一级电影 | 97超碰人人模人人人爽人人爱 | 国产亚洲激情视频在线 | 国内外成人免费在线视频 | 久草在在线 | 2018亚洲男人天堂 | 中文字幕亚洲综合久久五月天色无吗'' | 成人中文字幕+乱码+中文字幕 | 精品国自产在线观看 | 97超碰在线免费观看 | 国产伦精品一区二区三区… | 91av大全 | 国内视频一区二区 | 日韩欧美一区二区在线观看 | av电影免费| 免费在线看成人av | www.日本色 | 黄色av一区 | 99视频+国产日韩欧美 | 久久精品黄色 | 国产1区在线 | 国产系列精品av | 搡bbbb搡bbb视频| 久久精品视频播放 | 在线涩涩 | 在线国产精品一区 | 天天综合中文 | 亚洲欧美精品一区 | 亚洲国产网站 | 麻豆免费视频网站 | 免费看黄在线网站 | 中文字幕一区二区三区精华液 | 女人18毛片a级毛片一区二区 | 国产999久久久 | 亚洲成人黄色 | 午夜日b视频| 不卡的av在线播放 | 欧美精品日韩 | 九九久久电影 | 97成人精品视频在线观看 | 久久成人麻豆午夜电影 | 日韩欧美高清在线 | 久久久精华网 | 日韩欧美网址 | 精品视频一区在线 | 激情综合网五月激情 | 久久国产精品系列 | 国产一级视频在线 | 欧美成人视 | 开心激情五月婷婷 | 国产三级精品三级在线观看 | 国产精品ⅴa有声小说 | 日日干夜夜操视频 | 精品国产免费观看 | 国产毛片aaa | 又黄又刺激 | 国产精品婷婷 | 国产黑丝一区二区 | 国产在线看 | 国产精品一区二区三区在线 | 91人人澡 | 亚洲精品免费在线观看视频 | 欧美成人手机版 | 久久久免费精品国产一区二区 | 天天爱综合 | 天天曰天天爽 | 亚洲日本精品视频 | 日日草天天草 | 国产精品一区二区三区在线 | 国产精品成人免费 | 天天爽天天碰狠狠添 | 国产精品久久久久久麻豆一区 | 欧美另类xxx | 五月婷婷影院 | 国产一级在线视频 | 免费日韩精品 | 国产高清在线观看 | 黄色软件网站在线观看 | 日日操网站 | 中文字幕在线资源 | 免费亚洲黄色 | 久久久免费观看视频 | 午夜视频在线观看一区二区 | 在线观看免费av网 | 色天天天 | 精品视频免费久久久看 | 韩国av在线播放 | 亚洲免费在线观看视频 | 精品一区二区在线观看 | 一区二区三区免费在线 | 国产在线黄色 | 日韩一级精品 | 国产精品国产自产拍高清av | 五月婷婷在线观看 | 国产一级片直播 | 九九免费在线观看视频 | 色婷婷激婷婷情综天天 | 福利一区在线视频 | 色婷婷www | 81精品国产乱码久久久久久 | av一本久道久久波多野结衣 | 天天操狠狠操夜夜操 | 超碰最新网址 | 亚洲午夜久久久久久久久 | 久久一视频 | av中文字幕免费在线观看 | 亚州精品在线视频 | 国产精品伦一区二区三区视频 | 国产人免费人成免费视频 | 国产免费xvideos视频入口 | 涩涩色亚洲一区 | 久久天堂影院 | 成人午夜黄色影院 | 精品亚洲va在线va天堂资源站 | 亚洲精品视频在线 | 日韩字幕在线观看 | 91豆花在线观看 | 久久精品99国产国产 | 国产在线播放一区二区三区 | 久久久999精品视频 国产美女免费观看 | 最近2019好看的中文字幕免费 | 久久久久久国产一区二区三区 | 亚洲欧美偷拍另类 | 欧美一区二区精美视频 | 91桃色国产在线播放 | 中文字幕亚洲欧美 | 国产最新视频在线观看 | 亚洲桃花综合 | 91激情| 免费99视频 | 69夜色精品国产69乱 | 黄色网免费 | 91网址在线看 | 涩涩网站免费 | 午夜精品久久久99热福利 | 在线免费观看羞羞视频 | 久久久伊人网 | 亚洲人成影院在线 | 午夜精品久久久久久久99无限制 | 99久久99久久综合 | 人人干免费| 成人一区二区在线 | 不卡av在线 | 黄色软件视频网站 | 超级碰碰碰碰 | 一二区av | 91资源在线| 国产视频一区在线免费观看 | 日韩av电影网站在线观看 | 久久午夜免费视频 | 国产精品一区二区av | 亚洲精品一区二区18漫画 | 91精品免费 | 精品999久久久 | 成人免费观看在线视频 | 久久精品99国产 | 超碰97国产精品人人cao | 青青射| 日韩免费在线 | 精品一二三四五区 | 三级av在线播放 | 日日夜夜人人精品 | 色香网 | 91免费版在线观看 | 狠狠狠色丁香婷婷综合久久88 | 伊人伊成久久人综合网小说 | 天天草天天草 | 超碰97在线人人 | 国模吧一区 | 美女久久一区 | www婷婷 | 欧美一级片在线播放 | 亚洲欧洲国产精品 | 人人干天天射 | 天天干天天操天天搞 | 在线看片中文字幕 | 欧美日韩p片 | 成人av网站在线 | 国产美女久久 | 91大神在线观看视频 | 免费成人av网站 | 国产精品久久久久久久久免费看 | 嫩嫩影院理论片 | 手机看片久久 | 亚洲精品美女在线观看播放 | 亚洲日本韩国一区二区 | 色91在线 | 激情综合站| 在线视频欧美日韩 | 91成人免费在线视频 | 精品国产电影一区二区 | 青青河边草手机免费 | 欧美色图另类 | 欧美久久成人 | 999成人网 | 欧美黑人xxxx猛性大交 | 国产流白浆高潮在线观看 | 男女视频久久久 | 911在线| 999日韩| 久久大片网站 | 91精品视频导航 | 国产精品久久久久久久久久免费看 | 久碰视频在线观看 | 日韩免费视频网站 | 中文免费在线观看 | 黄色一级大片在线免费看国产一 | 国产精品美女久久久久久久久 | 亚洲高清视频在线播放 | 夜夜高潮夜夜爽国产伦精品 | 欧美视频日韩 | 欧美成人影音 | 国产美腿白丝袜足在线av | 婷婷色婷婷 | 在线观看 亚洲 | 国产综合片 | 麻豆 free xxxx movies hd | 国产成人精品一区二区三区 | 在线看国产日韩 | 99精品国产在热久久下载 | 韩日色视频 | 97国产在线视频 | 麻豆视频免费播放 | 国产精品国产三级国产专区53 | 色av网站 | 亚洲天堂网在线播放 | 日韩av专区 | 午夜影院先 | 亚洲最新av网站 | 国产精品原创视频 | 久久热首页 | 久久嗨 | 久久精品国产亚洲精品 | 免费av片在线 | 久草在线视频首页 | 国产精品国产亚洲精品看不卡15 | 国产高清视频 | 精品中文字幕在线播放 | 91色亚洲 | 成人91在线 | 免费看片黄色 | 91亚洲精品乱码久久久久久蜜桃 | 天天在线免费视频 | 国内外成人在线视频 | 免费在线观看av电影 | 久久久精品免费观看 | 日韩在线免费不卡 | 99成人精品 | 成年人在线观看免费视频 | 日韩性久久 | 麻豆传媒视频在线免费观看 | 久久久在线免费观看 | 日韩一区二区三区视频在线 | 啪啪动态视频 | 狠狠色丁香婷婷综合欧美 | 久久久免费视频播放 | 国产一级电影网 | 伊人久久国产 | 日本特黄特色aaa大片免费 | 日韩a在线看 | 亚洲 欧洲av | 国产日韩精品一区二区三区 | av网站手机在线观看 | 丁香六月久久综合狠狠色 | 国产一区高清在线 | 波多野结衣在线播放视频 | 一级久久精品 | 日韩,中文字幕 | 免费三级影片 | 狠狠的操狠狠的干 | 日韩视频一区二区在线 | 亚洲免费婷婷 | 丁香婷五月| 国产精品久久久久久久久久久杏吧 | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲精品美女久久 | 一区二区三区免费网站 | 欧美美女激情18p | 四虎影视精品成人 | 在线 你懂| h久久| 中文字幕日韩电影 | 麻豆一精品传二传媒短视频 | 国产精品a久久久久 | 天天操天天色天天射 | 永久免费的啪啪网站免费观看浪潮 | 国产黄影院色大全免费 | 亚洲成色777777在线观看影院 | 日韩精品五月天 | 国产精品毛片一区 | 国产中文字幕91 | 在线观看亚洲成人 | 亚洲精品国产电影 | 国产精品理论在线观看 | 黄色国产成人 | 国产黄色一级片 | av黄色在线播放 | 国产韩国日本高清视频 | 国产精品久久av | 97人人网 | 97精品国自产拍在线观看 | 亚洲人成精品久久久久 | 天天干天天射天天操 | 亚洲黄色免费观看 | 黄色av影视 | 婷婷国产在线 | 最新精品视频在线 | 亚洲精品美女在线 | 亚洲精品中文字幕在线观看 | www.大网伊人 | 天天爽天天爽天天爽 | 香蕉在线视频观看 | 在线视频 91 | 久久av网 | 中文字幕人成不卡一区 | 国产色一区 | 日韩二区三区在线 | 黄色软件在线看 | 超碰97在线人人 | 亚洲欧洲久久久 | 亚洲欧美少妇 | 成人动漫精品一区二区 | 麻豆传媒视频在线免费观看 | 激情五月网站 | 成人精品视频久久久久 | 成人综合婷婷国产精品久久免费 | 韩国一区二区三区在线观看 | 日韩理论片在线 | 欧美日韩中文在线视频 | 国产视频久久久久 | 欧美日韩一区三区 | 天天干天天干天天射 | 国产精品一区二区久久国产 | 成人在线免费看视频 | 久久久久久久久久久久久久免费看 | 午夜精品一区二区三区在线 | 国产精品第三页 | 亚洲成av人片在线观看 | 国产成人av电影在线 | 在线观看av的网站 | 色婷婷综合视频在线观看 | 亚洲 中文 欧美 日韩vr 在线 | 久青草电影 | 国产精品亚洲人在线观看 | 欧美三级高清 | 亚洲国产一区二区精品专区 | 黄色a大片 | 亚洲精品一区二区三区四区高清 | 午夜精品久久久久99热app | 四虎影视www | 婷婷六月丁香激情 | 久草在线视频在线 | 国产精品一二三 | 国产免费视频一区二区裸体 | 在线观看av不卡 | 麻豆高清免费国产一区 | 91精品国产综合久久婷婷香蕉 | 波多野结衣精品视频 | 亚洲伦理精品 | 狠狠干2018| 日韩肉感妇bbwbbwbbw | 91精品少妇偷拍99 | 亚洲精品视频网 | 国产精品日韩精品 | 国产精品成久久久久三级 | 国产首页 | 亚洲精品字幕在线观看 | 精品国产精品久久 | 韩日三级在线 | 草免费视频 | 日韩免费网站 | 91高清不卡 | 天天操天天色综合 | 国产精品美女久久久网av | 天天色天天射天天综合网 | 高清在线观看av | 日韩在线短视频 | 精品字幕在线 | 日b黄色片 | 91在线播放视频 | 久久成人高清 | 99精品欧美一区二区三区黑人哦 | 日韩视频一区二区三区 | 免费av网址在线观看 | 毛片a级片| av午夜电影 | 日日麻批40分钟视频免费观看 | 99精品视频在线观看播放 | 日日夜夜添 | 日韩欧美一区二区三区在线观看 | 中文字幕在线免费看线人 | 91精品国产福利 | 在线香蕉视频 | 午夜日b视频 | 日韩欧美综合在线视频 | 亚洲专区免费观看 | 一区二区观看 | av中文字幕av | 日韩精品中文字幕在线 | 亚洲精品乱码久久久久久蜜桃不爽 | 婷婷色在线播放 | 2019久久精品 | 深爱五月激情网 | 中文字幕资源网在线观看 | 亚洲国产精品小视频 | www在线观看国产 | 又黄又爽又无遮挡的视频 | 五月婷婷久草 | 中文字幕永久免费 | 国产一级精品绿帽视频 | 成人综合婷婷国产精品久久免费 | 91精品视频免费在线观看 | 欧美日韩国产精品久久 | 国产精品美女久久久久久网站 | 欧美视频在线观看免费网址 | 国产中年夫妇高潮精品视频 | 久久无码av一区二区三区电影网 | 久久国产精品久久久 | 久久精品视频播放 | 涩五月婷婷| 免费一区在线 | 天天爽夜夜爽精品视频婷婷 | 在线涩涩| 97超碰成人在线 | 一级一片免费观看 | 精品国产一区二区三区男人吃奶 | 国产精品wwwwww | 97精品国产97久久久久久久久久久久 | 狠狠狠狠狠狠狠狠 | 天天躁天天躁天天躁婷 | 成人日批视频 | 99久久99久久免费精品蜜臀 | 97香蕉超级碰碰久久免费软件 | 国内精品视频在线播放 | 国产成人久久精品77777 | 欧美一级视频免费看 | 国产亚洲精品久 | 亚洲天堂网在线视频 | 久久九九影视 | 99精品国产兔费观看久久99 | 综合网色 | 欧美一级片在线观看视频 | a特级毛片 | 久久国产精品免费一区 | 手机看片午夜 | www.国产毛片 | 激情五月婷婷丁香 | 又湿又紧又大又爽a视频国产 | 国产精品综合av一区二区国产馆 | 中文字幕在线看视频国产 | 黄色精品免费 | 日韩电影一区二区三区在线观看 | 伊人婷婷 | 中国一级片在线播放 | 黄色影院在线免费观看 | 99视频在线精品免费观看2 | 免费看久久| 一区二区三区在线观看免费视频 | 99九九热只有国产精品 | 黄色网www | 综合成人在线 | 四虎国产永久在线精品 | 三级av中文字幕 | 国产小视频免费观看 | 国产精品第二十页 | 国产精品久久久久av | 水蜜桃亚洲一二三四在线 | 在线国产视频 | 在线免费观看视频 | 亚洲色视频 | 中文字幕在线观看视频一区 | 日女人电影 | 射射射综合网 | 国产成人精品一区二区三区网站观看 | 久久精品视频99 | 久久精品国产精品亚洲 | www.夜夜夜| 国产精品久久av | 中文字幕精品一区二区精品 | 激情五月av | 精品91视频 | 蜜臀一区二区三区精品免费视频 | 综合激情婷婷 | 国产精彩在线视频 | 色窝资源| 一级国产视频 | 91秒拍国产福利一区 | 高清免费在线视频 | 国产偷在线 | 日日夜夜免费精品视频 | 日韩中文在线播放 | 日韩在线观看精品 | 国产免费又粗又猛又爽 | 欧美日韩国产精品一区二区三区 | 免费看高清毛片 | 中文字幕中文字幕中文字幕 | 不卡在线一区 | 免费黄色在线播放 | 国产视频在线观看一区 | 88av网站| 欧美做受69| 成人三级网站在线观看 | 亚洲人成人天堂h久久 | 欧美日韩免费观看一区=区三区 | 国产资源网站 | 婷婷精品进入 | 在线观看www. | 91中文在线视频 | 欧美日韩视频在线 | 国产精品aⅴ | 蜜臀aⅴ国产精品久久久国产 | 91精品爽啪蜜夜国产在线播放 | 免费网址在线播放 | 91一区在线观看 | 国产在线国偷精品产拍免费yy | 中文一区在线 | 亚洲精品乱码久久久久久蜜桃不爽 | 婷婷www| 婷婷视频在线观看 | 国产精品一区电影 | 日日干夜夜骑 | 亚洲激情影院 | 四虎亚洲精品 | 国产亚洲精品久久久久久久久久 | 国产精品久久久久久久妇 | 国产精品久久久一区二区三区网站 | 亚洲精品在线视频网站 | 国产精品中文字幕在线播放 | 亚洲91视频| 欧美日韩国产页 | avhd高清在线谜片 | 国产综合福利在线 | 黄色av网站在线免费观看 | 日本99久久| 亚洲一级在线观看 | 国产精品wwwwww | 狠狠狠的干 | 麻豆成人网 | 中文字幕一区二区三区在线观看 | 日韩在线 一区二区 | 欧美日韩免费视频 | 久久不射网站 | 国产男女无遮挡猛进猛出在线观看 | 国产99精品| 999久久精品 | 日韩精品资源 | 欧美激情综合网 | 久久精品视频免费播放 | 97在线免费视频观看 | 成人免费看视频 | 在线免费黄色片 | 6699私人影院 | 国产xxxx性hd极品 | 丁香激情综合久久伊人久久 | 激情综合色综合久久综合 | 天天拍天天爽 | 国产高清视频网 | av在线播放免费 | 久久久久久久久电影 | 日韩黄色免费 | 在线观看一区二区精品 | 亚洲综合在线观看视频 | 亚洲视频电影在线 | 国产日女人 | 在线观看岛国av | 久久久久久久久久网站 | 男女啪啪免费网站 | 91成熟丰满女人少妇 | 一区三区在线欧 | 成人日韩av | 亚洲欧美偷拍另类 | 中文字幕在线播放一区 | 午夜精品久久久 | 日韩成人精品一区二区三区 | 欧美在线视频一区二区 | 国产免费成人av | 国产视频中文字幕 | 国产露脸91国语对白 | 亚洲午夜精品一区 | 久草在线视频精品 | 在线午夜 | 97碰在线视频 | 日韩精品91偷拍在线观看 | 国产精品毛片完整版 | 国产一区国产二区在线观看 | 婷婷www | 亚洲精品一区二区三区高潮 | 国产伦理一区二区三区 | 午夜精品一区二区三区可下载 | 极品国产91在线网站 | 日韩三级av | 国产精品资源 | 久久久麻豆精品一区二区 | 黄色亚洲大片免费在线观看 | 亚洲欧美日韩在线一区二区 | 日韩久久精品一区二区 | 国内精品福利视频 | 永久免费精品视频网站 | 国产一区 在线播放 | 中中文字幕av在线 | 日韩高清不卡一区二区三区 | 国产视频在线观看免费 | 中中文字幕av在线 | 高清免费在线视频 | 免费av小说 | 国产精品99久久免费观看 | 国内成人精品2018免费看 | 一区二区久久 | 国产精品乱码久久久久 | av成人黄色 | 少妇bbb好爽 | 午夜精品一区二区三区免费视频 | 91字幕| 超碰免费公开 | 国产精品亚洲精品 | 亚洲人成影院在线 | 日韩精品欧美一区 | 亚州精品视频 | 国产一区视频免费在线观看 | 久久影院午夜论 | 黄色影院在线免费观看 | 久久久久久福利 | 天海翼一区二区三区免费 | 久久无码精品一区二区三区 | 国内精品久久久久久久影视麻豆 | 日本爱爱片| 欧美成人黄色 | www.色国产 | 91成熟丰满女人少妇 | 狠狠躁日日躁狂躁夜夜躁av | 黄色精品国产 | 69国产精品成人在线播放 | 精品国产乱码久久 | 超级碰碰免费视频 | 国产成人综合图片 | 久亚洲| 人人玩人人添人人 | 在线看国产日韩 | 午夜av影院| 日韩一级精品 | 亚洲一区免费在线 | 91在线播 | 97免费| 日韩二区三区在线 | 国产视频在线播放 | 久久a久久 | 欧美精品久久久久久久久老牛影院 | 人人精久 | 成人在线电影观看 | 国产精品综合久久久久 | 久久国产一区二区 | 开心激情网五月天 | 美女视频黄免费 | 国产精品私人影院 | 国产精品不卡 | 91精品爽啪蜜夜国产在线播放 | 免费看的黄色录像 | 五月色综合 | 精品久久一 | 国产精品视频全国免费观看 | 日韩久久精品一区 | 欧美日韩精品免费观看视频 | 日产av在线播放 | 看片的网址 | 国产丝袜| 中文字幕专区高清在线观看 | 插婷婷 | 久久综合一本 | 天天干夜夜夜操天 | 成人精品电影 | 69成人在线| 九九免费在线观看视频 | 中文字幕在线观看三区 | 亚洲欧洲国产视频 | 久久r精品 | 色婷丁香 | 精品国产乱码久久久久久三级人 | 精品视频在线视频 | 亚洲1区 在线 | 国产福利资源 | 500部大龄熟乱视频使用方法 | 国产一区二区三区高清播放 | 久久免费视频6 | 日韩一区在线播放 | 久久久久福利视频 | 91av视频在线观看免费 | 色干综合 | 综合天天网 | 999久久久久久久久6666 | 最近中文字幕免费视频 | 欧美一进一出抽搐大尺度视频 | 大荫蒂欧美视频另类xxxx | www狠狠| 亚洲国产午夜精品 | 不卡视频国产 | 成人av网站在线 | 97超碰资源网 | 成人在线黄色 | 2018亚洲男人天堂 | 日韩免费电影一区二区 | 久久国语 | 四虎天堂| 国产在线一线 | 精品视频999 | 亚洲aⅴ一区二区三区 | 日韩免费一区 | 成人蜜桃 | 国产成人三级在线观看 | 国产视频一区二区在线 | 日本电影黄色 | 国产资源在线观看 | 亚洲资源在线观看 | 亚洲日本va午夜在线电影 | 久久午夜国产精品 | 久久综合网色—综合色88 | 69久久夜色精品国产69 | 国产精品视频免费在线观看 | 国产精选在线 | 成人免费在线观看电影 | 可以免费观看的av片 | 亚洲精品福利在线 | 日韩激情在线视频 | 天堂网中文在线 | 99久视频| 色婷婷综合久色 | 五月婷婷丁香 | 国产 中文 日韩 欧美 | 国产精品日韩在线 | 亚洲精品久久视频 | 中文字幕免费一区二区 | 在线观看一 | 在线电影 一区 | 国产专区一 | 2019中文字幕网站 | 亚洲全部视频 | 91福利试看 | 国产精品 亚洲精品 | 碰超人人 | 人人爽人人看 | 久久黄色免费视频 | 黄色av电影在线 | 不卡国产视频 | 天天色天天射天天综合网 | 91成人蝌蚪| 国产 视频 久久 | 伊人五月天婷婷 | 福利电影久久 | 日韩av高清 | 日韩免费在线视频观看 | www久 | 亚洲综合涩 | 国产中文字幕三区 | aa一级片 | 91社区国产高清 | 成人作爱视频 | 久久网站最新地址 | 欧美精品久久久久久久 | 美女免费网站 | 中文字幕在线观看视频一区二区三区 | 456免费视频| 亚洲无吗天堂 | 91在线网址 | 久久久久国产精品免费免费搜索 | 国产精品夜夜夜一区二区三区尤 | 成人在线播放网站 | 亚洲精选久久 | 超碰国产在线观看 | 中文字幕91| 亚洲精品一区二区三区在线观看 | 亚洲 成人 一区 | 天天色视频 | 国产爽妇网 | 日日天天| 国偷自产视频一区二区久 | 黄色av一区 | 欧美一区日韩精品 | 色综合久久天天 | 亚洲精品字幕 | 国产精品9区| 中文字幕日本在线观看 | 久草干| 狠狠操狠狠操 | 九九在线高清精品视频 | 国产精品美女999 | 尤物一区二区三区 | 久久久久福利视频 |