![java基礎(chǔ)知識大全必看經(jīng)典_第1頁](http://file4.renrendoc.com/view14/M08/23/0C/wKhkGWYpTWSAZoBMAAF5_U4cjNE854.jpg)
![java基礎(chǔ)知識大全必看經(jīng)典_第2頁](http://file4.renrendoc.com/view14/M08/23/0C/wKhkGWYpTWSAZoBMAAF5_U4cjNE8542.jpg)
![java基礎(chǔ)知識大全必看經(jīng)典_第3頁](http://file4.renrendoc.com/view14/M08/23/0C/wKhkGWYpTWSAZoBMAAF5_U4cjNE8543.jpg)
![java基礎(chǔ)知識大全必看經(jīng)典_第4頁](http://file4.renrendoc.com/view14/M08/23/0C/wKhkGWYpTWSAZoBMAAF5_U4cjNE8544.jpg)
![java基礎(chǔ)知識大全必看經(jīng)典_第5頁](http://file4.renrendoc.com/view14/M08/23/0C/wKhkGWYpTWSAZoBMAAF5_U4cjNE8545.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第一講Java語言入門
1.1Java的特點
1.1.1面對對象:
?與C++相比,JAVA是純的面對對象的語言
C++為了向下兼容C,保留了許多C里面的特性,而C,眾所周知是面對
過程的語言,這就使C++成為一個“混血兒"。而JAVA語法中取消了C++里
為兼容C所保留的特性,如取消了頭文件、指針?biāo)惴?、結(jié)構(gòu)、單元等。
1.1.2可移植(平臺無關(guān)性):
?生成中間字節(jié)碼指令
與其他編程語言不同,Java并不生成可執(zhí)行文件(.exe文件),而是生成
一種中間字節(jié)碼文件(.class文件)。任何操作系統(tǒng),只要裝有Java虛擬機(jī)
(JVM),就可以說明并執(zhí)行這個中間字節(jié)碼文件。這正是Java實現(xiàn)可移植
的機(jī)制。
?原始數(shù)據(jù)類型存儲方法固定,避開移植時的問題
Java的原始數(shù)據(jù)類型的大小是固定的。比如,在任何機(jī)器上,整型都是32
位,而C++里整型是依靠于目標(biāo)機(jī)器的,對16位處理器(比如8086),整
數(shù)用兩個字節(jié)表示;在像SunSPARC這樣的32位處理器中,整數(shù)用4個字
節(jié)表示。在IntelPentium處理器上,整數(shù)類型由詳細(xì)的操作系統(tǒng)確定:對于
DOS和Win32來說,整數(shù)是2個字節(jié);對于Windows9x、NT和2000,
整數(shù)是4個字節(jié)。當(dāng)然,使整數(shù)類型平臺無關(guān)之后,性能必定有所下降,但就
Java來說,這個代價是值得的。Java的字符串,則接受標(biāo)準(zhǔn)的Unicode格
式保存??梢哉f,沒有這個特性,Java的可移植性也不行能實現(xiàn)。
L1.3簡潔
?JAVA在語法上與C++類似
JAVA的語法與C++很接近,有過C或者C++編程閱歷的程序員很簡潔
就可以學(xué)會JAVA語法;
?取消了C++的一些困難而低效的特性比如:用接口技術(shù)代替了C++的多
重繼承。C++中,一個類允許有多個超類,這個特性叫做"多重繼承",
多重繼承使得編譯器特殊困難且效率不高;JAVA的類只允許有一個超
類,而用接口(Interface)技術(shù)實現(xiàn)與C++的多繼承相類似的功能
其它被取消的特性包括:虛擬基礎(chǔ)類、運算符過載等
?JAVA的基本說明器和類支持模塊或許僅40K
即使加入基本的標(biāo)準(zhǔn)庫和支持線程的模塊,也才220K左右。與GUI(圖
形用戶界面)相比,明顯小許多
1.1.4健壯
?取消了指針?biāo)惴?/p>
C的最關(guān)鍵的一個特性是它的強(qiáng)大指針?biāo)惴ǎ热缈梢杂弥羔樤L問字符串、
數(shù)組甚至文件,很簡潔產(chǎn)生指針溢出,意外地改寫內(nèi)存和損毀數(shù)據(jù)。JAVA里
有一個指針模型,對于一般的任務(wù),如訪問字符串、數(shù)組,根本不用指針,而
一旦須要,比如訪問對象、文件時,也可以獲得指針的強(qiáng)大實力,但JAVA同
時有高度的指針平安保障,用戶恒久不行能訪問一個壞掉的指針、不行能造成
內(nèi)存支配錯誤,也用不著特地提防可能出現(xiàn)的內(nèi)存漏洞。
1.1.5多線程
?強(qiáng)大的多線程實力
多線程可以使程序有更好的交互性和實時性,并可以最大限度地利用多處理
器系統(tǒng)。JAVA有著強(qiáng)大的多線程處理實力,因為各主流操作系統(tǒng)平臺在線程
的實施方面有重大的差異,所以JAVA為不同的操作系統(tǒng)實現(xiàn)了特地的多線程
機(jī)制。在這點上來說,JAVA沒有做到平臺無關(guān)。
1.2Java簡史
?首次亮相一1995年5月
Java技術(shù)起先是作為小型的計算機(jī)語言,用于消費類設(shè)備,比如有線電視
交換盒等。因為這些設(shè)備的功能和內(nèi)存均不足以運行大程序,所以程序要盡可
能?。涣硗?,由于不同的廠商可能選用不同的CPU,所以要求這種語言不能受
限于任何一種獨立的體系結(jié)構(gòu)。1995年5月23日召開的SunWorld'95大
會上,一種全新的閱讀器(今日的HotJava的前身)亮相,標(biāo)記著Java的誕
生。
?起先流行一1996年1月
那時網(wǎng)景公司確定在Netscape2.0加入對Java的支持,Netscape2.0在
1996年1月發(fā)布,從這一版本起先,全部Netscape閱讀器均支持Java。注
冊了Java運用許可證的還有IBM、Symantec、Inprise和其他許多公司。
就連微軟,也加入了這一行列(盡管他們支持的Java和標(biāo)準(zhǔn)的Java稍有不
同)。
?SUN的第一個JAVA版本一1996年初
Sun公司于1996年初發(fā)布了Java1.02,缺憾的是,Java1.02還未擺脫
其小型語言的影子,只適合用來做諸如網(wǎng)頁上一個隨機(jī)移動的文字之類的工
作,并不適合用來做正規(guī)的程序開發(fā)。Javal.02作為一種正規(guī)的編程語言,
可以說,準(zhǔn)備得很不充分。
?成熟一1998年
1998年12月,Javal.2問世了。它是一個功能全面的、具有高度擴(kuò)展實
力的新版本。3天后,Javal.2被改進(jìn)成Java2,向"一次編寫,到處運行”的
目標(biāo)前進(jìn)了一大步。
?現(xiàn)狀
現(xiàn)在最新的Java版本是JDK1.4,它是一個測試版,穩(wěn)定的正式版是
JDK1.3。用戶可以到免費下載。微軟在它的最新閱讀器IE6.0中不再支持
Java,為Java的發(fā)展帶來陰影。
1.3JDK的安裝與編程環(huán)境的設(shè)定
1.3.1Java程序的開發(fā)過程
經(jīng)典的Java工具包是JDK。盡管可以用任何文本編輯器,如記事本,都
可以干脆編寫Java程序然后用JDK的叮囑編譯和運行,為了調(diào)試便利,也為
了初學(xué)者簡潔上手,本教程課件將運用一個叫JPadPro的Java編寫工具來調(diào)
用JDK的工具。用戶可以到下載這個工具。
1.3.2JDK的安裝
1.3.3安裝運行之后,應(yīng)當(dāng)首先設(shè)置JDK工具包所在的路徑。
菜單欄的JDK-〉selectJDKDirectory->選擇剛才安裝的JDK路徑-〉
OKo
1.3.4新建一個project
菜單欄的File->newprojects->選擇路徑,輸入project的名字。
號;;實用教程1
1.4兩個簡潔的程序示例
1.4.1Java應(yīng)用程序:Hello.java
?編寫
新建一個.java文件。File->new->javafile->輸入一個名字:Hello->
點creatfile.出現(xiàn)了一個空的java文件。
?編譯
JDK-〉compileHello.java或者點擊如演示所示的按鈕。事實上是執(zhí)行
JDK工具包里的javac.exe叮囑,與javac
G:\java2jiaocheng\example\teachl\Hello.java是等價的。便已完成之后
在同一個文件夾就會有一個同名的.class文件。
?看編譯結(jié)果,改錯
錯誤舉例:少寫一個分號;錄入錯誤;
?運行
JDK->Runclasses->選擇要運行的class,輸入?yún)?shù)(這里,沒有參數(shù))
或者點擊如演示所示的按鈕。
一個有參數(shù)的例子
?看運行結(jié)果
1.4.2JavaApplet:StarterApplet.java
新建一個JavaApplet文件。File->new->javaApplet->輸入一個名字:
StarterApplet->出現(xiàn)了一個空的java文件和一個Html文件。
?編譯
JDK-〉compileStarterApplet.java或者點擊如演示所示的按鈕。事實
上是執(zhí)行JDK工具包里的javac.exe叮囑,與javac
G:\java2jiaocheng\example\teach1\StarterApplet.java是等價的。
留意不要隱藏文件的擴(kuò)展名,否則給編譯時帶來麻煩!可以在工
工具/文件夾先項/查看/中修改??!
?看編譯結(jié)果,改錯
?運行
JDK->TestApplet->選擇要運行的class,輸入?yún)?shù)(這里,沒有參數(shù))
或者點擊如演示所示的按鈕
或者干脆雙擊Html文件。
?看運行結(jié)果
r?“r實用數(shù)程
1.5假如獲得幫助
1.5.1下載幫助
JDK并不包含幫助文件,須要到網(wǎng)站上下載,里面有示例和說明。
,下載下來時候,雙擊安裝。
1.5.2運用幫助
敲入想查找的關(guān)鍵字,按回車。
1.6編程的一些約定
留意:在一個原文件中只能有一個public類!且文件名與public類同
名!
1.6.1命名規(guī)則
類名與文件名應(yīng)當(dāng)一樣,否則編譯出錯。比如,classHello的文件名應(yīng)當(dāng)
是Hello.java
類名首字母大寫,每個單詞開頭大寫,其他用小寫。比如:Hello.java,
StarterApplet.java。
變量名用第一個單詞用小寫字母,其次個以后的單詞首字母大寫。比如:int
myAge;
方法的名字第一個單詞用小寫字母,其次個以后的單詞首字母大寫,比如:
getMyAge();
1.6.2注釋
/*
*Hereisablockcomment.
7
表示完整的一段注釋;
if(condition){
/*Handlethecondition.*/
表示注釋該行以下部分
if(a==2){
returnTRUE;/*specialcase*/
}else{
returnisPrime(a);//worksonlyforodda
注釋一行
1.6.3分行
假如一行太長須要換行。比如:
someMethod(longExpression1,longExpression2,
longExpression3,
longExpression4,longExpression5);
var=someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
var=someMethod1(longExpression1,someMethod2
(longExpression2,
longExpression3));
講演支配
第三講語句
Java的語句可以分為以下4種:
?表達(dá)式語句
?方法調(diào)用語句
?限制語句
VW實用教程
3.1表達(dá)式語句
一個表達(dá)式加上一個分號就構(gòu)成了一個語句。分號表示一個語句的結(jié)束,缺
少分號,編譯將出錯。最典型的表達(dá)式語句是賦值語句。
比如:intx;
x=23;
MJ
3.2方法調(diào)用語句
調(diào)用一個類的對象的方法:類名(或?qū)ο竺??方法名(參數(shù)列表)。
比如:
System.out.println("Hello").
假如方法有返回值,還可以把返回值賦值給一個變量。比如:
Strings="HeUo",
intlen;
len=s.length();
3.3限制語句
Java語言的限制語句有2種:條件語句、循環(huán)語句。
條件語句:
條件語句有兩種:if語句和switch語句。
?if語句:
if(條件)
{代碼塊1}
else
{代碼塊2}
假如條件為真,則執(zhí)行代碼塊1,否則執(zhí)行代碼塊2。
else部分是可選的,也就是說,可以沒有else。
假如有else,則與最近的if結(jié)合:
?switch語句
switch語句是多分支的開關(guān)語句,它的一般格式定義如下:
switch(表達(dá)式)
case常量值1:
{代碼塊1}
break;
case常量值2:
{代碼塊2}
break;
default:
{代碼塊}
}
語句中表達(dá)式的值必需是整型或者字符型;常量值1到常量值n必需也是
整型或者字符型。switch語句首先計算表達(dá)式的值,假如表達(dá)式的值和某個
case后面的常量值相同,就執(zhí)行該case里的若干個語句直到break語句為止。
假如沒有一個常量與表達(dá)式的值相同,則執(zhí)行default后面的若干個語句。
default是可有可無的,假如它不存在,并且全部的常量值都和表達(dá)式的值不
相同,那么switch語句就不會進(jìn)行任何處理。
須要留意的是,在switch同一個語句中,case后的常量值必需互不相同。
?實用教程
3.3限制語句
Java語言的限制語句有2種:條件語句、循環(huán)語句。
條件語句:
條件語句有兩種:if語句和switch語句。
?if語句:
if(條件)
{代碼塊1}
else
{代碼塊2}
假如條件為真,則執(zhí)行代碼塊1,否則執(zhí)行代碼塊2。
else部分是可選的,也就是說,可以沒有else。
假如有else,則與最近的if結(jié)合:
?switch語句
switch語句是多分支的開關(guān)語句,它的一般格式定義如下:
switch(表達(dá)式)
case常量值1:
{代碼塊1}
break;
case常量值2:
{代碼塊2}
break;
default:
{代碼塊}
}
語句中表達(dá)式的值必需是整型或者字符型;常量值1到常量值n必需也是
整型或者字符型。switch語句首先計算表達(dá)式的值,假如表達(dá)式的值和某個
case后面的常量值相同,就執(zhí)行該case里的若干個語句直到break語句為止。
假如沒有一個常量與表達(dá)式的值相同,則執(zhí)行default后面的若干個語句。
default是可有可無的,假如它不存在,并且全部的常量值都和表達(dá)式的值不
相同,那么switch語句就不會進(jìn)行任何處理。
須要留意的是,在switch同一個語句中,case后的常量值必需互不相同。
?實用教程
循環(huán)語句:
循環(huán)語句,顧名思義,是反復(fù)執(zhí)行的語句。比如,計算1。。的階乘,
1*2*3*...*100,就須要用到循環(huán)語句,不然,就要寫一百遍乘法。循環(huán)語句須
要特殊當(dāng)心,很簡潔陷入死循環(huán),所以循環(huán)體的代碼塊里須要有能使循環(huán)結(jié)束
的語句。Java有三種循環(huán)語句:while語句,do-while語句和for語句。
?while語句:
while語句的格式是:
while(條件)
{代碼塊}
當(dāng)條件成立的時候,執(zhí)行代碼塊,再檢查條件,假如還成立,再執(zhí)行代碼
塊,……直到條件不成立。
比如,計算10的階乘:
?do-while語句
do-while語句的格式是:
do{
代碼塊
}while(條件)
do-while語句和while語句的區(qū)分在于:while語句先檢查條件,假如條
件不成立,則不進(jìn)入循環(huán)體;do-while語句先執(zhí)行循環(huán)體的代碼,再檢查條件,
假如條件成立,則在此執(zhí)行循環(huán)體的代碼。所以,do-while語句至少要執(zhí)行一
遍循環(huán)體的代碼塊。
比如,計算10的階乘:
?for語句
for語句是Java語言中用得最多的循環(huán)語句。它的格式如下:
for(表達(dá)式1,表達(dá)式2,表達(dá)式3)
{代碼塊}
其中,表達(dá)式1完成變量的初始化,表達(dá)式2時布爾類型的表達(dá)式,是循
環(huán)條件,表達(dá)式3是黨執(zhí)行了一遍循環(huán)之后,修改限制循環(huán)的變量值。
for語句的執(zhí)行過程是這樣的:首先計算表達(dá)式1,完成必要的初始化工作;
然后推斷表達(dá)式2的值,假如表達(dá)式的值為true,則執(zhí)行循環(huán)體;假如為false,
則跳出循環(huán)。執(zhí)行完循環(huán)體之后緊接著計算表達(dá)式3,以便變更循環(huán)條件,這
樣一輪循環(huán)就結(jié)束了。其次輪循環(huán)從計算表達(dá)式起先,假如表達(dá)式的值仍為
true,則接著循環(huán);否則循環(huán)結(jié)束,執(zhí)行for語句后面的語句。
比如,計算10的階乘:
?嵌套循環(huán)
經(jīng)常可以遇到嵌套循環(huán)的例子。所謂嵌套循環(huán),是指一個循環(huán)體里還有一個
或者更多個循環(huán)。比如計算1。以內(nèi)的階乘之和,或者求5。以內(nèi)的素數(shù),就
須要用到嵌套循環(huán)。我們以求5。以內(nèi)的素數(shù)為例,說明嵌套循環(huán)的用法;求
1。以內(nèi)的階乘之和,將留作作業(yè)。
循環(huán)語句里的break語句和continue語句:
在循環(huán)體中,遇到break語句,那么整個循環(huán)語句就結(jié)束;假如遇到
continue語句,那么本次循環(huán)就結(jié)束,就是說,不再執(zhí)行本次循環(huán)中continue
語句后面的語句,而是轉(zhuǎn)入下一次循環(huán)。
「「二’實用教程
3.5變量的作用域
變量是由作用域的。所謂變量的作用域,是指一個變量在什么地方生效???/p>
的來說,變量的作用域是聲明它的塊。所謂塊,是指用一對花括號包圍起來的
隨意數(shù)量的Java語句。變量只在聲明它的塊中有效,在這塊以外,變量是無
效的。
然而,不行以在兩個嵌套的塊中聲明兩個完全同名的變量。
留意,在C++中,這是允許的,內(nèi)部定義會掩蓋外部定義。這很簡潔造成
錯誤,所以Java不允許這樣做。
小結(jié)
這一講,我們主要學(xué)習(xí)了Java的語句,主要是流程限制語句,包括條件語
句和循環(huán)語句等。語句是程序的基本組成部分,是我們進(jìn)一步學(xué)習(xí)Java的基
礎(chǔ)。希望同學(xué)們切實駕馭好這部分內(nèi)容,為我們的進(jìn)一步學(xué)習(xí)打下堅實的基礎(chǔ)。
習(xí)題
1.編一個計算1!+2!+…+10!的應(yīng)用程序
,用程序計算100以內(nèi)的全部質(zhì)數(shù)
2.一個數(shù)假如恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”,編寫一個
應(yīng)用程序,求100。之內(nèi)的全部完數(shù)。
3.求45和的最大公約數(shù)和最小公倍數(shù)。
第四講數(shù)組和字符串
4.1什么是數(shù)組?為什么要數(shù)組?
除了基本數(shù)據(jù)類型,Java還供應(yīng)一種導(dǎo)出類型:數(shù)組。數(shù)組是相同類型的
數(shù)據(jù)按依次組成的一種復(fù)合數(shù)據(jù)類型,通過數(shù)組名和下標(biāo),可以運用數(shù)組中的
數(shù)據(jù)。下標(biāo)從。起先。數(shù)組是全部編程語言中常用的數(shù)據(jù)結(jié)構(gòu)。
為什么要數(shù)組呢?我們來舉一個例子。假設(shè)我們須要表示一個班50個人的
數(shù)學(xué)成果,要求求出平均成果。假如沒有數(shù)組,我們須要用前面學(xué)過的聲明變
量的方法,聲明5。個變量,寫5。次加法運算!數(shù)組可以大大地簡化類似的
問題!我們只要聲明一個長度為5。的整型數(shù)組,結(jié)合上一講我們學(xué)過的循環(huán)
語句,就可以很便利地解決這個問題!
在以前的編程語言比如C或者C++中,字符串也運用數(shù)組來表示的:字符
串是字符數(shù)組!所以字符串與數(shù)組有著自然的聯(lián)系。但是在Java中,供應(yīng)了
一種更便利的表示字符串的方法:用一個String類來表示。類是面對對象的
語言特有的概念,對于初次接觸面對對象技術(shù)的人來說,比較難理解。所以,
這一講,我們將學(xué)習(xí)表示字符串的String類,也對類的運用有一個粗略的了
解,作為下一講詳細(xì)學(xué)習(xí)類的準(zhǔn)備。
須要指出的是,C語言里的其他兩種導(dǎo)出類型:結(jié)構(gòu)體和共用體,在Java
里已經(jīng)被取消。
下面,我們來學(xué)習(xí)數(shù)組和字符串。
4.2數(shù)組的聲明、創(chuàng)建和初始化
1.數(shù)組的聲明:
聲明數(shù)組,包括聲明數(shù)組的名字、數(shù)組包含的元素的數(shù)據(jù)類型。數(shù)組可以一
維的,也可以是二維或者多維的。舉例來說:一個班有50個人,我們用一個
長度為5。的一維數(shù)組表示;假如要表示每個同學(xué)的五門高考成果,那我們就
須要用一個第一維長度為50,其次維長度為5的二維數(shù)組。
聲明一維數(shù)組有兩種格式:
?數(shù)組元素類型數(shù)組名U;
?數(shù)組元素類型[]數(shù)組名;
比如:intstudent[];或者:int[]student;
類似地,聲明二維數(shù)組有兩種格式:
?數(shù)組元素類型數(shù)組名[][];
?數(shù)組元素類型[][]數(shù)組名;
比如:intscoref][];或者:int[][]score;
下面,我們主要以一維數(shù)組為例,學(xué)習(xí)數(shù)組的用法。
2.數(shù)組的創(chuàng)建:
聲明數(shù)組僅僅給出了數(shù)組名字和元素的數(shù)據(jù)類型,想要真正運用數(shù)組還必需
為數(shù)組支配內(nèi)存空間,也就是創(chuàng)建數(shù)組。在為數(shù)組支配內(nèi)存空間時必需指明數(shù)
組的長度。為數(shù)組支配內(nèi)存空間的格式如下:
?數(shù)組名=new數(shù)組元素的類型[數(shù)組的長度]
例如:student=newint[50];
score=newint[50][4];
事實上,數(shù)組的聲明和創(chuàng)建可以一起完成,比如:
intstudent[]=newint[50];
一旦數(shù)組被創(chuàng)建,數(shù)組的大小就不能變更。假如在程序運行期間,須要對數(shù)
組的大小進(jìn)行擴(kuò)展,通常須要運用另一種數(shù)據(jù)對象:Vectoro有關(guān)向量和擴(kuò)展
數(shù)組,有愛好的同學(xué)可以在Java幫助中查找Vector的幫助。
student數(shù)組創(chuàng)建之后,其內(nèi)存模式如圖:
StudentF01
StudentF11
StudentF21
Student「3]
Student[49]
3.數(shù)組的初始化:
創(chuàng)建數(shù)組后,系統(tǒng)會給每個元素一個默認(rèn)的值,比如,整型數(shù)組的默認(rèn)值是
我們也可以在聲明數(shù)組的同時給數(shù)組一個初始值,我們稱之為初始化。
intnum[]={2,4,4,1}。
這個初始化動作相當(dāng)于:
intnum[]=newint[4];
num[0]=2;num[1]=5;num[2]=4;num[3]=1;
為"實用教程
4.3數(shù)組的運用
1.數(shù)組的訪問
前面我們已經(jīng)看到,數(shù)組通過下標(biāo)訪問數(shù)組元素,比如:student[0]=70,
student[49]=87等。留意,下標(biāo)從0起先,假如數(shù)組長度為n,則下標(biāo)是。~
n-1,假如運用n或者以上的元素,將會發(fā)生數(shù)組溢出異樣。比如:student[50]
=79,雖然編譯的時候能通過,程序運行時將中止。
二維數(shù)組的運用與之類似。
2.數(shù)組的復(fù)制
可以把一個數(shù)組變量復(fù)制給另一個,但兩個變量引用的都會是同一個內(nèi)存空
間,所以變更一個數(shù)組的值,另一個數(shù)組變量的值也會變更。
比如:
intnum[]={2,3,5,1};
intnumcopy[]=num;
numcopy[2]=5;
現(xiàn)在,num⑵也變成了5o
假如真的想把一個數(shù)組的全部值都復(fù)制到另一個數(shù)組中,就須要接受
System.arrarycopy。方法:System.arrarycopy(num,0,numcopy,0,
4)o這樣,num和numcopy將指向不同的內(nèi)存空間,numcopy的值的變更,
不會在影響num。有愛好的同學(xué)可以參考幫助文件。
4.4字符串
前面已經(jīng)說過:Java運用java.lang包中的String類來表示字符串,盡管
我們可以用字符數(shù)組來實現(xiàn)類似的功能。關(guān)于類的詳細(xì)學(xué)問,我們下一講將會
講到。由于類是面對對象編程語言最核心的概念,學(xué)習(xí)起來有些難度,我們在
這里先通過String類對類的概念有一個粗略的了解,以使我們下面的學(xué)習(xí)更
順當(dāng)一些。
字符串,顧名思義,就是一串字符。比如:"studentlOO","China"等。用
一對雙引號表示字符串。我們也可以把字符串看成字符數(shù)組(事實上,C就是
把字符串當(dāng)作字符數(shù)組來處理),但是把它視為類更便利一些。為什么?我們
下面立即會看到。
?字符串的聲明、創(chuàng)建
字符串聲明的格式是:String字符串名
比如:Strings;
字符串的創(chuàng)建格式:字符串名=newString(字符串常量)或者字符串
名=字符串常量
比如:s=newString("student");或者:s="student";
聲明和創(chuàng)建可以一步完成,比如:Strings=newString("student");或
者Strings="student";
大家是不是覺得:String這個類的聲明,跟前面我們學(xué)過的基本數(shù)據(jù)類型
的聲明的格式是一樣的,比如:整型的聲明:intn;比較一下:Strings;
事實上,
類型變量名
這種格式是類的聲明的一般格式,你可以把類當(dāng)作基本數(shù)據(jù)類型一樣來聲
明。
另一方面,
變量名=new類名(參數(shù)列表);比如s=newString("student");
這是類的一般創(chuàng)建格式。
yw實用數(shù)程
4.5與字符串有關(guān)的操作
?字符串的長度
length。方法:
Strings="student";
intlen=s.length();
須要指出的是,s.length。這種調(diào)用方法,是面對對象編程語言特有的方法,
我們把s叫做String類的對象,就像intn,我們把n叫做整型變量一樣;把
length。叫做String類的方法。下面我們可以看到,String類的方法,都是通
過對象名?方法名()這種方式調(diào)用的。
?取子串
Strings="IamaChinese";
Stringsubs;
subs=s.substring(7);
?字符串的比較
Stringtom="mynameistom";
Stringjane="mynameisjane";
tom.equals(jane);返回false。表示不相等
tompareTo(jane),返回一個負(fù)整數(shù),因為第一個不相等的字
符t和j相比,t在j的后面;假如返回0,表示相等;假如返回
一個正整數(shù),表示tom和jane第一個不相等的字符,tom的在
jane的前面。
留意,不要用tom==jane推斷兩個字符串是否相等,因為這樣的話比較的
是它們在內(nèi)存中的地址是否相同,而不是我們所希望的比較字符串的內(nèi)容是否
相同。
-字符串連接
Strings="Iam";
Strings2="aChinese";
Strings4,s4;
s4=s+s2;
s4=s+24;
整數(shù)型24將會自動轉(zhuǎn)換為字符串。
?字符串檢索
字符串檢索是指推斷一個字符串是否包含某一個字符或者子字符串,假如
有,返回它的位置,假如沒有,返回一個負(fù)數(shù)。
Strings="IamaChinese";
s.indexOf("Chinese"),返回7;
s.indexOf('a');返回2;
?字符串轉(zhuǎn)換為數(shù)值
假如一個字符串是一串?dāng)?shù)字,可以把它轉(zhuǎn)換成相應(yīng)的數(shù)值。
O轉(zhuǎn)換為整型:
Strings="21";
intx;x=Integer.parselnt(s);
O轉(zhuǎn)換為浮點型
Strings="22.124";
floatf;f=Float.valueOf(s).floatValue();
o當(dāng)然,也可以把整數(shù)或者浮點數(shù)轉(zhuǎn)換為字符串類型:
Strings;
intn=24;
s=String.valueOf(n);
O其他
與字符串有關(guān)的方法還有許多,我們不行能一一講解。前面我們說過,我們
要學(xué)會運用幫助。我們查找關(guān)于String的幫助,就可以看到,有關(guān)于String
的全部方法的詳細(xì)講解。希望同學(xué)們可以學(xué)會運用幫助。
小結(jié)
這一講,我們學(xué)習(xí)了數(shù)組的一些學(xué)問,并通過String類,一方面學(xué)習(xí)了字
符串的運用,另一方面先對類的一些概念和用法,比如類的方法調(diào)用,有了一
些粗略的了解。
數(shù)組是我們經(jīng)常要用到的數(shù)據(jù)結(jié)構(gòu),它是一種導(dǎo)出型的數(shù)據(jù)結(jié)構(gòu),對我們處
理大規(guī)模的數(shù)據(jù),有很大幫助。
前面我們說,用String類表示字符串,比我們自己用字符數(shù)組來做更便利。
因為String類為我們供應(yīng)了許多現(xiàn)成的可以干脆運用的對字符串的操作方法。
比如substring),equals。等方法。假如我們要用字符數(shù)組來完成與
substring類似的功能,就只能自己把子串的每一個字符復(fù)制到另外一個字符
數(shù)組中;與equals。類似的功能,就只能自己一個一個字符地檢查兩個字符船
是否相等。供應(yīng)對自己的成員數(shù)據(jù)的完整的操作方法,也就是把數(shù)據(jù)和對數(shù)據(jù)
的操作封裝起來,是類的最大的好處。假如現(xiàn)在還不能理解這句話,沒關(guān)系,
我們現(xiàn)在只須要知道:運用String類這種方法,特殊便利。
習(xí)題
1.聲明一個數(shù)組,存一個學(xué)生的五門成果。求該學(xué)生總成果、平均成果。
2.將一個數(shù)組中的值按逆序重新存放,例如,原來依次為:9,5,7,4,
8,要求改為:8,4,7,5,90
3.編寫一個應(yīng)用程序,連接兩個字符串:“1am”和“astudent”,并
求出第7個字符是什么?找出"am”在該字符串中的位置,最終把全部
字符都變成大寫字符。
4.統(tǒng)計一個字符串中字母、空格和數(shù)字的個數(shù)。
第五講:類、對象和接口(1)
5.1什么是類
上一講我們運用了一個String類,我們說過:類把一類對象的成員函數(shù)和
方法封裝起來,運用起來很便利。那么,什么是類呢?要理解類,我們先來了
解“對象”的概念,因為類就是用來創(chuàng)建對象的模板,它包含了被創(chuàng)建的對象的
狀態(tài)描述和方法定義。
我們可以把長虹牌電視機(jī)看成是一個對象。我們不必關(guān)切電視機(jī)里面的集成
電路是怎樣的,也不用關(guān)切電視機(jī)的顯像管的工作原理,我們只須要知道電視
機(jī)的遙控器上供應(yīng)了對這臺電視機(jī)的什么操作,比如選臺、調(diào)整色調(diào)、聲音等。
這樣,我們雖然不知道電視機(jī)內(nèi)部是怎么工作的,但我們可以運用這臺電視機(jī)。
聽起來這跟編程沒什么關(guān)系,但面對對象的思想正是與它類似:對象,對外只
供應(yīng)操作該對象的方法,內(nèi)部的實現(xiàn)對外是隱藏的。我們把這種技術(shù)叫做數(shù)據(jù)
隱藏。這樣,程序員不必了解一個對象內(nèi)部是怎么實現(xiàn)的,但可以很便利地運
用這個對象。
類,就是對象的模板。比如,電視機(jī)是一個類,而某一臺電視機(jī)就是這個類
的一個對象,也叫一個實例。
我們前面運用的String類,雖然我們不知道,也不必知道里面的實現(xiàn)微小
環(huán)節(jié),但我們只要知道他的操作方法,就可以很便利地運用它。這樣,對別的
程序員編寫的程序,我們可以很便利地拿來運用,從而提高軟件的復(fù)用程度和
編程的效率。
比如,我們構(gòu)造一個類:TV,然后對外供應(yīng)一些對它的操作方法,選臺
selectChanneK)等。然后用這個類創(chuàng)建一個對象:TVkongKai;然后就可以
這樣操作這臺電視:kongKai.selectChannelo
類的另一個特性,也是它的一個大好處,是繼承。繼承的概念類似于這樣一
種表達(dá):電視是一種電器。假如我們有一個電器類,那么,我們說,電視機(jī)類
繼承了電器類。繼承有什么好處呢?設(shè)想電器類有一些屬性,比如工作電壓,
功率,有些一些方法,比如:打開open(),關(guān)閉:close()。這時候,假如
電視類繼承了電器類,電視類就自動擁有了電器類的這些屬性和方法,而不用
再自己重寫一遍(當(dāng)然,假如想重寫,也可以,我們把這種技術(shù)叫做重載)。
這樣做有什么好處呢?最明顯的好處就是減輕編程的工作量。假設(shè)我們有令一
個類:VCD類,它也繼承了電器類,對于打開關(guān)閉等,同樣不用重新編寫。
好了,既然面對對象的方法有這么多好處,我們下面就來學(xué)習(xí)類和對象的一
些基本學(xué)問。
r?「豈實用教程
5.2一個例子
下面是一個完整的類的例子,我們用這個例子詳細(xì)講解類的一些用法。
classEmployee
(
privateStringname;
privatedoublesalary;
privateinthireYear;
privatestaticStringcompany=newString("IBM");
publicEmployee(Stringn,doubles,intd)
{name=n;
salary=s;
hireYear=d;
t
/
publicvoidprint()
{System.out.println(name+""+salary+""+getHireYear()
+""+getCompanyO);
return;
)
/
publicvoidraiseSalary(doublebyPercent)
{salary*=1+byPercent/100;
publicvoidraiseSalary(intbyAbsolute)
{salary+=byAbsolute;
publicintgetHireYearQ
{returnhireYear;
publicstaticStringgetCompanyO
returncompany;
}
}
為了測試這個類,我們寫了一個測試程序:
packageteach4;
publicclassEmployeeTest
{publicstaticvoidmain(String[]args)
{Employeeemp=newEmployee("TonyTester",38000,
1990);
emp.print();
emp.ra運eSalary(5.0D);
emp.print();
intraise=1000;
emp.ra運eSalary(raise);
emp.print();
5.3類的結(jié)構(gòu)
classEmployee{}表示一個類的聲明,其中,class是關(guān)鍵字,Employee
是類名。在一對大括號中的內(nèi)容,我們叫做類體,是這個類的實現(xiàn)部分。
前面我們說過,類把數(shù)據(jù)和在數(shù)據(jù)上的操作方法封裝起來,所以,類體中有
兩部分,一部分是數(shù)據(jù),另一部分是方法。
數(shù)據(jù)部分是:
privateStringname;
privatedoublesalary;
privateinthireDay;
分別是String類型的name,代表該員工的姓名,double類型的salary,
代表該員工的薪水;int類型的hireDay,代表該員工的雇傭年份。
private是一個關(guān)鍵字,是私有的意思,表明這些數(shù)據(jù),只能被類里面的方
法訪問,外部程序是不能干脆訪問這些數(shù)據(jù)的。這正是類的一個好處:對外隱
藏數(shù)據(jù)。我們建議,始終保持?jǐn)?shù)據(jù)的私用,也就是始終用private來修飾數(shù)據(jù),
來是我們的程序更平安。
這個類的方法部分是:
publicEmployee(Stringn,doubles,Dayd)
publicvoidprint()
publicvoidraiseSalary(doublebyPercent)
publicvoidraiseSalary(intbyAbsolute)
publicintgetHireYear()
publicstaticStringgetCompanyO
所謂方法,就是對數(shù)據(jù)的操作,有過C編程時間的同學(xué),可以把它理解為
函數(shù),只是這些函數(shù)是放在類里并對類的數(shù)據(jù)進(jìn)行操作的。比如這個方法:
publicvoidraiseSalary(doublebyPercent)就是對數(shù)據(jù)salary的操作。
public是一個關(guān)鍵字,是公有的意思,表明該方法可以用對象名?方法名的
方式調(diào)用。比如我們的測試程序中:emp.raiseSalary(5.0D),就是對這個方法
的調(diào)用。否則,假如是private,該方法就只能被類里的方法調(diào)用,像
emp.raiseSalary(5.0D)這種調(diào)用是非法的。
void表明方法的返回類型為空,也就是什么都不返回。publicint
getHireYear。這個方法的返回類型是int。一般來說,返回類型這部分是不能
缺少的,即使方法什么都不返回,也要用一個void關(guān)鍵字修飾。有一個例外:
構(gòu)造函數(shù)。我們后面會講到。
raiseSalary(doublebyPercent)是方法名,前面我們已經(jīng)說過方法的命名
規(guī)則,第一個單詞小寫,以后沒個單詞首字母大寫。這樣可以增加可讀性,依
據(jù)raiseSalary這個名字就可以知道這個方法的功能是漲工資。括號里是參數(shù)
列表,類似于我們前面學(xué)過的變量的聲明。假如有多個參數(shù),用逗號隔開,比
如Employee(Stringn,doubles,intd)o
方法的一對大括號里是方法的實現(xiàn),就是我們前面學(xué)過的語句的組合。比如
print()方法,是打印出該員工的姓名工資等信息;raiseSalary()方法是依據(jù)
參數(shù),把員工工資漲相應(yīng)的比例。留意,假如方法有返回類型且不為void,那
么在方法的實現(xiàn)中必需有retum語句,返回相應(yīng)的類型。比如hireYear()方
法,就有return子句。相反,假如返回類型是void,那么不能返回任何數(shù)據(jù),
但可以是一個return語句,后面不帶返回值,比如print()方法里就有一個空
的return語句。
5.4構(gòu)造方法
我們留意到,有一個方法是與類名同名的,而且沒有返回類型,比如這個例
子中的publicEmployee(Stringn,doubles,intd),我們把它叫做構(gòu)造方
法。構(gòu)造方法是做什么用的呢?構(gòu)造方法是在聲明對象的時候,自動調(diào)用的方
法,其作用是為對象的數(shù)據(jù)做一些必要的初始化工作。比如,這里的public
Employee(Stringn,doubles,intd)方法,就是初始化這個員工的姓名,工
資和雇傭年份。在聲明emp對象的時候,調(diào)用的就是構(gòu)造函數(shù)。
Employeeemp=newEmployee("Tony",10000,1990);
假如沒有定義構(gòu)造函數(shù),Java會自動供應(yīng)一個默認(rèn)的構(gòu)造函數(shù),把全部成
員數(shù)據(jù)初始化為默認(rèn)值,比如數(shù)字類型(包括整型、浮點型)將是。,布爾類
型將是false等。留意在沒有構(gòu)造方法時,new后面的()中不能有數(shù)字?。?/p>
須要留意的是,與構(gòu)造函數(shù)相對的是析構(gòu)函數(shù),目的是在對象不再運用的時
候回收對象運用的內(nèi)存。C++里就支持析構(gòu)函數(shù)。但是,由于Java供應(yīng)自動
回收"垃圾”的機(jī)制,所以不須要進(jìn)行內(nèi)存回收,所以Java沒有析構(gòu)函數(shù)。
整>,實用數(shù)程V
5.5方法的重載
方法的名字相同但參數(shù)的類型或個數(shù)不同,我們叫做方法的重載。
類允許有相同名字的方法,比如我們這個例子中的raiseSalary方法。
publicvoidraiseSalary(doublebyPercent)
publicvoidraiseSalary(intbyAbsolute)
第一個的參數(shù)是double型,表明工資上漲的百分比;其次個的參數(shù)使int
型,表明工資上漲的數(shù)額。這兩個方法參數(shù)不同。調(diào)用的時候,依據(jù)參數(shù)的不
同,確定運用哪一個方法。比如,我們的例子中,emp.raiseSalary(5.0D)的
參數(shù)是double型,所以將會調(diào)用第一個,工資上漲5%,
emp.raiseSalary(rai^se)的參數(shù)rai^se是一個int型,所以將會調(diào)用其次個,
是工資上漲1000元。
方法的重載的好處是使我們的程序處理更便利。比如,我們的例子中,漲工
資,我們供應(yīng)了統(tǒng)一的ra運eSalary()方法,我們不用自己推斷漲的是百分比
還是確定數(shù)額,由程序自己推斷,是程序更好用,可讀性更強(qiáng)。
整>,實用數(shù)程V
5.6靜態(tài)方法和靜態(tài)成員變量
所謂靜態(tài)方法和靜態(tài)成員變量,是指那些用static關(guān)鍵字修飾的方法或者
變量,比如我們例子中的privatestaticStringcompany就是一個靜態(tài)成員
變量,而publicstaticStringgetCompany。和publicstaticvoid
setCompany(Strings)都是靜態(tài)方法。
靜態(tài)的意思,是指該方法或者變量在整個類中只有一份。我們說,類是用來
創(chuàng)建對象的模板,就是說,我們創(chuàng)建對象的時候,每個對象都會有類中所聲明
的成員變量的一個副本。但是,對于靜態(tài)成員變量,在內(nèi)存中只有一個副本,
全部的對象將共享這個副本。比如我們的例子中,全部Employee所在的公司
就只有一個,所以我們沒有必要為每一個Employee的對象都保留一個
company的副本,所以我們把它聲明為靜態(tài)的成員變量。比如我們例子中有
兩個Employee類的對象:emp和emp2,他們的成員變量內(nèi)存模式如下圖
所示:
所以,只要變更了company的值,對全部Employee的對象都是起作用
的。
另一方面,靜態(tài)方法只能訪問靜態(tài)成員變量,比如我們的例子中,
setCompany()只能訪問company,假如它訪問name之類的變量,編譯器
將會報錯。而且靜態(tài)方法的調(diào)用是類名?方法名的方式來調(diào)用的,也可以用一
般的對象名?方法名的方式來調(diào)用。
事實上,我們從前用的System.out.println()方法,就是一個靜態(tài)的方法,
所以我們可以干脆用類名?方法名的方式調(diào)用。而一個類里假如有main函數(shù)
都要聲明為靜態(tài)方法,因為一個程序只能有一個main函數(shù)入口。
小結(jié)
這一講我們學(xué)習(xí)了類和對象的一些基本概念和學(xué)問,包括類的結(jié)構(gòu),構(gòu)造方
法,方法的重載,靜態(tài)方法和靜態(tài)成員變量。類和對象,是面對對象編程語
言的最重要的特征,也是精髓所在。希望大家努力駕馭好這部分學(xué)問。下一講,
我們接著學(xué)習(xí)Java的繼承、接口等概念。
習(xí)題
1.類的成員變量和局部變量有什么區(qū)分?從內(nèi)存考慮。
2.編個程序檢驗一下public方法和private方法有什么區(qū)分。
3.編一個程序檢驗靜態(tài)方法和靜態(tài)成員變量的用法。
4.在我們的例子中再重載raiseSalary。方法,按工齡漲工資,比如,假如
工齡為5年,那么增長1%*5;
第六講類、對象和接口(2)
6.1類的繼承
繼承是類的另一個特性。繼承的意義在于:我們重復(fù)運用或更改現(xiàn)成的類的
方法,也可以加入新的數(shù)據(jù)成員以與新的方法,以滿足新環(huán)境的須要。這種技
術(shù)是全部面對對象的編程語言的一個基本特征。
讓我們來看一個例子:前面我們定義了一個Employee類,這只是一般員
工,現(xiàn)在我們要定義一個經(jīng)理類。經(jīng)理也是員工的一種,所以Employee類中
的數(shù)據(jù)和方法他也應(yīng)當(dāng)有;但經(jīng)理又不同于一般員工,經(jīng)理有秘書,而且漲工
資的時候還要加上分紅。怎么辦?我們要不要從頭起先寫一個經(jīng)理類?
有了繼承的技術(shù),我們可以在Employee類的基礎(chǔ)上,編寫我們的Manager
類。程序如下:
packageteach4;
importjava.util.Date;
classManagerextendsEmployee
t
privateStringsecretaryName;
publicManager(Stringn,doubles,intd)
{super(n,s,d);必需在構(gòu)造方法的第一個語句。
secretaryName=
}
publicvoidraiseSalary(doublebyPercent)
{//add1/2%bonusforeveryyearofservice
Datetoday=newDate(2023,l,1);
doublebonus=0.5*(today.getYear()-getHireYear());
super.raiseSalary(byPercent+bonus);
publicvoidsetSecretaryName(Stringn)
{secretaryName=n;
publicStringgetSecretaryName()
{returnsecretaryName;
}
}
我們以這個例子為例,學(xué)習(xí)繼承的用法。
首先,請留意這個類的頭部有些不同:classManagerextendsEmployee;
其中,關(guān)鍵字extends是擴(kuò)展的意思,表明Manager類是從Employee類繼
承而來。我們把Employee叫做父類或者超類,把Manager叫做子類或者衍
生類。一般來說,子類比父類有更多的功能。
Manager的構(gòu)造方法中有個語句:super(n,s,d),super是一個關(guān)鍵字,
意思是調(diào)用父類的方法,在這里是父類,也就是Employee的構(gòu)造方法;類似
地,super.raiseSalary(byPercent+bonus)表示調(diào)用父類Employee的
raiseSalary方法。所以,假如要在子類中調(diào)用父類的方法,運用super。
Manage的構(gòu)造方法調(diào)用了Employee的構(gòu)造方法。事實上,一般要求子類用
super語句調(diào)用父類的構(gòu)造方法并附上恰當(dāng)?shù)膮?shù)。假如沒有用super調(diào)用,
將默認(rèn)地調(diào)用父類的默認(rèn)構(gòu)造方法,這時,假如父類沒有沒有默認(rèn)的構(gòu)造方法,
編譯器將報錯。在子類的構(gòu)造方法中,假如有super語句,要求super語句
在第一行。
子類自動擁有父類的標(biāo)記為public的成員變量和方法,比如:雖然我們在
Manager類中沒有定義print()方法,但是boss.print。是合法的,因為print()
是Employee類的一個方法。假如希望變更父類中的方法,使之適合子類,我
們也可以覆蓋它。比如,因為經(jīng)理的提薪方式是:除了上漲百分比,還要加上
工齡*0.5的獎金,與一般員工的提薪方式就有不同。所以,我們要覆蓋掉這個
方法。事實上,只要重寫這個方法就可以了。boss.raiseSalary(l.O),將自動
調(diào)用Manager類里定義的raiseSalaryO方法,而不是Employeee里的方法。
但是,假如是私有的成員變量或者方法,也就是用private關(guān)鍵字修飾的那
些,那么子類是不能訪問的。假如希望子類能訪問而別的類不能訪問,我們可
以用protected關(guān)鍵字,比如:protectedStringname;這樣,name對于
Manager來說是可以可見和可訪問的,而對于不是Employee的子類的其他
類,則是不能訪問的。
總結(jié)一下訪問權(quán)限關(guān)鍵字:
?public:對全世界來說都是可見的;
?private:僅對類來說是可見的;
?protected:對全部子類和同一個包(package)來說是可見的;
?不聲明:假如這三個關(guān)鍵字都沒有,那么默認(rèn)為對整個包可見。
Manager類里定義的setSecretaryName。和getSecretaryName。方法,
都只能為Manager類的對象調(diào)用,Employee類的對象是不能調(diào)用這兩個方
法的。
繼承可以是幾層的。比如,我們可以以Manager為父類,再衍生出
Executive類來。我們也可以從Employee類衍生出Programmer類來,它
與Manager類沒有什么關(guān)系。假如希望防止別人從自己編寫的一個類中衍生
出另一個類,可以加上關(guān)鍵字final,比如,不希望從Manager類中再衍生出
別的類,我們可以把Manager類的聲明改為:finalclassManagerextends
Employeeo這樣可以提高程序的平安性,但可擴(kuò)展性會受到影響。
我們可以畫出類的繼承結(jié)構(gòu)如下:
6.2造型
也叫強(qiáng)制類型轉(zhuǎn)換?;貞浺幌拢覀冊谄浯沃v的Java的基本語法中,說到
基本數(shù)據(jù)類型的強(qiáng)制類型轉(zhuǎn)換,可以把一個浮點數(shù)強(qiáng)制轉(zhuǎn)換為整型,比如:
doublex=3.14;intnx=(int)x;這樣,x=3,把小數(shù)部分丟掉了。我們同樣可
以把類強(qiáng)制轉(zhuǎn)換為另一個類。但不是什么時候都可以轉(zhuǎn)換的,只有在繼承結(jié)構(gòu)
圖內(nèi)部,才能進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
比如:Managerboss;Employeeemp;下面這個語句:emp=boss,相
當(dāng)于emp=(Employee)boss;因為emp是Employee類型的,而boss是
Manager類型的,但是,這時候,emp將不能調(diào)用Manager類的方法,比
如getSecretaryName。,假如要調(diào)用,必需把emp轉(zhuǎn)換回來。比如:Manager
manager;manager=(Manager)emp;這樣,manager就可以調(diào)用
getSecretaryName。了。只允許子類轉(zhuǎn)換成父類的調(diào)用父類的方法不允許調(diào)過
來。
但是,假如一個對象的確是Employee類型,現(xiàn)在要把它轉(zhuǎn)換為Manager
類型而且試圖訪問Manager的方法,編譯將會通過,但是運行時將會出現(xiàn)異
樣,程序?qū)⒅兄惯\行。
6.3接口
前面我們介紹Java的特點的時候說過,Java不允許多重繼承,即一個類
不允許有多個父類,至多只能有一個父類。在Java中,取代多重繼承的技術(shù)
是接口。Java是用接口技術(shù)的緣由,是因為多重繼承要么使編譯器特殊困難,
要么效率不高。
那么,接口是什么呢?我們可以把接口理解為一個描述框架,里面定義了一
些方法,但并不實現(xiàn)這些方法,而是由繼承這個接口的類來實現(xiàn)。這樣,假如
某一個類繼承了一個接口,意思是說:這個類實現(xiàn)了接口所定義的全部方法。
比如,Java的標(biāo)準(zhǔn)庫里定義了一個名為Comparable的接口。只要某個類
是可對比的,就可以繼承并實現(xiàn)這個接口。數(shù)字型和字符串型都是可比的,所
以String,Float,Integer,Double等類都繼承并實現(xiàn)了這個接口。假如我們
定義我們的例子中的Employee類業(yè)是可比的,以進(jìn)公司的年份來比較,那么
我們也可以繼承這個類,并實現(xiàn)它。
留意,假如繼承了一個接口,就必需實現(xiàn)這個接口所聲明的全部方法。
r?”?實用教程
6.4this對象引用
有時會有這種狀況,想全面地訪問當(dāng)前的對象,而不是某一個特殊的實例變
量。This關(guān)鍵字引用方法所運作的那個對象。
比如,我們可能經(jīng)常會遇到這樣的構(gòu)造方法:this。。這個方法會調(diào)用這個
類中的另一個構(gòu)造方法。我們來看看程序示例。
1
6.5類的包裝和引入
package和import語句
包(Package)由一組類(class)和接口(interface)組成。它是管理大型名字空
間,避開名字沖突的工具。每一個類和接口的名字都包含在某個包中。依據(jù)一
般的習(xí)慣,它的名字是由號分隔的單詞構(gòu)成,第一個單詞通常是開發(fā)這個包
的組織的名稱。
定義一個包由package語句定義。假如運用package語句,編譯單元的第
一行必需無空格,也無注釋。其格式如下:packagepackageName;若編譯單
元無package語句,則該單元被置于一個缺省的無名的包中。即:假如源文
件中定義的類在放在同一個包中,但該包沒出名字。
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45211.7-2025小麥抗病蟲性評價技術(shù)規(guī)程第7部分:蚜蟲
- 聯(lián)合體施工合同協(xié)議書
- 行政單位租車協(xié)議
- 出資轉(zhuǎn)讓協(xié)議經(jīng)典
- 股份合作細(xì)節(jié)文書與權(quán)益分配方案
- 鋼材購銷合同格式
- 年度工作總結(jié)報告及未來規(guī)劃
- 物流企業(yè)信息化升級改造服務(wù)協(xié)議
- 文化藝術(shù)品展覽銷售協(xié)議
- 江蘇省房屋買賣合同
- 2025年業(yè)務(wù)員工作總結(jié)及工作計劃模版(3篇)
- 2024年連云港市贛榆區(qū)區(qū)屬國企對外招聘筆試真題
- 海南省??谑?024-2025學(xué)年八年級上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- 2025年注射用賴氮匹林項目可行性研究報告
- 2025江西吉安市新廬陵投資發(fā)展限公司招聘11人高頻重點提升(共500題)附帶答案詳解
- 17J008擋土墻(重力式、衡重式、懸臂式)圖示圖集
- 2025年山東出版集團(tuán)招聘筆試參考題庫含答案解析
- 自動化生產(chǎn)線運行與維護(hù)完整版課件(全)
- 食品經(jīng)營操作流程圖
- 小學(xué)生必背古詩詞80首硬筆書法字帖
- 中風(fēng)(腦梗死恢復(fù)期)中醫(yī)護(hù)理方案(課堂PPT)
評論
0/150
提交評論