




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育個(gè)人課題申報(bào)書(shū)范例
- 課題申報(bào)書(shū)點(diǎn)評(píng)模板
- 兵團(tuán)立項(xiàng)課題申報(bào)書(shū)
- 課題申報(bào)書(shū)格式
- 陜西課題申報(bào)書(shū)范文樣本
- 烏魯木齊供用熱合同范本
- 怎么填課題申報(bào)書(shū)
- 品牌專(zhuān)利持有合同范本
- 會(huì)展場(chǎng)館租賃合同范本
- 科學(xué)技術(shù)課題申報(bào)書(shū)
- 軟膠囊成本結(jié)構(gòu)分析-深度研究
- 2025年中考百日誓師大會(huì)校長(zhǎng)致辭稿(一)
- 2025重慶市建筑安全員A證考試題庫(kù)
- 人教版初中數(shù)學(xué)八年級(jí)下冊(cè)全冊(cè)教案(2024年春季修訂)
- 生物產(chǎn)品檢驗(yàn)檢疫基礎(chǔ)知識(shí)單選題100道及答案
- 江蘇省中職《英語(yǔ)》學(xué)業(yè)水平考試備考試題集(含歷年真題)
- 2025年合伙型公司新合伙人加入?yún)f(xié)議
- 2025年安全員之C證(專(zhuān)職安全員)考試題庫(kù)
- 2025城市商鋪買(mǎi)賣(mài)合同書(shū)
- 醫(yī)院感染及其危害
- 2025年佳木斯職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論