IT計(jì)算機(jī)課件第5章 Java中的面向?qū)ο筇匦訽第1頁(yè)
IT計(jì)算機(jī)課件第5章 Java中的面向?qū)ο筇匦訽第2頁(yè)
IT計(jì)算機(jī)課件第5章 Java中的面向?qū)ο筇匦訽第3頁(yè)
IT計(jì)算機(jī)課件第5章 Java中的面向?qū)ο筇匦訽第4頁(yè)
IT計(jì)算機(jī)課件第5章 Java中的面向?qū)ο筇匦訽第5頁(yè)
已閱讀5頁(yè),還剩127頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

章Java盧的面(

向?qū)ο筇匦?/p>

Java

5.1面向?qū)ο缶幊痰幕踞芗饶詈吞卣?/p>

*52類(lèi)

5.3對(duì)象

*?5.4類(lèi)成員的修飾符

5.5類(lèi)的繼承

5.6接口與包

?;57對(duì)類(lèi)成員的訪問(wèn)權(quán)限控制

*58內(nèi)部類(lèi)

?59Ja\/a類(lèi)庫(kù)的簡(jiǎn)介

Java

15.1面向?qū)ο缶幊痰幕靖拍詈吞卣?/p>

數(shù)據(jù)類(lèi)型的分類(lèi)如下所示:

「整型:byte,short,int,long

「數(shù)值型

實(shí)型:float,double

「基本數(shù)

<字符型:char

r據(jù)類(lèi)型

I布爾型:boolean

數(shù)據(jù)類(lèi)型Y

,類(lèi):class

I引用數(shù)

據(jù)類(lèi)型(數(shù)組和字符串

1接口:interface

java

基本數(shù)據(jù)類(lèi)型中的每一種類(lèi)型表示的都是單獨(dú)

的一個(gè)數(shù),它們定義的變量都是用來(lái)存儲(chǔ)數(shù)據(jù)

'的。

引用數(shù)據(jù)類(lèi)型中的每一種類(lèi)型所表示的都是一

種“結(jié)構(gòu)”,每個(gè)“結(jié)構(gòu)”都可以存儲(chǔ)多個(gè)數(shù)

據(jù),由引用類(lèi)型定義的變量稱(chēng)為引用變量。引

用變量用來(lái)存儲(chǔ)“結(jié)構(gòu)”在內(nèi)存中的“地址”。

Java

%.面向過(guò)程的設(shè)計(jì)思想和面向?qū)ο蟮脑O(shè)計(jì)思想

。面向過(guò)程■端是芬而出解決問(wèn)題所需要的步驟,

然后用方法把這些步驟一步一步實(shí)現(xiàn),使用

的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。

?:?面向?qū)ο??是把構(gòu)成問(wèn)題的事務(wù)分解成各個(gè)對(duì)I

象「每個(gè)對(duì)象分別負(fù)責(zé)執(zhí)行一組相關(guān)的任務(wù),

M/沖現(xiàn)整個(gè)問(wèn)題的解決。|

*

我去北京?

?:?面向過(guò)程:

我開(kāi)車(chē)->我掛擋->我踩油門(mén)->我過(guò)河北,…

?:?面向?qū)ο螅?/p>

我命令車(chē)去北京

五子棋

。面向過(guò)程:

1、開(kāi)始游戲,

2、黑子先走,

3、繪制畫(huà)面,

4、判斷輸贏,

5、輪到白子,

6、繪制畫(huà)面,

7、判斷輸贏,

8、返回步驟2,

9、輸出最后結(jié)果。

Java

。面向?qū)ο螅?/p>

1、黑白雙方

-這兩方的行為是一模一樣的,

2、棋盤(pán)系統(tǒng)

--負(fù)責(zé)繪制ffll面,

3、規(guī)則系統(tǒng)

-負(fù)責(zé)判定諸如犯規(guī)、輸贏等。

Java

。面向?qū)ο蟮脑O(shè)計(jì)思想,是從現(xiàn)實(shí)存在的事務(wù)

出發(fā)構(gòu)造軟件系統(tǒng),更加符合人的自然思維

方式。

。面向?qū)ο蟮脑O(shè)計(jì)思想,強(qiáng)調(diào)運(yùn)用人們?cè)谌粘?/p>

邏輯思維中的使用的思想方法和原則,如:

抽象、分類(lèi)、繼承、多態(tài)等等。

4,

2.類(lèi)和對(duì)象的概念

。對(duì)象用計(jì)算機(jī)語(yǔ)言對(duì)問(wèn)題域中事物的描述,對(duì)象通

過(guò)“屬性(attribute),而“方法(method)”來(lái)分另。對(duì)應(yīng)I

事物所具有的靜態(tài)屬性和動(dòng)態(tài)屬性。I

?:?類(lèi)是用于描述同一類(lèi)形的對(duì)象的一個(gè)抽象的概念,I

類(lèi)中定義了這一類(lèi)對(duì)象所應(yīng)具有的靜態(tài)和動(dòng)態(tài)屬性。I

?:?類(lèi)可以看成一類(lèi)對(duì)象的模板,對(duì)象(object)可以看成I

該類(lèi)的一個(gè)具體實(shí)例(instance)。

I

)

M(class)

*具有共同屬性和行為的

對(duì)象集合

類(lèi)與對(duì)象的關(guān)系

i類(lèi)是對(duì)象的抽象

9對(duì)象是類(lèi)的實(shí)例

類(lèi)具有層次關(guān)系

汽車(chē)設(shè)計(jì)圖

一一/\4二

第一輛第二輛第三輛

將對(duì)象比作汽車(chē),那么類(lèi)就是汽車(chē)的設(shè)計(jì)

圖紙。所以面向?qū)ο蟪绦蛟O(shè)計(jì)的重點(diǎn)是

類(lèi)的設(shè)計(jì),而不是對(duì)象的設(shè)計(jì)。

而類(lèi)的設(shè)計(jì)就要用到抽象。

抽象可分為:

■數(shù)據(jù)抽象:

描述某類(lèi)對(duì)象的屬性或狀態(tài)

■代碼抽象

描述某類(lèi)對(duì)象的共有的行為特征或具有的功能。

抽象的實(shí)現(xiàn):通過(guò)類(lèi)的定義。

Java

類(lèi)對(duì)象

X抽象

1

java

LightClassExample

類(lèi)名------,Light

watt

屬性------

?style

on()

接口-------

off()

brighten()

dim()

“Light”對(duì)象聲明成員方法

\(方法)

Lightlight;

light.on();-將開(kāi)燈請(qǐng)求發(fā)送至“l(fā)ight”對(duì)象,“on()”成員方法執(zhí)行

java

3、面向?qū)ο蟮闹饕卣?/p>

主要特征

1抽象性1封裝性f繼承性f多態(tài)性

5

封裝性

封裝就是把對(duì)象的屬性和行為結(jié)合成

一個(gè)獨(dú)立的單位,并盡可能隱藏對(duì)象

的內(nèi)部細(xì)節(jié)。

i目的是增強(qiáng)安全性和簡(jiǎn)化編程,使用者

不必了解具體的實(shí)現(xiàn)細(xì)節(jié),而只需要通

過(guò)外部接口,以特定的訪問(wèn)權(quán)限,來(lái)使

用類(lèi)的成員。

繼承性(inheritance)

父類(lèi)

?:?繼承性是父類(lèi)和子類(lèi)之

間共享數(shù)據(jù)和方法的機(jī)

制;

。繼承性具有傳遞性;

?繼承性包括單繼承和多

重繼承。

Java

Ja?

單繼承Baseclass

每個(gè)形狀(Shape)類(lèi)有大小

、顏色、位置等屬性。

每個(gè)形狀能夠描繪、刪除、移

動(dòng)、著色。

從Shape類(lèi)派生出:Circle,

Square,Triangle三個(gè)子類(lèi)。

三個(gè)子類(lèi)繼承了父類(lèi)shape的

屬性和方法。

Derivedclasses

Java

態(tài)性:

5.2類(lèi)和對(duì)象

小對(duì)象是Java程序的核心,在Java程序中“萬(wàn)

事萬(wàn)物皆對(duì)象”。

力對(duì)象可以看成是靜態(tài)屬性(成員變量)和動(dòng)態(tài)屬

性(方法)的封裝體。

9類(lèi)是用來(lái)創(chuàng)建同一類(lèi)型的對(duì)象的“模板”,在

一個(gè)類(lèi)中定義了該類(lèi)對(duì)象所應(yīng)具有的成員變量

以及方法。

小移J2SDK提供了很多類(lèi)供編程人員使用,編程

人員也可定義自己的類(lèi)。

1.類(lèi)

。類(lèi):描述一類(lèi)事物共有的屬性和功能,描述過(guò)程

由類(lèi)體來(lái)實(shí)現(xiàn)。類(lèi)聲明之后的一對(duì)大括號(hào)”{}“

以及它們之間的內(nèi)容稱(chēng)做類(lèi)體,大括號(hào)之間的內(nèi)

容稱(chēng)做類(lèi)體的內(nèi)容。

類(lèi)體的內(nèi)容由兩部分構(gòu)成:

一部分是成員變量的定義,用來(lái)刻畫(huà)屬性;

另一部分是方法的定義,用來(lái)刻畫(huà)功能。

Java

類(lèi)的定義用class關(guān)鍵字

例如:用來(lái)描述“人”的類(lèi)可以簡(jiǎn)單表示如下:

classPerson{

〃成員變量的定義

Stringname;

intage;

charsex;

〃方法的定義

publicvoidmakeTools(StringtoolName){

System.out.println(name+,5havemade

aperfect,5+toolName+"!”);

}

Java

?類(lèi)定義主要由兩個(gè)方面組成一成員變量和方法:

。聲明成員變量的格式為:定義

[<modifiers>]typeattr_name=[defaultValue]

例如:privateintid;privateintage=20;

。聲明方法的格式為

[<modifiers>]

[<modifiers>]<return_type>name([<argu_list>]){

[<statements>]

)

例如:publicintgetAge(){returnage;}

_______________________________£

java

成員變量(屬性)

成員變量類(lèi)型取值

屬性可以是Java語(yǔ)言中任

byte01

何一種數(shù)據(jù)類(lèi)型(包括基本

short0j

類(lèi)型和引用類(lèi)型)。

int0

在定義屬性時(shí)可以對(duì)其初longOL

始化,如果不對(duì)其初始化,char,\u0000'

Java使用默認(rèn)的值對(duì)其初float0.0F

始化。(如圖)double0.0Dj

屬性的作用范圍為整個(gè)類(lèi)booleanfalse

體所有引用類(lèi)型null

Ja而

。局部變量與成員變量的區(qū)別???■

Ja?

必須用new關(guān)鍵字創(chuàng)建對(duì)象

。使用對(duì)象(引用),成員變量來(lái)引用對(duì)象的成

員變量

?:?使用對(duì)象(引用),方法調(diào)用對(duì)象的方法

。同一類(lèi)的每個(gè)對(duì)象有不同的成員變量存儲(chǔ)空

。同一類(lèi)的每個(gè)對(duì)象共享該類(lèi)的方法

對(duì)象具有兩方面的含義:

在現(xiàn)實(shí)世界中:

是客觀世界中的一個(gè)實(shí)體

在計(jì)算機(jī)世界中:

是一個(gè)可標(biāo)識(shí)的存儲(chǔ)區(qū)域

對(duì)象的特性:

模塊獨(dú)立性

動(dòng)態(tài)連接性

易維護(hù)性

程序的執(zhí)行過(guò)程

3:執(zhí)行過(guò)程中的內(nèi)存管理

?:?例1:Strings;

s=newString(uhelloworld。;

Java

例2:

publicclassPerson{

staticintid;

intage=20;

publicstaticvoidmain(String[]args){

Personzhangsan=newPerson();

Personlisi=newPerson();

System.out.print(zhangsan.id);

System.out.print(lisi.id);

)

)

Ja?

Zhangsan.id

堆內(nèi)存

Zhangsan.age

publicclassPersonlisi.id

staticintid;lisi.age

intage=20;

id

age

publicstaticvoid

main(String[]args)

{…}zhangsan

棧內(nèi)存"

Java

1.構(gòu)造方法

?:?使用new+構(gòu)造方法創(chuàng)建一個(gè)新的對(duì)象。

。構(gòu)造方法是定義在Java類(lèi)中的一個(gè)用來(lái)初始

化對(duì)象的方法

。構(gòu)造方法與類(lèi)同名且沒(méi)有返回值。

例如:Person類(lèi)的構(gòu)造方法:

Person(String_name,int_age,String_sex){

name=_name;

age=_age;

sex=_sex

}

對(duì)象:zhangSan=newPerson(“張三”,18「男”);

_________________________________且

java

PersonzhangSan=newPerson(u^^^);

java

使用new運(yùn)算符和類(lèi)的構(gòu)造方法為聲明

的對(duì)象分配內(nèi)存,如果類(lèi)中沒(méi)有構(gòu)造方法,

系統(tǒng)會(huì)調(diào)用默認(rèn)的構(gòu)造方法,默認(rèn)的構(gòu)造方

法是無(wú)參數(shù)的。

java

PersonzhangSan=newPerson();

Java

【課堂練習(xí)】

。習(xí)題下面程序段是某同學(xué)為Student類(lèi)編寫(xiě)

、士》、一t-Z-rtj【心世

的構(gòu)造錯(cuò)誤1:構(gòu)造方法無(wú)返回類(lèi)型3誤?

voidStudent(intsno,Stringsname)

studentNosno;

studentNamesname;

returnsno;

錯(cuò)誤2:構(gòu)造方法無(wú)返回值

殳方法的參數(shù)及其傳遞方式

9形參與實(shí)參

。形式參數(shù):定義方法時(shí)方法名后面括號(hào)中的變量名

?:?實(shí)際參數(shù):調(diào)用方法時(shí)方法名后面括號(hào)中的表達(dá)式

publicstaticvoidmain(String[]args){

例比較兩個(gè)數(shù)并輸出大者inta9b9c;

Scannerin=newScanner(System.in);

a=in.nextlnt();

(main方法)b=in.nextlnt();

y)(max方法)c=max(a,b);一^-------1實(shí)參|

System.out.prmtln(nMaxis^-hc);

I

Intmax(intx,inj^y)r形參

{intz;

z=x>y?x:y;

returnz;

}

?方法參數(shù)及其傳遞方式

9形參與實(shí)參

?:?形式參數(shù):定義方法時(shí)方法名后面括號(hào)中的變量名

?:?實(shí)際參數(shù):調(diào)用方法時(shí)方法名后面括號(hào)中的表達(dá)式

9說(shuō)明:

?:?實(shí)參必須有確定的值

?:?形參必須指定類(lèi)型

?:?形參與實(shí)參類(lèi)型一致,個(gè)數(shù)相同

。若形參與實(shí)參類(lèi)型不一致,自動(dòng)按形參類(lèi)型轉(zhuǎn)換一

一方法調(diào)用轉(zhuǎn)換

。形參在方法被調(diào)用前不占內(nèi)存;方法調(diào)用時(shí)為形參分

配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋放

Java

例計(jì)算X的立方a_1.2

product_1.728

publicclasstest

floatcube(floatx)

{return(x*x*x);

}

publicstaticvoidmain(String[]args)

{floata,product;

Scannerin=newScanner(System.in);

System.out.printf(nPleaseinputvalueofa:11);

a=in.nextFloat();

product=cube(a);

System.out.printf(5,Cubeof%.4fis%.4f\nnproduct);

)

)Java

9參數(shù)傳遞方式

?:?值傳遞方式

9方式:方法調(diào)用時(shí),為形參分配單元,并將實(shí)參的值復(fù)制到形參

中;調(diào)用結(jié)束,形參單元被釋放,實(shí)參單元仍保留并維持原

9特點(diǎn):

?:?形參與實(shí)參占用不同的內(nèi)存單元

單向傳遞

小變量作為方法參數(shù)——值傳遞

例求兩數(shù)平方之差

publicclasstest

(main)

2000變量i

staticintsub(intc,intd)

20026變量j

{c=c*c;8

2004

d=d*d;(sub)

COPY變量c

System.out.prin二36

變量d

returnc-d;64

}200A

Publicstaticvoidmain(Stringargs[])

{inti=6,j=8,k;

k=sub(i,j);

System.out.printf(66k=%d\n5\k);

System.out.printf(ui=%d\tj=%d\nTj);

}

}

?:?地址傳遞

3方式:方法調(diào)用時(shí),將數(shù)據(jù)的存儲(chǔ)地址作為參數(shù)傳遞給形參

9特點(diǎn):

?:?形參與實(shí)參占用同樣的存儲(chǔ)單元

“雙向”傳遞

例求兩數(shù)平方之差

publicclasstest

2(00

voidsetArray(intx[])

2(02

{for(inti=0;k<length;i++)

2(04

x[i]=i+l;

2(06

}

’2(

publicstaticvoidmaiiifString^i^sIl08

{inta[]={0,0,0,0};|OOA

setArray(a);0)C

for(inti=0;k<length;i++)20)E

66

System.out.printf(a[”+i+”]="+a10

}

}

java

1,方法調(diào)用

。按值調(diào)用例5.4

?:?引用調(diào)用例5.5

例子:

classBirthDate{

privateintday;

privateintmonth;

privateintyear;

publicBirthDate(intd,intm,inty){

day=d;month=m;year=y;

}

publicvoidsetDay(intd){day=d;}

publicvoidsetMonth(intm){month=m;}

publicvoidsetYear(inty){year=y;}

publicintgetDay(){returnday;}

publicintgetMonth(){returnmonth;}

publicintgetYear(){returnyear;}

pxiblicvoiddisplay(){

System.out.printin

(day+*-+month+TT-fT+year);

)

}

publicclassTest{

publicstaticvoidmain(Stringargs[]){

Testtest=newTest();

intdate=9;

BirthDatedl=newBirthDate(7r7r1970);

BirthDated2=newBirthDate(1,1,2000);

test.changel(date);

test.change2(dl);

test.change3(d2);

System.out.printin(Ttdate=,T+date);

dl.display();

d2.display();

)

publicvoidchangel(inti){i=1234;}

publicvoidchange2(Bir±hDateb)

{b=newBirthDate(22,2,2004);}

publicvoidchanges(BirthDateb)

{b.setDay(22);}

)

JJ

,4.this關(guān)鍵字

1.使用this關(guān)鍵字區(qū)分局部變量和成員變

局部變量和成員變量的區(qū)別:例子

TestPerson.java

?:?使用this關(guān)鍵字來(lái)區(qū)分成員變量和局部變量。

訪問(wèn)本身的成員變量,如:

this.variable;

在一個(gè)類(lèi)的每一個(gè)方法中都隱含了一個(gè)局部變

量this,this變量在方法中表示調(diào)用這個(gè)方法的

對(duì)象,this的值是本對(duì)象的地址。

Java

2.使用this關(guān)鍵字調(diào)用本類(lèi)中的重載構(gòu)

造方法

??梢允褂胻his關(guān)鍵字來(lái)實(shí)現(xiàn)重載構(gòu)造方法之

間的相互調(diào)用。

注意:使用this調(diào)用重載的構(gòu)造方法this,必

須是構(gòu)造方法的第一條語(yǔ)句。

例:TestMyDate.java

5.8

—X

Java

K方法重載

Java語(yǔ)言允許在一個(gè)類(lèi)中定義多個(gè)名字相同的方法,

但是參數(shù)必須不同,在調(diào)用同名方法時(shí)要根據(jù)參數(shù)

來(lái)決定調(diào)用哪個(gè)方法,這稱(chēng)為方法重載

(overloading)。

在定義重載的方法時(shí)特別強(qiáng)調(diào)的是方法的參數(shù)必須

不同,所謂參數(shù)不同有三種情況,下面使用構(gòu)造方

法舉例說(shuō)明。

1.參數(shù)數(shù)量不同

MyDate(intday,intmonth){}

MyDate(intday,intmonth,intyear){}

2.參數(shù)類(lèi)型不同

MyDate(intday,intmonth,longyear){}

MyDate(longday,intmonth,intyear){}

3.參數(shù)順序不同

MyDate(intday,longmonth){}

MyDate(longmonth,intday){}

-—______________________

Java

例子:TestMyDate1Java

5.7

工main方法

主方法的參數(shù)是個(gè)字符串?dāng)?shù)組,使用這個(gè)參數(shù)

能夠在運(yùn)行程序時(shí)將參數(shù)傳給程序。

例:5-9

L對(duì)象的使用

(1)聲明

(2)初始化

(3)使用

i1.訪問(wèn)對(duì)象的成員

。通過(guò)運(yùn)算符"(點(diǎn)取操作符)可以實(shí)現(xiàn)對(duì)

變量的訪問(wèn)和方法的調(diào)用。

(1)對(duì)象名.變量

例如:="張三”;〃給這

個(gè)實(shí)例的name域設(shè)為字符串“張三”,如圖

5-4所示。

zhangSan0xabcd張三name

0sex

0age

Java

(2)對(duì)象名.方法

例如:

Zhangsan.makeTools(木棒”);

例5-12

Java

2.對(duì)象做類(lèi)的成員

*類(lèi)的數(shù)據(jù)類(lèi)型可以簡(jiǎn)單數(shù)據(jù)類(lèi)型,也可以是對(duì)象。

例:5-13

3.方法中使用對(duì)象

?:?和基本數(shù)據(jù)類(lèi)型的變量一樣,對(duì)象可以作為一個(gè)方

法的參數(shù)和返回值。

例:5-14

I

1

人對(duì)象的清除

System.gc();

?重寫(xiě)finalize。方法

5.4類(lèi)成員的訪問(wèn)權(quán)限

1.static

static關(guān)鍵字用作成員變量、方法、塊

和內(nèi)部類(lèi)的修飾符。.

?static修飾的成員變量叫做類(lèi)變量(靜態(tài)

變量)

?static修飾的方法叫做類(lèi)方法(靜態(tài)方法)

java

。靜態(tài)變量是屬于整個(gè)類(lèi)的,它們對(duì)于這個(gè)類(lèi)的

所有對(duì)象來(lái)說(shuō)是惟一的。直接通過(guò)類(lèi)名引用。

實(shí)例變量只有在生成實(shí)例對(duì)象之后才存在,才

可以被引用。

也把靜態(tài)變量稱(chēng)為類(lèi)變量,非靜態(tài)變量稱(chēng)為實(shí)

例變量。

classTestStatic{

staticintnumber=O;〃靜態(tài)變量

intnumber1=0;〃實(shí)例變量

TestStatic(){

System.out.println(++TestStatic.number);

)

publicstaticvoidmain(String[]args){

TestStatict;

for(inti=1;i<5;i++){

t=newTestStatic();

System.out.println(++t.number1);

}})

Ja?

。相應(yīng)地,靜相方法稱(chēng)為類(lèi)方法,非靜態(tài)方法稱(chēng)

為實(shí)例方法。

。由于靜態(tài)方法也是通過(guò)類(lèi)直接調(diào)用,在使用靜

態(tài)方法的時(shí)候不能保證實(shí)例存在。所以在靜態(tài)

方法當(dāng)中訪問(wèn)實(shí)例變量和實(shí)例方法時(shí),應(yīng)先創(chuàng)

建實(shí)例對(duì)象。

。靜態(tài)方法也可以被繼承,使用super就可以調(diào)

用從父類(lèi)繼承的方法,包括靜態(tài)方法。

Java

classTestStatic1{

staticintnumber=O;

TestStatic(){

System.out.println(++TestStatic.number);

)

voidprint(){

System.out.println(number);}〃使用靜態(tài)變量

publicstaticvoidmain(String[]args){〃靜態(tài)方法

TestStatict=newTestStatic1();

print();〃不能直接調(diào)用,用對(duì)象來(lái)引用

t.printO;

)

Java

?靜態(tài)塊

靜態(tài)塊用來(lái)完成靜態(tài)變量的初始化工作。構(gòu)造對(duì)

象時(shí)靜態(tài)塊先于構(gòu)造器執(zhí)行,且只執(zhí)行一次。例

如:

classTestStatic2{

staticintnumber;

static{

System.out.println("staticblock");

number=1;

)

Java

TestStatic2(){

System.out.println("objects'number

is"+(TestStatic.number++));

)

publicstaticvoidmain(String[]args){

TestStatict;

for(inti=1;i<5;i++){

t=newTestStatic2();

)

)

)

_________________________g

Java

思考:例5-17

Java

2.包

包是用來(lái)管理類(lèi)文件的,包提供了一

種命名機(jī)制和可見(jiàn)性限制機(jī)制。Java語(yǔ)

言中的包是一個(gè)松散的集合,包中的類(lèi)

之間可以沒(méi)有任何關(guān)系,只是把相互訪

問(wèn)的類(lèi)定義在一個(gè)包中。

Java

(1)package語(yǔ)句

將一個(gè)類(lèi)定義在一個(gè)包當(dāng)中:

packagev頂層包名〉[.<子包名>];

要使用package語(yǔ)句,必須在源文件開(kāi)始處

指定包聲明。

___________________________「一£

Java

。在package語(yǔ)句前面只能有空白或注釋?zhuān)荒?/p>

有其他語(yǔ)句。且每個(gè)源文件只允許聲明一個(gè)包,

這個(gè)源文件中的所有類(lèi)都將作為這個(gè)包中的類(lèi)

進(jìn)行管理。如果沒(méi)有使用package語(yǔ)句進(jìn)行顯

式的包聲明,則該源文件中的類(lèi)屬于“默認(rèn)”

包。

包在文件管理中是和文件目錄對(duì)應(yīng)的,

例如:packagecn.techcollege;

在編譯之后生成的.class文件,應(yīng)置于相應(yīng)的

文件目錄中./cn/techcollege中。

Java

例如:有一個(gè)java文件PersonJava如下:

packageanimal;

publicclassPerson{}

classStudentextendsPerson{}

Java

(2)import語(yǔ)句

Java語(yǔ)法規(guī)定在使用非本包的類(lèi)時(shí),

需要在類(lèi)名前加上包名稱(chēng),這是為了區(qū)分

不同包中的同名類(lèi)。另一種方法是使用

import語(yǔ)句。

import語(yǔ)句必須位于所有類(lèi)聲明之前,

若有包聲明,則在包聲明之后。import語(yǔ)句

的作用是使程序員在源程序中使用短名,

除此以外沒(méi)有其他意義。

Java

import語(yǔ)句來(lái)引入一個(gè)類(lèi)或整個(gè)包中的類(lèi),

其格式為:

importv包名〉.v各級(jí)子包名〉.v類(lèi)名〉;

或importv包名〉V各級(jí)子包名〉,*;

Java

)特別注意:

?必須class文件的最上層目錄的父目錄位于

classpathTo

閱讀例5-26

Ja?

(3)JavaAPI中的包

*JavaAPI是以包的形式組織起來(lái)的,熟悉并掌

握這些包是學(xué)習(xí)JAVA的重要工作之一。

Java

常用Packages的分組

分類(lèi)名稱(chēng)包名

java.lang,java.io,java.math,

基本類(lèi)

java.util,java.text

圖形接口類(lèi)java.awt,java.swing,java.applet

數(shù)據(jù)庫(kù)類(lèi)java.sql

網(wǎng)絡(luò)程序設(shè),java.security,

計(jì)類(lèi)java.servlet,java.rmi

其他類(lèi)java.beans,java.corba

在這些包中,除了java.lang包外,其他的包

必須通過(guò)import語(yǔ)句引入,經(jīng)系統(tǒng)加載后,包中

的類(lèi)才能直接被程序所使用。

Java

1.java,lang包

java.lang包是Java中最重要的包,它在Java

虛擬機(jī)運(yùn)行時(shí)被加載,因此它可直接使用,不需(

import語(yǔ)句引入。

(1)java.lang.System類(lèi)

System類(lèi)提供了標(biāo)準(zhǔn)輸入輸出、運(yùn)行時(shí)的系統(tǒng)信

息等重要工具。System類(lèi)的所有屬性和方法都

是靜態(tài)的,直接以類(lèi)名System作為前綴來(lái)引用。

不能用System類(lèi)來(lái)創(chuàng)建對(duì)象。

Java

System.in與System.out是System類(lèi)的兩個(gè)靜態(tài)

屬性,分別對(duì)應(yīng)了系統(tǒng)的標(biāo)準(zhǔn)輸入與輸出。

(1)標(biāo)準(zhǔn)輸入流也稱(chēng)控制臺(tái)輸入流

(System.in),用于程序輸入,通常讀取用戶(hù)從

鍵盤(pán)輸入的信息;

(2)標(biāo)準(zhǔn)輸出流又稱(chēng)為控制臺(tái)輸出流

(System.out),用于程序輸出,通常向用戶(hù)顯

小信息;

(3)System.err稱(chēng)為標(biāo)準(zhǔn)錯(cuò)誤流,用于是向

用戶(hù)顯示錯(cuò)誤信息。

java

(2)java.Iang.String類(lèi)

String類(lèi)封裝了有關(guān)字符串的操作。這里的字

符串是常量,即創(chuàng)建后就不可進(jìn)行修改和變動(dòng)。

如果在程序中只做字符串比較、搜索等操作時(shí),

通常使用String類(lèi)。

(3)java.Iang.StringBuffer類(lèi)

StringBuffer類(lèi)則是動(dòng)態(tài)可變的字符串緩沖,

它提供了一系列方法,把不同類(lèi)型(如整型、布

爾型等)數(shù)據(jù)插入緩沖或追加在緩沖的末尾。

Java

(4)javaJang.Math類(lèi)

Math類(lèi)主要完成一些常用的數(shù)學(xué)運(yùn)算,它提供

了基本的科學(xué)運(yùn)算方法的方法,這些方法都是

公共的、靜態(tài)的,可以直接使用類(lèi)名作前綴來(lái)

調(diào)用這些方法。

2.java.util包

java.util是Java是實(shí)用工具類(lèi)包。這個(gè)包提供了

一些如日期(Date)類(lèi)、隨機(jī)數(shù)(Random)類(lèi),

矢量(Vector)類(lèi)、堆棧(Stack)類(lèi)等,為程

序設(shè)計(jì)提供了便利。

Java

5.5類(lèi)的繼承

1.繼承類(lèi)

在定義子類(lèi)時(shí),使用extends關(guān)鍵字來(lái)指出這

個(gè)類(lèi)的父類(lèi)。其格式為:

calss子類(lèi)名extends父類(lèi)名{

子類(lèi)的成員

)

子類(lèi)可以把父類(lèi)的成員作為自己的成員使用,

而不必重新定義。

注意:

。通過(guò)繼承實(shí)現(xiàn)代碼復(fù)用。Java中所有的類(lèi)都是

通過(guò)直接或間接地繼承java.Iang.Object類(lèi)得到

的。

。繼承而得到的類(lèi)稱(chēng)為子類(lèi),被繼承的類(lèi)稱(chēng)為父類(lèi)。

。通過(guò)繼承,子類(lèi)自動(dòng)擁有了父類(lèi)的所有成員(成

員變量和方法)。

。Java不支持多重繼承,即不支持一個(gè)類(lèi)從多個(gè)

超類(lèi)派生的能力。只支持單繼承。

例:TestPerson.java,5-18

Java

2,成員變量的隱臧和方法的覆蓋(重寫(xiě))

子類(lèi)通過(guò)隱藏父類(lèi)的成員變量和重寫(xiě)父類(lèi)的

方法,可以把父類(lèi)的狀態(tài)和行為改變?yōu)樽陨淼臓?/p>

態(tài)和行為。

例如:

classSuperClass{

intx;

voidsetX(){x=0;}…

}

classSubClassextendsSuperClass{

intx;//隱藏了父類(lèi)的變量x

???

voidsetx()//重寫(xiě)了父類(lèi)的方法

setX()

{x=5;}

Java

⑴成員變量的隱藏

。子類(lèi)能夠繼承父類(lèi)的成員變量。如果在定義

子類(lèi)時(shí)定義了和父類(lèi)同名的成員變量,這種

情況稱(chēng)為成員變量的隱藏。

。當(dāng)子類(lèi)調(diào)用父類(lèi)的方法時(shí),父類(lèi)的方法使用

的是父類(lèi)的成員變量;當(dāng)子類(lèi)調(diào)用自己定義

的方法時(shí),方法使用的是子類(lèi)自己定義的成

員變量。

。在子類(lèi)方法中還可以使用super關(guān)鍵字來(lái)弓I用

父類(lèi)的成員變量。

Java

(2)方法的覆蓋

?:?方法覆蓋的含義,即子類(lèi)定義了和父類(lèi)同名的

方法,這樣子類(lèi)中就有了兩個(gè)同名方法,一個(gè)

是從父類(lèi)繼承的,一個(gè)是自己定義的。子類(lèi)對(duì)

象就調(diào)用自己定義的方法。

。注意:在進(jìn)行方法覆蓋時(shí),子類(lèi)要定義與父類(lèi)

相同的方法,要求方法名、參數(shù)列表、返回類(lèi)

型完全相同。否則如果只是方法名相同,而參

數(shù)不同,這時(shí)子類(lèi)和父類(lèi)的同名方法構(gòu)成方法

的重載。

Java

r方法名相同+參數(shù)相同+返回類(lèi)型必須相同

〈(否則出錯(cuò))一覆蓋

I方法名相同+參數(shù)不同一重載

。如果子類(lèi)覆蓋了父類(lèi)的方法,還想要調(diào)用父類(lèi)

的方法,可以使用super關(guān)鍵字調(diào)用該方法。

V

java

,注意:

重寫(xiě)的方法不能使用比被重寫(xiě)的方法有更嚴(yán)

格的訪問(wèn)控制。

。重寫(xiě)的方法不能比被重寫(xiě)的方法產(chǎn)生更多的

異常。

例:5-19

3.super關(guān)鍵字

java中通過(guò)super來(lái)實(shí)現(xiàn)對(duì)父類(lèi)成員的訪問(wèn),

super用來(lái)引用當(dāng)前對(duì)象的父類(lèi)。Super的使用有

三種情況:

1)訪問(wèn)父類(lèi)被隱藏的成員變量,如:

super.variable;

2)調(diào)用父類(lèi)中被重寫(xiě)的方法,如:

super.Method([paramlist]);

3)調(diào)用父類(lèi)的構(gòu)造方法,如:■

super([paramlist]);

例5-20

Java

★繼承中的構(gòu)造方法:

子類(lèi)必須調(diào)用父類(lèi)的構(gòu)造方法

。對(duì)一個(gè)類(lèi)中的構(gòu)造方法來(lái)說(shuō),在它的第一條代

碼中,如果沒(méi)有使用this調(diào)用本類(lèi)中重載的構(gòu)造

方法,就必須使用super調(diào)用父類(lèi)的構(gòu)造方法

。對(duì)于那些既沒(méi)用this也沒(méi)用super的構(gòu)造方法,

編譯系統(tǒng)會(huì)在它的第一條語(yǔ)句插入沒(méi)有參數(shù)的

super調(diào)用:

super();這是一條隱含的語(yǔ)句。

__________________一__g

Java

。注意:由于語(yǔ)句super()調(diào)用父類(lèi)的無(wú)參數(shù)構(gòu)造方

法,如果父類(lèi)沒(méi)有無(wú)參數(shù)的構(gòu)造方法就會(huì)導(dǎo)致編譯

錯(cuò)誤,特別是在父類(lèi)只有帶參數(shù)的構(gòu)造方法的情況

下,更容易發(fā)生錯(cuò)誤。

例如:TestsuperSub.java

。分析小程序B.java,理解構(gòu)造方法和一般成<

員方法在繼承中的區(qū)別。

Ja?

4.訪問(wèn)控制

private,default,protected,public四個(gè)訪

問(wèn)控制修飾符放在成員定義前,用來(lái)限制其他

對(duì)象對(duì)該類(lèi)對(duì)象成員的訪問(wèn)權(quán)限。

修飾符類(lèi)內(nèi)部同一個(gè)包子類(lèi)任何地方

privateYes

defaultYesYes

protectedYesYesYes

publicYesYesYesYes

Java

4.6訪問(wèn)控制符

4.6.2類(lèi)成員的訪問(wèn)控

6公共類(lèi)的成員訪問(wèn)控制

(1/3)

(1)private:只能被該類(lèi)自

身所訪問(wèn),而不能被任何其他

類(lèi)(包括該類(lèi)的子類(lèi))訪問(wèn)。

private修飾符用來(lái)聲明那些

類(lèi)的私有成員,它提供了最高

的保護(hù)級(jí)別。

。(2)默認(rèn):包訪問(wèn)特性,即

可以被同一個(gè)包中的其他類(lèi)所

訪問(wèn)。

4.6訪問(wèn)控制符

?4.6.2類(lèi)成員的訪問(wèn)

控制

小公共類(lèi)的成員訪問(wèn)控制

(2/3)

?(3)protected:可以被

該類(lèi)本身、它的子類(lèi)以及

同一包中的所有其它類(lèi)所

訪問(wèn)。

?(4)public:可以被所有

類(lèi)訪向o

,4.6訪問(wèn)控制符

?4.6.2類(lèi)成員的訪問(wèn)

控制

小公/共C/類(lèi)C、的成員訪問(wèn)控制

private訪

問(wèn)

默認(rèn)圍

protected增

public

。注意:protected在不同包的子類(lèi)訪問(wèn)也是有

條件的,只能通過(guò)繼承的方式訪問(wèn),而不能

以父類(lèi)對(duì)象的方式訪問(wèn)。

4,

?:?靜態(tài)成員static

用static修飾符修飾的屬性是僅屬于類(lèi)的靜態(tài)屬性。

?最本質(zhì)特點(diǎn):它們是類(lèi)的屬性,不屬于任何一個(gè)類(lèi)的具體對(duì)象。

它不保存在某個(gè)對(duì)象的內(nèi)存區(qū)間中,而是保存在類(lèi)的內(nèi)存區(qū)域的

公共存儲(chǔ)單元。換句話(huà)說(shuō),對(duì)于該類(lèi)的任何一個(gè)具體對(duì)象而言,

靜態(tài)屬性是一個(gè)公共的存儲(chǔ)單元,任何一個(gè)類(lèi)的對(duì)象訪問(wèn)它時(shí),

取到的都是相同的數(shù)值;同樣任何一個(gè)類(lèi)的對(duì)象去修改它時(shí),也

都是在對(duì)同一個(gè)內(nèi)存單元進(jìn)行操作。

?類(lèi)的靜態(tài)屬性是該類(lèi)各個(gè)對(duì)象的共享變量,便于實(shí)現(xiàn)一個(gè)類(lèi)不同

對(duì)象之間的通信。

【課堂示例(二)】

。例測(cè)試靜態(tài)成員。CASE2:myeg2Java

importjava.io.;

classPhoneCard200

staticStringconnectNumber,r200r,;

staticdoubleadditoryFee;

longcardNumber;

intpassword;l:\JAUA技術(shù)普程[基冊(cè)篇J\SourceCode\ch4>jauacnyeg2.jaua

booleanconnected;

程.

doublebalance;\si

瓶\SourceCode\ch4>jauanueg2

忖n

}H14

的n0.4

publicclassmyeg2M0.1

費(fèi)

0.1

publicstaticvoidmain(Stringargs[])

PhoneCard200JOLY200_1=newPhoneCard200();

PhoneCard200my200_2=newPhoneCard200();

my200_l.additoryFee=0.1;

System,out.printin("品一吐二0口卡的附加費(fèi)r,+my200_l,additoryFee);

System,out.printin(,r^4-?^20C,ffh出加黃rr+my200_2.additoryFee);

System.out.println("2CiD書(shū)類(lèi)的附加密:"+PhoneCard200.additoryFee);

}

lava

。靜態(tài)初始化器

靜態(tài)初始化器是由關(guān)鍵字static引導(dǎo)的一對(duì)大括號(hào)括起的語(yǔ)句組。

它的作用與類(lèi)的構(gòu)造方法有些相似,都是用來(lái)完成初始化的工作,

但是靜態(tài)初始化器在三點(diǎn)上與構(gòu)造方法有根本的不同:

①構(gòu)造方法是對(duì)每個(gè)新創(chuàng)建的對(duì)象初始化,而靜態(tài)初始化器是

對(duì)類(lèi)自身進(jìn)行初始化。

②構(gòu)造方法是在用new運(yùn)算符產(chǎn)生新對(duì)象時(shí)由系統(tǒng)自動(dòng)執(zhí)行,

而靜態(tài)初始化器則是在它所屬的類(lèi)加載入內(nèi)存時(shí)由系統(tǒng)調(diào)用

執(zhí)行。

③不同于構(gòu)造方法,靜態(tài)初始化器不是方法,沒(méi)有方法名、返

回值和參數(shù)列表。

當(dāng)類(lèi)PhoneCard200加1

【課堂示例(三)載入內(nèi)存時(shí),系統(tǒng)自

動(dòng)調(diào)用靜態(tài)初始化器

把類(lèi)的靜態(tài)屬性、

。例測(cè)試靜態(tài)代碼段。nextCardNumber初

classPhoneCard200始化為2001800001。

staticlongnextCardNumber;

staticStringconnectNumber“200”;

staticdoubleadditoryFee;publicclassmyeg3|

longcardNumber;

intpassword;

booleanconnected;publicstaticvoidmain(Stringargs[])

doublebalance;

PhoneCard200my200_l=newPhoneCard200();

staticPhoneCard200加丫200_2=newPhoneCard200();

〃靜態(tài)代碼段System.out.printin("第一張2i川卡的書(shū)號(hào):’+町200_1.cardNumber):

nextCardNumber2001800001;System,out.println("第二張:口1;卡的卡號(hào):"+my200_2?cardNu而ser);

1

PhoneCard200()

I:\JAUA技木教程[基他篇)\SourceCode\ch4>jauacnyeg3.jaua

cardNumbernextCardNumber;

礎(chǔ)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論