版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章類與對(duì)象導(dǎo)讀主要內(nèi)容類構(gòu)造方法與對(duì)象的創(chuàng)建類與程序的基本結(jié)構(gòu)參數(shù)傳值對(duì)象的組合實(shí)例成員與類成員方法重載this關(guān)鍵字包import語(yǔ)句對(duì)象數(shù)組重點(diǎn)和難點(diǎn)Java類的語(yǔ)法規(guī)則、類變量和實(shí)例變量、import語(yǔ)句對(duì)象的創(chuàng)建過(guò)程,對(duì)象引用與實(shí)體的關(guān)系、訪問(wèn)權(quán)限的理解
§4.1編程語(yǔ)言的幾個(gè)發(fā)展階段4.1.1面向機(jī)器語(yǔ)言
計(jì)算機(jī)處理信息的早期語(yǔ)言是所謂的機(jī)器語(yǔ)言,使用機(jī)器語(yǔ)言進(jìn)行程序設(shè)計(jì)需要面向機(jī)器來(lái)編寫(xiě)代碼,即需要針對(duì)不同的機(jī)器編寫(xiě)諸如01011100這樣的指令序列。
4.1.2面向過(guò)程語(yǔ)言
隨著計(jì)算機(jī)硬件功能的提高,在20世紀(jì)60年代出現(xiàn)了面向過(guò)程設(shè)計(jì)語(yǔ)言,如C語(yǔ)言等。用這些語(yǔ)言編程也稱為面向過(guò)程編程。語(yǔ)言把代碼組成叫做過(guò)程或函數(shù)的塊。每個(gè)塊的目標(biāo)是完成某個(gè)任務(wù)。使用這些語(yǔ)言編寫(xiě)代碼指令時(shí),不必再去考慮機(jī)器指令的細(xì)節(jié),只要按著具體語(yǔ)言的語(yǔ)法要求去編寫(xiě)“源文件”。4.1.3面向?qū)ο笳Z(yǔ)言
基于對(duì)象的編程更加符合人的思維模式,使得編程人員更容易編寫(xiě)出易維護(hù)、易擴(kuò)展和易復(fù)用的程序代碼,更重要的是,面向?qū)ο缶幊坦膭?lì)創(chuàng)造性的程序設(shè)計(jì)。面向?qū)ο缶幊讨饕w現(xiàn)下列三個(gè)特性:封裝性;繼承;多態(tài)理念的改變C語(yǔ)言中的函數(shù),代碼塊是程序執(zhí)行時(shí)產(chǎn)生的一種行為,但是面向過(guò)程語(yǔ)言卻沒(méi)有為這種行為指定“主體”,即在程序運(yùn)行期間,無(wú)法說(shuō)明到底是“誰(shuí)”具有這個(gè)行為、并負(fù)責(zé)執(zhí)行了這個(gè)行為。也就是說(shuō),面向過(guò)程語(yǔ)言缺少了一個(gè)最本質(zhì)的概念,那就是“對(duì)象”(就好像生活中說(shuō)話沒(méi)主語(yǔ))在面向?qū)ο笳Z(yǔ)言中,最核心的內(nèi)容就是“對(duì)象”,一切圍繞著對(duì)象,比如,編寫(xiě)一個(gè)“剎車”方法(面向過(guò)程稱之為函數(shù)),那么一定會(huì)指定該方法的“主體”,比如,某個(gè)汽車擁有這樣的“剎車”方法,則該汽車負(fù)責(zé)執(zhí)行“剎車”方法產(chǎn)生相應(yīng)的行為(說(shuō)話有主語(yǔ):奔馳車剎車了)。學(xué)習(xí)面向?qū)ο笳Z(yǔ)言的過(guò)程中,一個(gè)簡(jiǎn)單的理念就是:需要完成某種任務(wù)時(shí),首先要想到,誰(shuí)去完成任務(wù),即哪個(gè)對(duì)象去完成任務(wù);提到數(shù)據(jù),首先想到這個(gè)數(shù)據(jù)是哪個(gè)對(duì)象的。§4.2類Java語(yǔ)言是面向?qū)ο笳Z(yǔ)言,它的源程序是由若干個(gè)類組成,源文件是擴(kuò)展名為.java的文本文件。類是Java語(yǔ)言中最重要的“數(shù)據(jù)類型”,類聲明的變量被稱作對(duì)象(見(jiàn)后面的4.3節(jié)),即類是用來(lái)創(chuàng)建對(duì)象的模板。類的實(shí)現(xiàn)包括兩部分:類聲明和類體。基本格式為:class類名{類體的內(nèi)容}
其中:class是關(guān)鍵字,用來(lái)定義類?!癱lass類名”是類的聲明部分,類名必須是合法的Java標(biāo)識(shí)符。兩個(gè)大括號(hào)以及之間的內(nèi)容是類體?!?.2.1類聲明寫(xiě)類的目的是為了描述一類事物共有的屬性和功能。類聲明:class類名以下是兩個(gè)類聲明的例子。
classPeople{…
}class植物{…}如:classPeople”和“class植物”稱作類聲明;“People”和“動(dòng)物”分別是類名。給類命名時(shí),遵守下列編程風(fēng)格(這不是語(yǔ)法要求,但應(yīng)當(dāng)遵守):1.如果類名使用拉丁字母,那么名字的首字母使用大寫(xiě)字母。2.類名最好容易識(shí)別、見(jiàn)名知意。當(dāng)類名由幾個(gè)“單詞”復(fù)合而成時(shí),每個(gè)單詞的首字母使用大寫(xiě)。
§4.2.2類體類聲明之后的一對(duì)大括號(hào)“{”,“}”以及它們之間的內(nèi)容稱作類體,大括號(hào)之間的內(nèi)容稱作類體的內(nèi)容。類體的內(nèi)容由兩部分構(gòu):一部分是變量的聲明,用來(lái)刻畫(huà)屬性;另一部分是方法的定義,用來(lái)刻畫(huà)行為功能。classLadder{
floatabove;//梯形的上底(變量聲明)
floatbottom;//梯形的下底(變量聲明)floatheight;//梯形的高(變量聲明)
floatarea;//梯形的面積(變量聲明)
floatcomputerArea(){//計(jì)算面積(方法)
area=(above+bottom)*height/2.0f;returnarea;}voidsetHeight(floath){//修改高(方法)
height=h;}}§4.2.3成員變量類體中的內(nèi)容可分為兩部分:一部分是變量的聲明;另一部分是方法的定義。聲明變量部分所聲明的變量被稱為成員變量或域變量。①成員變量的類型可以是Java中的任何一種數(shù)據(jù)類型,包括基本類型:整型、浮點(diǎn)型、字符型、邏輯類型;引用類型:數(shù)組、對(duì)象和接口。②成員變量在整個(gè)類內(nèi)的所有方法里都有效,其有效性與它在類體中出現(xiàn)
的位置
無(wú)關(guān)。③聲明成員變量時(shí)如果沒(méi)有指定初始值,Java編譯器會(huì)為其指定默認(rèn)值。④聲明成員變量bottom指定的初始值和above的值有關(guān),那么聲明成員變量above的位置要在聲明成員變量bottom的前面。例題定義梯形類如下:classLader{floatabove,area;floatcomputerArea(){area=(above+bottom)*height/2;returnarea;}
floatbottom;voidsetHeight(floath){height=h;
}
floatheight;}§4.2.4方法方法的定義包括兩部分:方法聲明和方法體.一般格式為:
方法聲明部分{
方法體的內(nèi)容}1.方法聲明部分(方法頭)方法頭由方法的類型、名稱和名稱之后的一對(duì)小括號(hào)以及其中的參數(shù)列表所構(gòu)成。例如:intspeak(){//無(wú)參數(shù)的方法頭return23;}intadd(intx,inty,intz)//有參數(shù)的方法頭{returnx+y+z;}注意:方法返回的數(shù)據(jù)類型可以是Java中的任何數(shù)據(jù)類型之一,當(dāng)一個(gè)方法(非構(gòu)造方法,見(jiàn)后續(xù))不需要返回?cái)?shù)據(jù)時(shí),返回類型必須是void。§4.2.4方法2.方法體方法聲明之后的一對(duì)大括號(hào)“{”,“}”以及之間的內(nèi)容稱為方法的方法體.方法體的內(nèi)容包括局部變量的聲明和Java語(yǔ)句。如:intgetSum(intn){//參數(shù)變量n是局部變量
intsum=0;//聲明局部變量sumfor(inti=1;i<=n;i++){//for循環(huán)語(yǔ)句
sum=sum+i;}returnsum;//return語(yǔ)句}和類的成員變量不同的是,局部變量只在方法內(nèi)有效,而且與其聲明的位置有關(guān)。方法的參數(shù)在整個(gè)方法內(nèi)有效,方法內(nèi)的局部變量從聲明它的位置之后開(kāi)始有效。如果局部變量的聲明是在一個(gè)復(fù)合語(yǔ)句中,那么該局部變量的有效范圍是該復(fù)合語(yǔ)句。如果局部變量的聲明是在一個(gè)循環(huán)語(yǔ)句中,那么該局部變量的有效范圍是該循環(huán)語(yǔ)句。請(qǐng)看下例:3.區(qū)分成員變量和局部變量
如果局部變量的名字與成員變量的名字相同,則成員變量被隱藏,即該成員變量在這個(gè)方法內(nèi)暫時(shí)失效。例如:如果想在該方法中使用被隱藏的成員變量,必須使用關(guān)鍵字this(在4.9節(jié)this關(guān)鍵字)
classTom{intx=10,y;voidf(){intx=5;y=x+this.x;//y得到的值是15}}classTom{
intx=10,y;voidf(){
intx=5;y=x+x;//y得到的值是10,不是20。
//如果方法f中沒(méi)有“intx=5;”,y的值將是20}}4.局部變量沒(méi)有默認(rèn)值
成員變量有默認(rèn)值(見(jiàn)4.2.3節(jié)),但局部變量沒(méi)有默認(rèn)值,因此在使用局部變量之前,必須保證局部變量有具體的值。例如:下列InitError類無(wú)法通過(guò)編譯。例如:classInitError{intx=10,y;//y的默認(rèn)值是0
voidf(){
intm;//m沒(méi)有默認(rèn)值,但編譯無(wú)錯(cuò)誤
x=y+m;//無(wú)法通過(guò)編譯,因?yàn)樵谑褂胢之前未指定m的值}}
例題publicclassA{voidf(){intm=10,sum=0;//成員變量,在整個(gè)類中有效
if(m>9){intz=10;//z僅僅在該復(fù)合語(yǔ)句中有效
z=2*m+z;}for(inti=0;i<m;i++){sum=sum+i;//i僅僅在該循環(huán)語(yǔ)句中有效
}m=sum;//合法,因?yàn)閙和sum有效
z=i+sum;//非法,因?yàn)閕和z已無(wú)效
}}§4.2.5需要注意的問(wèn)題類體的內(nèi)容由兩部分構(gòu)成:一部分是變量的聲明,另一部分是方法的定義。定義類需要注意的地方:對(duì)成員變量的操作只能放在方法中,方法可以對(duì)成員變量和該方法體中聲明的局部變量進(jìn)行操作。在聲明成員變量時(shí)可以同時(shí)賦予初值,但是不可以在類體中有單獨(dú)的賦值語(yǔ)句,但局部變量必須賦初值。
classA{inta=12;//聲明成員變量并指定初始值12intb;//聲明成員變量默認(rèn)初始值0b=12;//錯(cuò)誤,這是語(yǔ)句}§4.2.6類的UML圖UML(UnifiedModelingLanguageDiagram)是被用于描述一個(gè)系統(tǒng)的靜態(tài)結(jié)構(gòu)。一個(gè)UML中通常包含有類(Class)的UML圖,接口(Interface)的UML圖以及泛化關(guān)系(Generalization)的UML圖、關(guān)聯(lián)關(guān)系(Association)的UML圖、依賴關(guān)系(Dependency)的UML圖和實(shí)現(xiàn)關(guān)系(Realization)的UML圖。在類的UML圖中,使用一個(gè)長(zhǎng)方形描述一個(gè)類的主要構(gòu)成,將長(zhǎng)方形垂直地分為三層。第1層是名字層;第2層是變量層,也稱屬性層;第3層是方法層,也稱操作層。Laderabove:floatbottom:floatheight:floatcomputer():floatsetHeight(float):float§4.3構(gòu)造方法與對(duì)象的創(chuàng)建類是面向?qū)ο笳Z(yǔ)言中最重要的一種數(shù)據(jù)類型,那么就可以用它來(lái)聲明變量。在面向?qū)ο笳Z(yǔ)言中,用類聲明的變量被稱作對(duì)象。和基本數(shù)據(jù)類型不同,在用類聲明對(duì)象后,還必須要?jiǎng)?chuàng)建對(duì)象,即為聲明的對(duì)象分配變量(確定對(duì)象所具有的屬性),當(dāng)使用一個(gè)類創(chuàng)建一個(gè)對(duì)象時(shí),也稱給出了這個(gè)類的一個(gè)實(shí)例。通俗的講,類是創(chuàng)建對(duì)象的“模板”,沒(méi)有類就沒(méi)有對(duì)象。構(gòu)造方法和對(duì)象的創(chuàng)建密切相關(guān)?!?.3.1構(gòu)造方法
構(gòu)造方法:構(gòu)造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒(méi)有類型。允許一個(gè)類中編寫(xiě)若干個(gè)構(gòu)造方法,但必須保證他們的參數(shù)不同,即參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同。構(gòu)造方法的作用是在創(chuàng)建對(duì)象時(shí)使用,主要是用來(lái)初始化各個(gè)成員變量,以便給類所創(chuàng)建的對(duì)象一個(gè)合理的初始狀態(tài)。需要注意的是如果類中沒(méi)有編寫(xiě)構(gòu)造方法,系統(tǒng)會(huì)默認(rèn)該類只有一個(gè)構(gòu)造方法,該默認(rèn)的構(gòu)造方法是無(wú)參數(shù)的,且方法體中沒(méi)有語(yǔ)句。如果類里定義了一個(gè)或多個(gè)構(gòu)造方法,那么Java不提供默認(rèn)的構(gòu)造方法。需要特別注意的是,構(gòu)造方法沒(méi)有類型。構(gòu)造函數(shù)例題?
默認(rèn)構(gòu)造方法與自定義構(gòu)造方法如果類中定義了一個(gè)或多個(gè)構(gòu)造方法,那么Java不提供默認(rèn)的構(gòu)造方法。例如,下列Point類只有一個(gè)構(gòu)造方法(默認(rèn)的,不用寫(xiě)出):classPoint{intx,y;}下列Point類有只兩個(gè)構(gòu)造方法(自定義的):classPoint{intxy//是構(gòu)造方法
,該方法的無(wú)類型:Point{x=1;y=1;}//是構(gòu)造方法,
該方法的無(wú)類型:Point(intaintb)x=a;y=b;}}構(gòu)造函數(shù)例題?
構(gòu)造方法沒(méi)有類型需要特別注意的是,構(gòu)造方法沒(méi)有類型。例如,下列Point類中只有一個(gè)構(gòu)造方法,其中的voidPoint(inta,intb)和intPoint()都不是構(gòu)造方法。classPointintx,y;//是自定義的構(gòu)造方法
,該方法無(wú)類型Point(){x=1;y=1;}//不是構(gòu)造方法
該方法的類型是void:voidPoint(intaintb)x=a;y=b;}//不是構(gòu)造方法
該方法的類型是intintPoint(){return12;}§4.3.2創(chuàng)建對(duì)象創(chuàng)建一個(gè)對(duì)象包括對(duì)象的聲明和為對(duì)象分配變量?jī)蓚€(gè)步驟。1.對(duì)象的聲明
一般格式為:類的名字對(duì)象名字;
如:XiyoujiRenwuzhubajie;2.為聲明的對(duì)象分配變量使用new運(yùn)算符和類的構(gòu)造方法為聲明的對(duì)象分配變量,并返回一個(gè)引用值給對(duì)象名稱。即創(chuàng)建對(duì)象。如果類中沒(méi)有構(gòu)造方法,系統(tǒng)會(huì)調(diào)用默認(rèn)的構(gòu)造方法,默認(rèn)的構(gòu)造方法是無(wú)參數(shù)的,且方法體中沒(méi)有語(yǔ)句。例如:zhubajie=newXiyoujiRenwu();以下是兩個(gè)例子。例子1
例子2當(dāng)用類創(chuàng)建一個(gè)對(duì)象時(shí),類中的成員變量被分配內(nèi)存空間,這些內(nèi)存空間稱作該對(duì)象的實(shí)體或?qū)ο蟮淖兞?,而?duì)象中存放著引用值。3.對(duì)象的內(nèi)存模型通過(guò)對(duì)象的聲明和分配內(nèi)存后,每個(gè)對(duì)象都對(duì)應(yīng)兩個(gè)值:引用值和實(shí)體值。(1)聲明對(duì)象時(shí)的內(nèi)存模型
(2)對(duì)象分配變量后的內(nèi)存模型分析:當(dāng)系統(tǒng)見(jiàn)到:zhubajie=newXiyoujiRenwu();
系統(tǒng)會(huì)使用new運(yùn)算符為變量height,weight,head,ear等分配內(nèi)存,將返回一個(gè)引用值給對(duì)象變量zhubajie。同時(shí)調(diào)用構(gòu)造函數(shù)為各個(gè)變量初始化。結(jié)論:每個(gè)對(duì)象都有屬于自己的空間;即都有屬于自己的變量,也叫實(shí)體;但有時(shí)也有大家共有的變量(見(jiàn)后續(xù)4.7知識(shí)點(diǎn))。此時(shí)引用值為null此時(shí)引用值和實(shí)體值都不為空3.對(duì)象的內(nèi)存模型(3)創(chuàng)建多個(gè)不同的對(duì)象一個(gè)類通過(guò)使用new運(yùn)算符可以創(chuàng)建多個(gè)不同的對(duì)象。例如創(chuàng)建兩個(gè)對(duì)象:zhubajie、sunwukong 如:zhubajie=newXiyoujiRenwu(); sunwukong=newXiyoujiRenwu分析:創(chuàng)建對(duì)象zhubajie時(shí),XiyoujiRenwu類中的成員變量height,weight,head,ear被分配內(nèi)存空間,并返回一個(gè)引用給zhubajie;當(dāng)再創(chuàng)建一個(gè)對(duì)象sunwukong時(shí),XiyoujiRenwu類中的成員變量height,weight,head,ear再一次被分配內(nèi)存空間,并返回一個(gè)引用給sunwukong。sunwukong的變量所占據(jù)的內(nèi)存空間和zhubajie的變量所占據(jù)的內(nèi)存空間是互不相同的位置。內(nèi)存模型如下圖4.5所示:
§4.3.3使用對(duì)象對(duì)象創(chuàng)建成功后,可以操作類中的變量和方法:1.對(duì)象操作自己的變量(體現(xiàn)對(duì)象的屬性)通過(guò)使用運(yùn)算符“.”對(duì)象操作自己的變量(對(duì)象的屬性)。
2.對(duì)象調(diào)用類中的方法(體現(xiàn)對(duì)象的行為)
對(duì)象創(chuàng)建之后,可以使用點(diǎn)運(yùn)算符“.”調(diào)用創(chuàng)建它的類中的方法,從而產(chǎn)生一定的行為(功能)。★強(qiáng)調(diào):當(dāng)對(duì)象調(diào)用變量時(shí),是指調(diào)用分配給該對(duì)象自己的變量。在講述類的時(shí)候講過(guò):類中的方法可以操作成員變量;當(dāng)對(duì)象調(diào)用方法時(shí),方法中出現(xiàn)的成員變量就是指分配給該對(duì)象的那個(gè)變量。例子3中,主類的main方法中使用XiyoujiRenwu創(chuàng)建兩個(gè)對(duì)象:zhubajie、sunwukong,運(yùn)行效果如圖4.6。例子3§4.3.3使用對(duì)象例子3中,主類的main方法中使用XiyoujiRenwu創(chuàng)建兩個(gè)對(duì)象:zhubajie、sunwukong,運(yùn)行效果如圖。例子3§4.3.4對(duì)象的引用和實(shí)體一個(gè)類創(chuàng)建的兩個(gè)對(duì)象,如果具有相同的引用,那么就具有完全相同的實(shí)體。例如point類classPoint{doublex,y;Point(doublex,doubley){this.x=x;this.y=y;}}使用Point類創(chuàng)建了兩個(gè)對(duì)象p1,p2:Pointp1=newPoint(5,15);Pointp2=newPoint(8,18);
內(nèi)存模型如圖4.9所示§4.3.4對(duì)象的引用和實(shí)體假如在程序中使用了如下的賦值語(yǔ)句:p1=p2;即把p2中的引用賦給了p1,因此p1和p2本質(zhì)上是一樣的.一個(gè)類創(chuàng)建的兩個(gè)對(duì)象,如果具有相同的引用,那么就具有完全相同的實(shí)體(變量)。
內(nèi)存模型由圖4.9變成圖4.10所示。例子4圖4.10例題例子4例子4將對(duì)象p2的引用賦給了對(duì)象p1,運(yùn)行效果如圖使用System.out.println(object)輸出對(duì)象的引用值時(shí),Java會(huì)給引用值添加了前綴信息:類名@,然后輸出添加了前綴信息的數(shù)據(jù)(有關(guān)知識(shí)點(diǎn)見(jiàn)8.1.5)??梢宰孲ystem類調(diào)用靜態(tài)方法(知識(shí)點(diǎn)見(jiàn)4.7.4)intidentityHashCode(Objectobject)返回(得到)對(duì)象object的引用,例如:intaddress=System.identityHashCode(object);§4.4類與程序的基本結(jié)構(gòu)一個(gè)Java應(yīng)用程序(也稱為一個(gè)工程)是由若干個(gè)類所構(gòu)成,這些類可以在一個(gè)源文件中,也可以分布在若干個(gè)源文件中,如圖4.12所示。例題例子5
中一共有三個(gè)Java源文件(Example4_5.java
Rect.java
Ladder.java,需要打開(kāi)記事本三次,分別編輯、保存這三個(gè)Java源文件),其中Example4_5.java是含有主類的Java源文件。Java應(yīng)用程序從主類的main方法開(kāi)始執(zhí)行。在編寫(xiě)一個(gè)Java應(yīng)用程序時(shí),可以編寫(xiě)若干個(gè)Java源文件,每個(gè)源文件編譯后產(chǎn)生一個(gè)類的字節(jié)碼文件。
運(yùn)行主類,程序的輸出結(jié)果是:矩形的面積:2766.5266梯形的面積:1517.07888?!?.5參數(shù)傳值方法中最重要的部分之一就是方法的參數(shù),參數(shù)屬于局部變量,當(dāng)對(duì)象調(diào)用方法時(shí),參數(shù)被分配內(nèi)存空間,并要求調(diào)用者向參數(shù)傳遞值,即方法被調(diào)用時(shí),參數(shù)變量必須有具體的值。classCircle{doubleradius;Circle(doubler){radius=r;}voidchangeRad(doublenewRad){radius=newRad;}}classTest{publicstaticvoidmain(Stringargs[]){Circlecircle=newCircle(10);circle.changeRad(100);//向參數(shù)傳值100}}§4.5.1傳值機(jī)制在Java中,方法的所有參數(shù)都是“傳值”的,也就是說(shuō),方法中參數(shù)變量的值是調(diào)用者指定的值的拷貝。
1)對(duì)于基本數(shù)據(jù)類型的參數(shù),向該參數(shù)“傳值”,傳遞的是值的拷貝. 例如,如果向方法的int型參數(shù)x傳遞一個(gè)int值,那么參數(shù)x得到的值是傳遞的值的拷貝。 2)對(duì)于參數(shù)是引用類型時(shí),“傳值”傳遞的是變量的引用而不是變量所引用的實(shí)體。Java的引用型數(shù)據(jù)包括對(duì)象、數(shù)組和接口。§4.5.2基本數(shù)據(jù)類型參數(shù)的傳值對(duì)于基本數(shù)據(jù)類型的參數(shù),傳遞的是值的拷貝。同時(shí)向該參數(shù)傳遞的值的級(jí)別不可以高于該參數(shù)的級(jí)別。classCircle{doublerad;Circle(doubler){rad=r;}voidchangeRad(doublenewRad){rad=newRad;}}classTest{publicstaticvoidmain(Stringargs[]){Circlecir=newCircle(10);cir.changeRad(100);}}§4.5.3引用類型參數(shù)的傳值當(dāng)參數(shù)是引用類型時(shí),“傳值”傳遞的是變量中存放的“引用”,而不是變量所引用的實(shí)體。如圖所示
classRect{Pointpoint;Rect(Pointr){point=r;}}classTest{publicstaticvoidmain(Stringargs[]){Pointp=newPoint(1,2);Rectrect=newRect(p);}}prnullr0xABC例題例子7模擬收音機(jī)使用電池。例子7中使用的主要類如下。Radio類負(fù)責(zé)創(chuàng)建一個(gè)“收音機(jī)”對(duì)象(Radio類在Radio.java中).Battery類負(fù)責(zé)創(chuàng)建“電池”對(duì)象(Battery類在Battery.java中).Radio類創(chuàng)建的“收音機(jī)”對(duì)象調(diào)用openRadio(Batterybattery)方法時(shí),需要將一個(gè)Battery類創(chuàng)建“電池”對(duì)象傳遞給該方法的參數(shù)battery,即模擬收音機(jī)使用電池。在主類(Example4_7.java)中將Battery類創(chuàng)建“電池”對(duì)象:nanfu,傳遞給openRadio(Batterybattery)方法的參數(shù)battery,該方法消耗了battery的儲(chǔ)電量(打開(kāi)收音機(jī)會(huì)消耗電池的儲(chǔ)電量),那么nanfu的儲(chǔ)電量就發(fā)生了同樣的變化收音機(jī)使用電池的示意圖以及程序的運(yùn)行效果如圖4.14(a)和4.14(b)。
4.5.4可變參數(shù)
可變參數(shù)(Thevariablearguments)數(shù)是指在聲明方法時(shí)不給出參數(shù)列表中從某項(xiàng)開(kāi)始直至最后一項(xiàng)參數(shù)的名字和個(gè)數(shù),但這些參數(shù)的類型必須相同??勺儏?shù)使用“…”表示若干個(gè)參數(shù),這些參數(shù)的類型必須相同.“參數(shù)代表”必須是參數(shù)列表中的最后一個(gè)例如:
publicvoidf(doubleitem,int…x)
publicvoidg(int…x)參數(shù)代表可以通過(guò)下標(biāo)運(yùn)算來(lái)表示參數(shù)列表中的具體參數(shù),即x[0],x[1]…x[m-1]分別表示x代表的第1個(gè)至第m個(gè)參數(shù)。publicint
getSum(int...x){//x可變參數(shù)的參數(shù)代表
intsum=0;for(inti=0;i<x.length;i++){sum=sum+x[i];}returnsum;}getSum(203,178,56,2098)返回203,178,56,2098的求和結(jié)果,getSum(1,2,3)返回1,2,3的求和結(jié)果?!?.6對(duì)象的組合一個(gè)類可以把對(duì)象作為自己的成員變量,如果用這樣的類創(chuàng)建對(duì)象,那么該對(duì)象中就會(huì)有其它對(duì)象,也就是說(shuō)該對(duì)象將其他對(duì)象作為自己的組成部分,或者說(shuō)該對(duì)象是由幾個(gè)對(duì)象組合而成。如果一個(gè)對(duì)象a組合了對(duì)象b,那么對(duì)象a就可以委托對(duì)象b調(diào)用其方法,即對(duì)象a以組合的方式復(fù)用對(duì)象b的方法。通過(guò)組合對(duì)象來(lái)復(fù)用方法有以下特點(diǎn)。(1)通過(guò)組合對(duì)象來(lái)復(fù)用方法也稱“黑盒”復(fù)用,因?yàn)楫?dāng)前對(duì)象只能委托所包含的對(duì)象調(diào)用其方法,這樣一來(lái),當(dāng)前對(duì)象對(duì)所包含的對(duì)象的方法的細(xì)節(jié)(算法的細(xì)節(jié))是一無(wú)所知的。(2)當(dāng)前對(duì)象隨時(shí)可以更換所包含的對(duì)象,即對(duì)象與所包含的對(duì)象屬于弱耦合關(guān)系。注在學(xué)習(xí)對(duì)象的組合時(shí),一定要記?。阂粋€(gè)類聲明的兩個(gè)對(duì)象如果具有相同的引用,二者就具有完全相同的變量(見(jiàn)4.3.4)。例題例子8展示了圓錐和園的組合關(guān)系,圓錐的底是一個(gè)圓,即圓錐有一個(gè)圓形的底。圓錐對(duì)象在計(jì)算體積時(shí),首先委托圓錐的底(一個(gè)Circle對(duì)象)bottom調(diào)用getArea()方法計(jì)算底的面積,然后圓錐對(duì)象再計(jì)算出自身的體積。圓錐對(duì)象組合了Circle對(duì)象,可以委托所包含的對(duì)象調(diào)用其方法,這樣一來(lái),圓錐對(duì)象對(duì)所包含的Circle對(duì)象的getArea()方法的細(xì)節(jié)(計(jì)算圓面積的算法細(xì)節(jié))是一無(wú)所知的。例題例子8中(運(yùn)行效果如圖4.15)模擬圓錐用圓作為底,涉及的類如下。Circle類負(fù)責(zé)創(chuàng)建圓對(duì)象。Circular類負(fù)責(zé)創(chuàng)建圓錐對(duì)象,該圓錐對(duì)象可以調(diào)用方法將Circle類的實(shí)例:即“圓”對(duì)象的引用傳遞給圓錐對(duì)象所組合Cirlce類型的對(duì)象bottom圓錐對(duì)象的Circle類型的成員變量
Circle.java
,Circular.java
,Example4_8.java
setBottom(Circlec)§4.6.1組合與復(fù)用如果一個(gè)對(duì)象a組合了對(duì)象b,那么對(duì)象a就可以委托對(duì)象b調(diào)用其方法,即對(duì)象a以組合的方式復(fù)用對(duì)象b的方法。例子9模擬手機(jī)和SIM卡的組合關(guān)系。涉及的類如下:l
SIM類負(fù)責(zé)創(chuàng)建SIM卡SIM.java
。l
MobileTelephone類負(fù)責(zé)創(chuàng)建手機(jī)MobileTelephone.java
,手機(jī)可以組合一個(gè)SIM卡,并可以調(diào)用setSIM(SIMcard)方法更改其中的SIM卡。程序運(yùn)行效果如圖4.20。SIM.java
,MobileTelephone.java
,Example4_9.java§4.6.2關(guān)聯(lián)關(guān)系和依賴關(guān)系的UML圖
1關(guān)聯(lián)關(guān)系
2依賴關(guān)系§4.7實(shí)例成員與類成員1實(shí)例變量和類變量的聲明在聲明成員變量時(shí),用關(guān)鍵字static給予修飾的稱作類變量,否則稱作實(shí)例變量(類變量也稱為static變量,靜態(tài)變量)。2實(shí)例變量和類變量的區(qū)別不同對(duì)象的實(shí)例變量互不相同所有對(duì)象共享類變量
通過(guò)類名直接訪問(wèn)類變量例子10中的Ladder.java中的Lader類創(chuàng)建的梯形對(duì)象共享一個(gè)下底。程序運(yùn)行效果如圖4.23。Ladder.java
,Example4_10.java
§4.7實(shí)例成員與類成員3實(shí)例方法和類方法的定義類中的方法也可分為實(shí)例方法和類方法。方法聲明時(shí),方法類型前面不加關(guān)鍵字static修飾的是實(shí)例方法、加static關(guān)鍵字修飾的是類方法(靜態(tài)方法)。4實(shí)例方法和類方法的區(qū)別
1)對(duì)象調(diào)用實(shí)例方法當(dāng)對(duì)象調(diào)用實(shí)例方法時(shí),該方法中出現(xiàn)的實(shí)例變量就是分配給該對(duì)象的實(shí)例變量;該方法中出現(xiàn)的類變量也是分配給該對(duì)象的變量,只不過(guò)這個(gè)變量和所有的其他對(duì)象共享而已。實(shí)例方法中不僅可以操作實(shí)例變量,也可以操作類變量,實(shí)例方法可以調(diào)用類里的實(shí)例方法和類方法(不包括構(gòu)造方法) 2)類名調(diào)用類方法從而類方法不僅可以被類創(chuàng)建的任何對(duì)象調(diào)用執(zhí)行,也可以直接通過(guò)類名調(diào)用。和實(shí)例方法不同的是,類方法不可以操作實(shí)例變量,這是因?yàn)樵陬悇?chuàng)建對(duì)象之前,實(shí)例成員變量還沒(méi)有分配內(nèi)存。類方法不可以調(diào)用類里的實(shí)例方法,只可以調(diào)用類里的類方法
.§4.8方法重載與多態(tài)方法重載的意思是:一個(gè)類中可以有多個(gè)方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個(gè)數(shù)不同,或者是參數(shù)的類型不同。Java中存在兩種多態(tài):重載(Overload)和重寫(xiě)(Override),重寫(xiě)是與繼承有關(guān)的多態(tài),將在第5章討論。方法重載是兩種多態(tài)的一種,例如,你讓一個(gè)人執(zhí)行“求面積”操作時(shí),他可能會(huì)問(wèn)你求什么面積?所謂功能多態(tài)性,是指可以向功能傳遞不同的消息,以便讓對(duì)象根據(jù)相應(yīng)的消息來(lái)產(chǎn)生相應(yīng)的行為。對(duì)象的行為通過(guò)類中的方法來(lái)體現(xiàn),那么行為的多態(tài)性就是方法的重載構(gòu)造方法也可以重載,但構(gòu)造方法不參與和非構(gòu)造方法之間的重載比較?!?.8方法重載與多態(tài)例子12中的People類中的hello方法是重載方法,例子12§4.8方法重載與多態(tài)例子13中Student類(Student.java,Circle.java,Tixing.java,Example4_13.java)中的computerArea方法是重載方法。程序運(yùn)行效果如圖4.27?!?.9this關(guān)鍵字自然語(yǔ)言中經(jīng)常使用代詞,在一定的上下文環(huán)境中可以清楚地知道所使用的代詞所代表的具體人物(對(duì)象)。例如,“張老師正在上課,他講的課程是Java程序設(shè)計(jì)?!?那么此上下文中的代詞“他”就是張老師。再如,“在太陽(yáng)系中,月球是地球的衛(wèi)星,它圍繞地球旋轉(zhuǎn)。”,那么此上下文中的代詞“它”就是月球。,再比如“Iboughtanewbookyesterday.Thisisveryinterestingandworthreading.”,此上下文中的代詞“This”就是book,“Iboughtanewpillowyesterday.Thisisverysoftandcomfortabletolieon.”,
此上下文中的代詞“This”就是
pillow。Java語(yǔ)言也經(jīng)常需要使用代詞,即在某種情況下需要使用Java的關(guān)鍵字this?!?.9this關(guān)鍵字this是Java的一個(gè)關(guān)鍵字,表示某個(gè)對(duì)象。this可以出現(xiàn)在實(shí)例方法和構(gòu)造方法中,但不可以出現(xiàn)在類方法中。this關(guān)鍵字出現(xiàn)在類的構(gòu)造方法中時(shí),代表使用該構(gòu)造方法所創(chuàng)建的對(duì)象.當(dāng)this關(guān)鍵字出現(xiàn)實(shí)例方法中時(shí),this就代表正在調(diào)用該方法的當(dāng)前對(duì)象。例子14中,People類的構(gòu)造方法中使用了this
實(shí)例方法必須只能通過(guò)對(duì)象來(lái)調(diào)用,不能用類名來(lái)調(diào)用。實(shí)例方法可以操作類的成員變量,當(dāng)實(shí)例成員變量在實(shí)例方法中出現(xiàn)時(shí),默認(rèn)的格式是:
this.成員變量;當(dāng)static成員變量在實(shí)例方法中出現(xiàn)時(shí),默認(rèn)的格式是:
類名.成員變量;
§4.10包包是Java語(yǔ)言中有效地管理類的一個(gè)機(jī)制。包名的目的是有效的區(qū)分名字相同的類。不同Java源文件中兩個(gè)類名字相同時(shí),它們可以通過(guò)隸屬不同的包來(lái)相互區(qū)分?!?.10.1包語(yǔ)句
通過(guò)關(guān)鍵字package聲明包語(yǔ)句。package語(yǔ)句作為Java源文件的第一條語(yǔ)句,為該源文件中聲明的類指定包名。package語(yǔ)句的一般格式為:
package包名;
源程序中最多有一個(gè)包語(yǔ)句,
如果源程序中省略了package語(yǔ)句,源文件中所定義、命名的類將被隱含地認(rèn)為是無(wú)名包的一部分,只要這些類的字節(jié)碼被存放在相同的目錄中,那么它們就屬于同一個(gè)包,但沒(méi)有包名。
包名可以是一個(gè)合法的標(biāo)識(shí)符,也可以是若干個(gè)標(biāo)識(shí)符加“.”分隔而成§4.10.2有包名的類的存儲(chǔ)目錄程序如果使用了包語(yǔ)句,例如:
packagetom.jiafei;那么存儲(chǔ)文件的目錄結(jié)構(gòu)中必須包含有如下的結(jié)構(gòu)…\tom\jiafei如:c:\1000\tom\jiafei并且要將源文件編譯得到的類的字節(jié)碼文件保存在目錄c:\1000\tom\jiafei中(源文件可以任意存放)。
當(dāng)然,可以將源文件保存在“C:\1000\tom\jiafei”中,然后進(jìn)入“tom\jiafei”的上一層目錄1000中編譯源文件:C:\1000>javactom\jiafei\源文件那么得到的字節(jié)碼文件默認(rèn)保存“C:\1000\tom\jiafei”中§4.10.3運(yùn)行有包名的主類如果主類的包名是tom.jiafei,那么主類的字節(jié)碼一定存放在…\tom\jiefei目錄中,運(yùn)行時(shí)必須到tom\jiefei的上一層(即tom的父目錄)目錄中去運(yùn)行主類。假設(shè)tom\jiefei的上一層目錄是1000,那么,必須如下格式來(lái)運(yùn)行: C:\1000>javatom.jiafei.主類名
例子15中的Student.java和Example4_15.java使用了包語(yǔ)句?!?.11import語(yǔ)句一個(gè)類可能需要另一個(gè)類聲明的對(duì)象作為自己的成員或方法中的局部變量,如果這兩個(gè)類在同一個(gè)包中,當(dāng)然沒(méi)有問(wèn)題。如果一個(gè)類想要使用的那個(gè)類和它不在一個(gè)包中,要使用import語(yǔ)句完成使命。如果用戶需要類庫(kù)中的類就可以使用import語(yǔ)句。例如: importjava.until.Date;表示引入java.util包中的Date類.例如:
importjava.util.*;表示引入java.util包中所有的類§4.11.1引入類庫(kù)中的類用戶編寫(xiě)的類肯定和類庫(kù)中的類不在一個(gè)包中。如果用戶需要類庫(kù)中的類,就必須使用import語(yǔ)句。使用import語(yǔ)句可以引入包中的類和接口。在編寫(xiě)源文件時(shí),除了自己編寫(xiě)類外,經(jīng)常需要使用Java提供的許多類,這些類可能在不同的包中。在學(xué)習(xí)Java語(yǔ)言時(shí),使用已經(jīng)存在的類,避免一切從頭做起,這是面向?qū)ο缶幊痰囊粋€(gè)重要方面.例子16中的Example4_16.java使用import語(yǔ)句引入java.util中的Date類和Arrays類,Arrays類中的靜態(tài)方法sort可以把數(shù)組排序,toString方法可以得到數(shù)組全部元素的值,并將這些值用字符序列返回§4.11.2引入自定義包中的類用戶程序也可以使用import語(yǔ)句引入非類庫(kù)中有包名的類,如:importtom.jiafei.*;在用戶程序所在目錄下建立和包相對(duì)應(yīng)的子目錄結(jié)構(gòu),比如用戶程序所在目錄是C:\ch4,想使用import語(yǔ)句引入tom.jiafei包中的類,那么根據(jù)包名建立如下的目錄結(jié)構(gòu):C:\ch4\tom\jiafei把程序使用的自定義的包名所形成的目錄都放在同一文件夾中(見(jiàn)后面的例子17和例子18)。包名路徑左對(duì)齊。所謂包名路徑左對(duì)齊,就是讓源文件中的包名所對(duì)應(yīng)的路徑和它要用import語(yǔ)句引入的非類庫(kù)中的類的包名所對(duì)應(yīng)的路徑的父目錄相同。例題例子18中的Example4_18.java中的主類(無(wú)包名)使用import語(yǔ)句引入例子17
包中的Triangle類,以便創(chuàng)建三角形,并計(jì)算三角形的面積。將Example4_18.java保存在C:\chapter4目錄中(因?yàn)閏hapter4下有sohu\com子目錄)。程序編譯、運(yùn)行效果如圖。
圖4.31引入自定義包中的類§4.12訪問(wèn)權(quán)限當(dāng)用一個(gè)類創(chuàng)建了一個(gè)對(duì)象之后,該對(duì)象可以通過(guò)“.”運(yùn)算符操作自己的變量、使用類中的方法,但對(duì)象操作自己的變量和使用類中的方法是有一定限制的。所謂訪問(wèn)權(quán)限是指對(duì)象是否可以通過(guò)“.”運(yùn)算符操作自己的變量或通過(guò)“.”運(yùn)算符使用類中的方法。訪問(wèn)限制修飾符有private、protected和public,都是Java的關(guān)鍵字,用來(lái)修飾成員變量或方法。§4.12.2私有變量和私有方法用關(guān)鍵字private修飾的成員變量和方法稱為私有變量和私有方法。對(duì)于私有成員變量或方法,只有在本類中創(chuàng)建該類的對(duì)象時(shí),這個(gè)對(duì)象才能訪問(wèn)自己的私有成員變量和類中的私有方法。某個(gè)類在另外一個(gè)類中創(chuàng)建對(duì)象后,如果不希該對(duì)象直接訪問(wèn)自己的變量,即通過(guò)“.”運(yùn)算符來(lái)操作自己的成員變量,就應(yīng)當(dāng)將該成員變量訪問(wèn)權(quán)限設(shè)置為private。面向?qū)ο缶幊烫岢珜?duì)象應(yīng)當(dāng)調(diào)用方法來(lái)改變自己的屬性,類應(yīng)當(dāng)提供操作數(shù)據(jù)的方法,這些方法可以經(jīng)過(guò)精心的設(shè)計(jì),使得對(duì)數(shù)據(jù)的操作更加合理。例子19(Example4_19.java,Student.java)所示。
§4.12.2私有變量和私有方法§4.12.3共有變量和共有方法用public修飾的成員變量和方法被稱為共有變量和共有方法。我們?cè)谌魏我粋€(gè)類中用類Tom創(chuàng)建了一個(gè)對(duì)象后,該對(duì)象能訪問(wèn)自己的public變量和類中的public方法(也可以通過(guò)類名來(lái)操作成員變量、方法)?!?.12.4友好變量和友好方法當(dāng)在另外一個(gè)類中用類Tom創(chuàng)建了一個(gè)對(duì)象后,如果這個(gè)類與Tom類在同一個(gè)包中,那么該對(duì)象能訪問(wèn)自己的友好變量和友好方法。在任何一個(gè)與Tom同一包中的類中,也可以通過(guò)Tom類的類名訪問(wèn)Tom類的static友好成員變量和static友好方法。§4.12.5受保護(hù)的成員變量和方法用protected修飾的成員變量和方法被稱為受保護(hù)的成員變量和受保護(hù)的方法?!?.12.6public類與友好類類聲明時(shí),如果在關(guān)鍵字class前面加上public關(guān)鍵字,就稱這樣的類是一個(gè)public類。可以在任何另外一個(gè)類中,使用public類創(chuàng)建對(duì)象。如果一個(gè)類不加public修飾,這樣的類被稱作友好類。在另外一個(gè)類中使用友好類創(chuàng)建對(duì)象時(shí),要保證它們是在同一包中?!?.13基本類型的類封裝Java的基本數(shù)據(jù)類型包括byte、int、short、long、float、double、char。Java提供了基本數(shù)據(jù)類型相關(guān)的類,實(shí)現(xiàn)了對(duì)基本數(shù)據(jù)類型的封裝。Byte、Integer、Short、Long、Float、Double和Character類。這些類在java.lang包中?!?.13.1Double和Float類Double類和Float類實(shí)現(xiàn)了對(duì)double和float基本型數(shù)據(jù)的類包裝。JDK9及之后的版本中,Double和Float包裝類的構(gòu)造方法被標(biāo)記為已過(guò)時(shí),不建議使用。替代的做法是使用這些包裝類提供的靜態(tài)方法,例如Double.valueOf(doubled)、Float.valueOf(floatf)返回相應(yīng)的對(duì)象。Double對(duì)象調(diào)用doubleValue()方法可以返回該對(duì)象中含有的double型數(shù)據(jù)。Float對(duì)象調(diào)用floatValue()方法可以返回該對(duì)象中含有的float型數(shù)據(jù)。請(qǐng)看下面的例題publicclassTest{publicstaticvoidmain(Stringargs[]){//使用Double.valueOf方法創(chuàng)建Double對(duì)象Doubled1=Double.valueOf(3.14);Doubled2=Double.valueOf(0.618);
//直接對(duì)Double對(duì)象進(jìn)行加法運(yùn)算,會(huì)自動(dòng)拆箱為基本數(shù)據(jù)類型System.out.println(d1+d2);//將Double對(duì)象轉(zhuǎn)換為基本數(shù)據(jù)類型doubledoublem1=d1.doubleValue();doublem2=d2.doubleValue();//對(duì)基本數(shù)據(jù)類型進(jìn)行加法運(yùn)算System.out.println(m1+m2);}}例題§4.13.2Byte、Short、Integer、Long類上述類的構(gòu)造方法已經(jīng)不建議使用:
JDK9及之后的版本中,Byte(bytenum)、Short(shortnum)、Integer(intnum)、Long(longnum)等包裝類的構(gòu)造方法被標(biāo)記為已過(guò)時(shí),不建議使用。替代的做法是使用這些包裝類提供的靜態(tài)方法,例如Byte.valueOf(byteb)、Short.valueOf(shorts)、Integer.valueOf(inti)、Long.valueOf(longl)返回相應(yīng)的對(duì)象。Byte、Short、Integer和Long對(duì)象分別調(diào)用byteValue()、shortValue()、intValue()和longValue()方法返回該對(duì)象含有的基本型數(shù)據(jù)?!?.13.3Character類Character類實(shí)現(xiàn)了對(duì)char基本型數(shù)據(jù)的類包裝。Character類的靜態(tài)方法valueOf(charc)返回Character對(duì)象Character類中的一些常用類方法:publicstaticbooleanisDigit(charch)ch是數(shù)字字符返回true.publicstaticbooleanisLetter(charch)ch是字母返回true。例子20將一個(gè)字符數(shù)組中的小寫(xiě)字母變成大寫(xiě)字母,并將大寫(xiě)字母變成小寫(xiě)字母.§4.14
var局部變量可以使用var聲明局部變量。在類的類體中,不可以用var聲明成員變量,即僅限于在方法體內(nèi)使用var聲明局部變量。在方法的方法體內(nèi)使用var聲明局部變量時(shí),必須同時(shí)指定初值(初值不可以是null),那么編譯器就可以推斷出var所聲明的變量的類型,即確定該變量的類型。var不是真正意義的動(dòng)態(tài)變量(運(yùn)行時(shí)刻確定類型),var聲明的變量也是在編譯階段就確定了類型。需要注意的是,方法的參數(shù)和方法的返回類型不可以用var來(lái)聲明。例子21中的Tom類中的方法f中,使用var聲明了局部變量例子21§4.15
對(duì)象數(shù)組如果程序需要某個(gè)類的若干個(gè)對(duì)象,比如Student類的10個(gè)對(duì)象,顯然如下聲明10個(gè)Student對(duì)象是不可取的:Studentstu1,stu2,stu3,stu4,stu5,stu6,stu7,stu8,stu9,stu10;正確的做法是使用對(duì)象數(shù)組,即數(shù)組的元素是對(duì)象,例如:Student[]stu;stu=newStudent[10];需要注意的是,上述代碼僅僅定義了數(shù)組stu有10個(gè)元素,并且每個(gè)元素都是一個(gè)Student類型的對(duì)象,但這些對(duì)象目前都是空對(duì)象,因此在使用數(shù)組stu中的對(duì)象之前,應(yīng)當(dāng)創(chuàng)建數(shù)組所包含的對(duì)象。例如:
stu[0]=newStudent();
例子22中使用了對(duì)象數(shù)組例子22§4.16jar文件1.清單文件:qingdan.mf(保存到C:\ch4)Manifest-Version:1.0Class:.TestOnesun.hello.moon.TestTwoCreated-By:212.使用jar命令來(lái)生成一個(gè)名字為Jerry.jar的文件4.16.1文檔性質(zhì)的jar文件例子23中的
TestOne類
和TestTwo的包名分別是和sun.hello.moon.TestOne.java和TestTwo.java分別保存到C:\ch4\sohu\com和C:\ch4\sun\hello\moon中。C:\ch4>jarcfmJerry.jarqingdan.mfsohu\com\*.classsun\hello\moon\*.class在命令行進(jìn)入C:\ch4目錄,然后如下編譯兩個(gè)源文件C:\ch4>javacsohu\com\TestOne.javaC:\ch4>javacsun\hello\moon\TestTwo.java§4.16jar文件4.16.1文檔性質(zhì)的jar文件
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)大一(護(hù)理學(xué))護(hù)理倫理學(xué)基礎(chǔ)階段試題
- 2025年中職寵物養(yǎng)護(hù)與經(jīng)營(yíng)(寵物護(hù)理)試題及答案
- 2025年高職公共衛(wèi)生(公共衛(wèi)生管理)試題及答案
- 2025年大學(xué)服裝設(shè)計(jì)(服裝材料學(xué))試題及答案
- 2025年高職臨床醫(yī)學(xué)(內(nèi)科護(hù)理基礎(chǔ))試題及答案
- 2025年大學(xué)大二(海洋科學(xué))海洋化學(xué)試題及答案
- 2025年高職幼兒護(hù)理基礎(chǔ)(護(hù)理基礎(chǔ))試題及答案
- 2025年大學(xué)本科(旅游管理)旅游市場(chǎng)開(kāi)發(fā)階段測(cè)試題及答案
- 2025年大學(xué)大一(水族科學(xué)與技術(shù))水族生物學(xué)基礎(chǔ)試題及答案
- 2025年大學(xué)大三(中醫(yī)學(xué))中醫(yī)內(nèi)科學(xué)基礎(chǔ)試題及答案
- 2026海南交通投資控股公司秋招面筆試題及答案
- 2026 年中職機(jī)械基礎(chǔ)(機(jī)械基礎(chǔ))試題及答案
- 膽囊癌課件教學(xué)課件
- 2025年昆明市呈貢區(qū)城市投資集團(tuán)有限公司及下屬子公司第二批招聘(11人)考試備考題庫(kù)附答案
- “青苗筑基 浙里建證”浙江省建設(shè)投資集團(tuán)2026屆管培生招聘30人備考核心題庫(kù)及答案解析
- 江蘇百校大聯(lián)考2026屆高三語(yǔ)文第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題含解析
- 代還按揭協(xié)議書(shū)
- 2026年失眠患者睡眠調(diào)理指南
- 2026年盤錦職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案詳解一套
- 2025年10月自考00610高級(jí)日語(yǔ)(二)試題及答案
- 2026年包頭鐵道職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)帶答案解析
評(píng)論
0/150
提交評(píng)論