java面向?qū)ο缶幊蘝第1頁
java面向?qū)ο缶幊蘝第2頁
java面向?qū)ο缶幊蘝第3頁
java面向?qū)ο缶幊蘝第4頁
java面向?qū)ο缶幊蘝第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Java的面向?qū)ο缶幊屉娮涌萍即髮W(xué)目標(biāo)難點重點【課前思考】什么是對象?什么是類?什么是包?什么是接口?什么是內(nèi)部類?面向?qū)ο缶幊痰奶匦杂心娜齻€?它們各自又有哪些特性?你知道java語言在面向?qū)ο缶幊谭矫嬗泻为毺氐奶攸c嗎?【學(xué)習(xí)目標(biāo)】本講主要講述了java語言的面向?qū)ο蠹夹g(shù),包括面向?qū)ο蟮幕靖拍?、面向?qū)ο蟮某绦蛟O(shè)計方法及java中的類、包、對象、抽象類、接口和面向?qū)ο蟮奶匦?。通過本講的學(xué)習(xí),同學(xué)們可以使用面向?qū)ο蠹夹g(shù)編寫java程序?!緦W(xué)習(xí)指南】應(yīng)深刻理解各知識點的概念,使用上一講的編程基礎(chǔ)知識及面向?qū)ο蠹夹g(shù),編寫簡單的java類,由淺至深,養(yǎng)成風(fēng)格良好的編程習(xí)慣?!倦y重點】重點:仔細體會面向?qū)ο缶幊痰乃枷?,熟練理解類和對象的概念,理解面向?qū)ο蟮奶匦?,會編寫簡單的類,逐漸掌握面向?qū)ο缶幊痰姆椒?。注意java語言中,不允許多重繼承,以及類變量和類方法的使用。難點:理解方法重載和方法重寫,不要混淆了兩者的使用。類變量和類方法的使用。接口的使用。Java的面向?qū)ο筇匦杂嘘P(guān)面向?qū)ο蟮母拍頙ava的類Java的對象Java的面向?qū)ο筇匦猿橄箢惡徒涌贗nner

Class面向?qū)ο蟮母拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計圍繞的幾個主要概念:抽象數(shù)據(jù)類型、類、類型層次(子類),封裝性,繼承性、多態(tài)性對象,消息和方法面向?qū)ο蟮母拍?抽象數(shù)據(jù)類型class

Car

{int

color_number;int

door_number;int

speed;void

brake()

{

}void

speedUp()

{…};void

slowDown()

{

}}計算機中的對象的原型現(xiàn)實生活中的對象抽象數(shù)據(jù)類型類什么是類?類是描述對象的“基本原型”,它定義一種對象所能擁有的數(shù)據(jù)和能完成的操作,在面向?qū)ο蟮某绦蛟O(shè)計中,類是程序的基本單元。程序中的對象是類的一個實例,是一個軟件單元,它va由ria一ble組s結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)成。methods變量,方法,消息變量:即指對象的所知道的狀態(tài)方法:指對象的功能單元。什么是消息?軟件對象通過相互間傳遞消息來相互作用和通信一個消息由三部分組成:1.

接受消息的對象2.

要完成方法的名字3.

方法需要的參數(shù)對象B對象Amessage例子一個例子在程序中操作對象是類的一個實例:即對象創(chuàng)建一個對象Hello

obj=new

Hello();調(diào)用方法obj.showString(“Hello

World!”)class

Hello{}private

String

s;public

void

showString

(){

System.out.println(s);}public

void

changeString(Stringstr){

s=str; return

s;}封裝什么是封裝?封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數(shù)據(jù),封裝私有數(shù)據(jù)方法方法數(shù)據(jù)對象A對象B公有數(shù)據(jù)實際上使用方法將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度。子類什么是子類?子類是作為另一個類的擴充或修正所定義的一個類.bicycle(super

class)sub

classMountain

bikesRacing

bikesTandem

bikes繼承什么是繼承?繼承是子類利用父類中定義的方法和變量就像它們屬于子類本身一樣.class

Car{ int

color_number;int

door_number;int

speed;push_break()

{

}add_oil()

{

}}classTrash_Carextends

Car{ double

amount;fill_trash()

{

}}何時選擇繼承性一個很好的經(jīng)驗:“B是一個A嗎?”如果是則讓B做A的子類.常犯的錯誤A有一個B嗎?例如讓汽車輪子成為汽車的子類是錯誤的方法重寫(overridden)什么是方法的覆蓋(重寫)?在子類中重新定義父類中已有的方法。class

Car{ int

color_number;int

door_number;int

speed;push_break(){

speed=0;

}add_oil()

{

}}classTrash_Carextends

Car{ double

amount;fill_trash()

{

}push_break(){ speed=speed-10;

}}多態(tài)性(polymorphic)什么是方法的重載(多態(tài)性)?在同一個類中至少有兩個方法用同一個名字,但有不同的參數(shù)。類void show(int

int_num)void

show(double

double_num)void show(nit

nit_

um,

float

float_um)1231.23123,1.23Java

類定義包括類聲明和類體類聲明:[public][abstract|final]

classclassName

[extends

superclassName][implements

interfaceNameList]{……}Java類體類體定義如下:class

className{ [public

|

protected

|

private

]

[static][final] [transient]

[volatile]

typevariableName;

//成員變量[public

|

protected

|

private

]

[static][final

|

abstract]

[native]

[synchronized]returnType

methodName([paramList])[throws

exceptionList]{statements}

//成員方法}成員變量[public

|

protected

|

private][static][final][transient][volatile]typevariableName;//成員變量static:

靜態(tài)變量(類變量〕;相對于實例變量final:

常量transient:

暫時性變量,用于對象存檔(序列化)volatile:

貢獻變量,用于并發(fā)線程的共享成員方法[public|protected|private][static][final

|

abstract][native]

[synchronized]returnType

methodName([paramList])[throws

exceptionList]{statements}//方法聲明//方法體方法聲明static:

類方法,可通過類名直接調(diào)用abstract:

抽象方法,沒有方法體final:native:方法不能被重寫集成其它語言的代碼synchronized:

控制多個并發(fā)線程的訪問成員方法(值參傳遞)參數(shù)的值參傳遞o.io.jmain

othisithis…Outer類對象棧內(nèi)存堆內(nèi)存Inner類對象Outer.this方法重載(Method

Overloading)方法重載指多個方法享有相同的方法名區(qū)別在于:參數(shù)類型不同,或個數(shù)不同;返回類型不能用來區(qū)分重載的方法。例class

MethodOverloading{void

receive(int

i)

{……}void

receive(int

x,

int

y)

{……}void receive(double

d){……}void receive(String

s)

{……}}構(gòu)造方法重載經(jīng)常用于構(gòu)造方法構(gòu)造方法具有和類名相同的名稱,而且不返回任何數(shù)據(jù)類型構(gòu)造方法只能由new運算符調(diào)用利用構(gòu)造方法進行初始化構(gòu)造方法不能被繼承例class

Point{ int

x,y; Point(){x=0;

y=0;}Point(int

x,

int

y){this.x=x;this.y=y;}}finalize()方法在根類java.land.Object中實現(xiàn)對對象進行垃圾收集前,系統(tǒng)自動調(diào)用自己重寫時需要調(diào)用父類的finalize()方法,protected

void

finalize()

throws

throwable{……

//clean

up

code

for

this

classsuper.finalize();}Java對象類實例化可生成對象對象通過消息傳遞來進行交互消息傳遞即激活指定的某個對象的方法以改變其狀態(tài)或讓它產(chǎn)生一定的行為。public

class

HelloWorldApp{public

static

void

main(String

args[]){System.out.println(“hello”);}}對象的生命周期生成使用清除對象的生成包括聲明、實例化和初始化格式:type

objectName=new

type([paramlist]);聲明:type

objectName聲明并不為對象分配內(nèi)存空間,而只是分配一個引用空間;實例化:運算符new為對象分配內(nèi)存空間,它調(diào)用對象的構(gòu)造方法,返回引用;一個類的不同對象分別占據(jù)不同的內(nèi)存空間。對象的生成(3)生成:執(zhí)行構(gòu)造方法,進行初始化;根據(jù)參數(shù)不同調(diào)用相應(yīng)的構(gòu)造方法。對象的引用指向一個中間的數(shù)據(jù)結(jié)構(gòu),它存儲有關(guān)數(shù)據(jù)類型的信息以及當(dāng)前對象所在的堆的地址,而對于對象所在的實際的內(nèi)存地址是不可操作的,這就保證了安全性。對象的使用通過運算符“.”可以實現(xiàn)對變量的訪問和方法的調(diào)用。設(shè)定訪問權(quán)限來限制其它對象對它的訪問調(diào)用對象的變量格式:objectReference.variableobjectReference是一個已生成的對象,也可以是能生成對象的表達式例:p.x=10;tx=new

Point(

).x;調(diào)用對象的方法格式:objectReference.methodName([paramlist]);例如:p.move(30,20);new

Point(

).move(30,20);使用方法的返回值if(p.equal(20,30))

{…

//statements

when

equal}

else…

//statements

when

unequal}對象的清除當(dāng)不存在對一個對象的引用時,該對象成為一個無用對象。對象的引用=null。System.gc();執(zhí)行后有什么影響:suggests

that

the

Java

VirtualMachineexpend

effort

towardrecycling

unused

objects

inorder

to

make

the

memory

they

currently

occupy

available

for

quickreuse.面向?qū)ο筇匦苑庋b性繼承性多態(tài)性封裝性類定義:class

className{

[public

|

protected

|

private

]

[static][final]

[transient]

[volatile]

typevariableName;

//成員變量[public

|

protected

|

private

]

[static][final

|

abstract]

[native]

[synchronized]returnType

methodName([paramList])[throws

exceptionList]{statements}

//成員方法}封裝性-類的修飾每個類都創(chuàng)造了有自己的名字空間,指方法和變量可以知道彼此的存在,可以使用。abstract類不能直接產(chǎn)生屬于這個類的對象final類不能被其他任何類所繼承(安全的考慮)public類不但可以被同一程序包中的其它類使用,別的程序包中的類也可以使用.缺?。侯愔荒鼙槐景械钠渌愂褂妙惽懊娴脑L問修飾字是:public或者“無”封裝性-java訪問控制變量和方法的修飾字public、protected、privatepublic:任何其它類、對象只要可以看到這個類的話,那么它就可以存取變量的數(shù)據(jù),或使用方法。class

ABC{

public

int

pub_i=5;public

void

show

(){

System.out.println(“pub_i”+pub_i);}封裝性-例子class

Demo{

public

static

void

main(String

args[]){ ABC

abc=new

ABC();System.out.println(“abc.pub_i”+abc.pub_i);abc.pub_i=10;abc.show();}}封裝性-修飾符與訪問控制同一個類同一個包不同包的子類不同包非子類private√default√√protected√√√public√√√√繼承性通過繼承實現(xiàn)代碼復(fù)用根類:java.lang.Object父類包括直接或者間接被繼承的類Java不支持多重繼承子類不能訪問父類中訪問權(quán)限為private的成員變量和方法。子類可以重寫父類的方法,及命名與父類同名的成員變量創(chuàng)建子類格式:class

SubClass

extends

SuperClass

{…}繼承性舉例繼承性舉例繼承性舉例繼承性舉例重寫(overridden)子類中重寫的方法和父類中被重寫的方法要具有相同的名字,相同的參數(shù)表和相同的返回類型重寫舉例成員變量的隱藏和方法的重寫class

SuperClass{int

x;

…void

setX(

){ x=0;

}

…}class

SubClass

extends

SuperClass{int

x; //hide

x

in

SuperClass…void setX(

)

{ //override

method

setX()x=5;

}

….}Supersuper用來引用當(dāng)前對象的父類訪問父類被隱藏的成員變量,如:super.variable;調(diào)用父類中被重寫的方法,如:

super.Method([paramlist]);調(diào)用父類的構(gòu)造函數(shù),如:

super([paramlist]);class

SuperClass{int

x;SuperClass(

)

{x=3;System.out.println(“in

SuperClass

:x=“

+x);}void

doSomething(

)

{System.out.println(“inSuperClass.doSomething()”);}}class

SubClass

extends

SuperClass

{int

x;SubClass(

)

{super(

); //call

constructor

of

superclassx=5; //super(

)

要放在方法中的第一句System.out.println(“in

SubClass

:x=“+x);}void

doSomething(

)

{super.doSomething(

);

//call

method

ofsuperclassSystem.out.println(“in

SubClass.doSomething()”);System.out.println(“super.x=”+super.x+“sub.x=”+x)}}public

class

inheritance

{public

static

void

main(String

args[])

{SubClass

subC=new

SubClass();subC.doSomething();}}多態(tài)性是由封裝性和繼承性引出的面向?qū)ο蟪绦蛟O(shè)計語言的另一特征。靜態(tài)多態(tài)性(編譯時多態(tài)〕 由方法重載(overload)實現(xiàn)動態(tài)多態(tài)性(運行時多態(tài))子類對象可以作為父類對象使用。在程序中凡是需要父類對象的地方,都可以用子類對象代替。由方法重寫(overridden)實現(xiàn)調(diào)用規(guī)則:根據(jù)實例的類型決定調(diào)用的方法。重寫方法的調(diào)用規(guī)則class

A{void

callme(

)

{System.out.println(“Inside

A’s

callme()method”);

}}class

B

extends

A{void

callme(

)

{System.out.println(“Inside

B’s

callme()Method”)

}}方法重寫應(yīng)遵循的原則改寫后的方法不能比被重寫的方法有更嚴(yán)格的訪問權(quán)限改寫后的方法不能比重寫的方法產(chǎn)生更多的例外class

Parent{public

void

function(

)

}

}class

Child

extends

Parent{private

void

function(

)

}

}public

class

OverriddenTest{public

static

void

main(String

args[])

{Parent

p1=new

Parent();Parent

p2=new

Child();p1.function();p2.function();

}}對象狀態(tài)的確定(instanceof)Manager和Contractor都是Employee的子類public

void

method(Employee

e)

{ if (e

instanceof

Manager)…

//do

something

as

a

Manager} else

if

(

e

instanceof

Contractor)

{…

}

//do

something

as

a

Contractorelse

{…

//do

something

else}}final關(guān)鍵字final修飾變量,則成為常量

final

type

variableName;修飾成員變量時,定義時同時給出初始值,而修飾局部變量時不做要求。final修飾方法,則該方法不能被子類重寫

final

returnType

methodName(paramList){…}final修飾類,則類不能被繼承

final

class

finalClassName{…}實例成員和類成員實例成員為實例所有,通過對象訪問;類成員為類所有,不屬于某一個類,可以通過類名訪問。類成員的格式(static):static

type

classVar;static

returnTypeclassMethod({paramlist])

{…}實例變量和類變量每個對象的實例變量都分配內(nèi)存通過對象來訪問這些實例變量類變量僅在生成第一個對象時分配內(nèi)存,所有實例對象共享同一個類變量。類變量可通過類名直接訪問,無需先生成一個實例對象也可以通過實例對象訪問類變量實例變量和類變量class

ABCD{ char

data;static

int_share_data;

}class

Demo{

ABCD

a,b,c,d}object

bchar

dataobject

cchar

dataObject

bchar

datastatic

intshare_dataobject

bchar

data類方法不能訪問實例變量,只能訪問類變量類方法可以由類名直接調(diào)用類方法中不能使用this或superclass

member

{static

int

classVar;int

instanceVar;static

void

setClassVar(int

i)

{classVar=i;//

instanceVar=i; //can’t

access

nostatic

member}類java.lang.Object該類定義了一些所有對象最基本的狀態(tài)和行equals():比較兩個對象(引用〕是否相同,如果相同返回true,否則返回false。相當(dāng)于操作符“==”;getClass():

返回對象運行時所對應(yīng)的類的表示,從而可得到相應(yīng)的信息,例如,運行時取得聲稱對象的類的名稱,

obj.getClass().getName()clone(),創(chuàng)建和返回一個對象的拷貝,Cloneable接口hashCode():返回一個對象的hash編碼,同一個對象,在任何時候,都返回同一個值,在hashTable中使用。toString(),返回對象的字符串表示。getClass().getName()

+

'@'

+

Integer.toHexString(hashCode())finalize(),用于在垃圾收集前清除對象。notify(),notifyAll(),wait(),用于多線程處理中的同步。Java.lang.Class一個特殊的類,沒有public構(gòu)造函數(shù)。當(dāng)類被裝入時,它的對象由jvm自動生成。Class的對象描述java程序運行中的使用的類或者接口。常用的方法有static

Class

forName(String

className)String

getName()Object

newInstance()實時程序演示查看J2SDK的文檔抽象類用abstract來修飾類或方法abstract

class

abstractClass{

…}abstract

returnType

abstractMethod([paramlist])抽象類不能被實例化,必須被繼承,抽象方法必須被重寫,生成它的子類。抽象方法只需聲明,無需實現(xiàn);抽象類不一定要包含抽象方法,若類中包含了抽象方法,則該類必須被定義為抽象類可以把抽象類作為變量的類型。接口接口類似抽

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論