




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第3章 類和對象Java通過類和對象來組織和構(gòu)建程序。類包括類的聲明和類的主體。類的主體包括成員變量和成員方法。類的主體中還包括一個與類名相同無返回值的特殊方法,這就是構(gòu)造函數(shù)。構(gòu)造函數(shù)用來對對象進行初始化。有些方法在使用時需要為其傳送參數(shù),this引用可以把當前對象作為參數(shù)傳遞到方法中。類設計好以后,就可以用來定義對象,對象是一種引用類型,存放的是實際對象的內(nèi)存地址。使用對象名來訪問對象的成員變量和方法,以實現(xiàn)對對象的操作,完成程序的功能。包是類的組織結(jié)構(gòu)。包主要用來管理Java中的類并提供訪問控制。本章要點l 類的定義與對象的創(chuàng)建l 構(gòu)造方法的使用l this引用l 包的訪問本章難點l 類
2、的定義l 構(gòu)造方法的使用學習目標l 掌握類的定義與創(chuàng)建l 掌握構(gòu)造方法的使用l 了解包的訪問3.1 類的定義311類和對象的關系類(Class)是一種復雜的數(shù)據(jù)類型,它是將數(shù)據(jù)和與數(shù)據(jù)相關的操作封裝在一起的集合體。類是普通數(shù)據(jù)類型的擴展,它不但包含數(shù)據(jù),還包含了對數(shù)據(jù)進行操作的方法(method)。方法反映的是數(shù)據(jù)的行為而不是數(shù)據(jù)本身。對象 (Object)是類的實例,當程序運行時,對象占用內(nèi)存單元。對象與類的關系就像變量與類型的關系一樣。例如:如果把“人”看成是一個抽象的類,我們每一個具體的人,就是“人”類中的一個實例,即一個對象,每個人的的姓名、年齡、身高、體重等特征可作為“人”類中的數(shù)據(jù)
3、,吃飯、走路、工作等行為作為類的方法。Java 中的所有數(shù)據(jù)類型都是用類來實現(xiàn)的,Java語言是建立在類這個邏輯結(jié)構(gòu)之上的,類是Java的核心。312 類的定義格式1類的聲明格式Java類的定義格式分為兩部分:類聲明和類主體。其格式如下: 類聲明中包括關鍵字class,類名及類的屬性。類聲明的格式如下:classextendsimplements類主體是Java類的主體部分,完成變量的說明以及方法的定義及實現(xiàn)。在類中,用變量來說明類的狀態(tài),而用方法來實現(xiàn)類的行為。包含類主體的類結(jié)構(gòu)如下: 2聲明成員變量Java類的狀態(tài)用成員變量來表示。聲明成員變量必須給出變量名及其所屬的類型,同時還可以指定其
4、他特性。聲明格式如下:3聲明成員方法類的行為由它的方法實現(xiàn),其他對象可以調(diào)用對象的方法來得到該對象的服務。方法的聲明與實現(xiàn)也可分為兩部分:方法聲明和方法體。聲明成員方法的格式如下:(參數(shù)列表)throws 方法都有一個返回類型,如果一個方法不返回任何值,則它必須有一個void的返回類型聲明。如果一個方法具有返回值,則在方法體中使用return語句把一個確定的值返回給調(diào)用該方法的語句。return語句的一般格式如下:return ;參數(shù)表由類型聲明和參數(shù)名組成,參數(shù)名之間由逗號分開,若方法無參數(shù),則參數(shù)表為空。方法的主體稱為方法體,它是成員方法的實現(xiàn)部分。方法體包含在一對大括號中,即使方法體沒有
5、語句,一對大括號也是必不可少的。在方法體中也可以聲明變量,但方法體中聲明的變量只是屬于方法的局部變量,而不是類的成員變量?!纠?_1】類定義示例。class Exam3_1int i=10;public void printI()System.out.println (i=+i);程序中我們定義了一個類,名字叫做Exam3_1,在這個類中我們定義了一個成員變量i,一個成員方法printI(),這就完成了一個最基本的類的定義。3.2 方法方法是類的成員,它與類的成員變量一起被封裝在類中,并在類中實現(xiàn)。方法的聲明格式已經(jīng)在3.1節(jié)中給出了。在使用方法時我們會遇到有返回值的方法和無返回值的方法,以及
6、有參數(shù)的方法和無參數(shù)的方法。321 方法的返回值方法的返回值類型可以是基本數(shù)據(jù)類型也可以是對象,如果沒有返回值,就用void來描述。例如,main方法就沒有返回值,而且必須沒有返回值。如果一個方法有返回值,則可以在方法體中使用return 語句將值返回,需要注意的是方法的返回值的類型必須和return 語句中返回的值的類型一樣?!纠?_2】方法的返回值。class Exam3_2static int i=10;public static void print1()System.out.println (i=+i);public static int print2()return i;publi
7、c static void main(String args) print1(); System.out.println (i=+print2(); 程序中我們創(chuàng)建了兩個方法print1()和print2(),print1()方法是無返回值的,因此在聲明時使用void表明其無返回值,print2()方法會返回一個int類型的變量i,因此在方法聲明是使用int表明返回值類型是int型,并使用return語句返回了int類型的變量i。程序的運行結(jié)果如圖3-1所示。圖3-1 例3_2程序運行結(jié)果322 方法的參數(shù)從參數(shù)上考察方法的話,方法分為有參方法和無參方法,需要注意的是,在Java語言中,向方法
8、傳遞參數(shù)的方式是“按值傳遞”。按值傳遞意味著當將一個參數(shù)傳遞給一個方法時,首先創(chuàng)建了源參數(shù)的一個副本并將這個副本傳入了方法,這樣方法接收的是原始值的一個副本。因此,即使在方法中修改了該參數(shù),那僅僅是改變副本,而源參數(shù)值保持不變。【例3_3】方法的參數(shù)。class Exam3_3static int i=10;public static void set1()i=100;public static void set2(int n)i=n;public static void print()System.out.println (i=+i);public static void main(Stri
9、ng args)print(); set1(); print(); set2(50); print(); 對程序3.1做修改,添加了兩個方法set1()和set()2,其中set1()是沒有參數(shù)的方法,方法中將i的值修改為100,而set2()方法是帶有一個整形參數(shù)的方法,將傳進來的參數(shù)值賦值給i,這樣在main()方法中調(diào)用set2()時,會將傳入的整數(shù)值50傳遞給i。程序的運行結(jié)果如圖3-2所示。圖3-2 例3_3程序運行結(jié)果【例3_4】方法的參數(shù)傳遞。class Exam3_4public static void changeI(int i)i=100;System.out.printl
10、n (changeI方法中i=+i);public static void main(String args) int i=10; System.out.println (轉(zhuǎn)換前i=+i); changeI(i); System.out.println (轉(zhuǎn)換后i=+i); 不難看出,雖然在changeI()方法中改變了傳進來的參數(shù)i的值,但對這個參數(shù)的源變量本身并沒有影響,即對 main方法里的 i 變量沒有影響。這說明,按值傳遞實際上是將參數(shù)的值作了一個副本傳進方法的,因此,無論在方法里怎么改變其值,結(jié)果都只是改變了拷貝的值,而不是源值。運行結(jié)果如圖3-3所示。圖3-3 例3_4程序運行結(jié)
11、果3.3 類的實例化331 創(chuàng)建對象創(chuàng)建對象包括對象聲明和對象初始化兩個部分。通常這兩部分是結(jié)合在一起的,即定義對象的同時對其初始化,為其分配空間,并進行賦值。其格式為: = new ( )例如,創(chuàng)建例3.1中Exam3_1類的一個對象可以寫成:Exam3_1 e=new Exam3_1();其中e是所創(chuàng)建的對象的名字。Java中的對象是引用類型。引用類型是指該類型的標識符表示的是一片連續(xù)內(nèi)存地址的首地址。對象定義后系統(tǒng)將給對象標識符分配一個內(nèi)存單元,用以存放實際對象在內(nèi)存中的存放位置。在沒有用new關鍵字創(chuàng)建實際對象前,對象名的值為null。332使用對象成員一旦定義并創(chuàng)建了對象,就可以在程
12、序中使用對象了。對象通過使用成員運算符“”實現(xiàn)對變量的訪問和方法的調(diào)用。通常使用的格式為:對象名成員變量名對象名成員方法名( )【例3_5】類定義示例。class Exam3_5static int i=10;public static void printI()System.out.println (i=+i); public static void main(String args) Exam3_5 e=new Exam3_5(); e.printI(); e.i=100; e.printI(); 程序中我們在main()方法中創(chuàng)建了類的對象e,并使用e訪問了其中的變量i和方法e.prin
13、tI(),運行結(jié)果如圖3-2所示。圖3-4 例3_5程序運行結(jié)果333對象資源的回收每個對象都要求資源才能“生存”,其中最令人注目的資源是內(nèi)存。如果不再需要使用一個對象,就必須將其清除,以便釋放這些資源,給其他對象使用。我們創(chuàng)建對象,在需要的時候調(diào)用它,然后將其清除或者“破壞”。但是如何才能知道什么時間刪除對象呢?Java編程語言解除了程序員回收內(nèi)存資源的責任,它提供垃圾回收機制(Garbage Collection)以跟蹤每一存儲器的分配情況并對不再使用的內(nèi)存資源作回收。在垃圾回收機制中,JVM會跟蹤資源的使用情況,定期檢測出不使用的內(nèi)存,由系統(tǒng)自動回收并做再次分配。垃圾收集器“知道”一個對
14、象在什么時候不再使用,然后會自動釋放那個對象占據(jù)的內(nèi)存空間。因此,Java程序中將不用考慮對象的釋放問題,從而減輕程序員的負擔,提高程序安全性,避免因資源耗盡而導致系統(tǒng)癱瘓的隱患。334類成員的訪問控制在說明類的定義時我們提到了類及其成員的修飾符,可以用來修飾類的修飾符有public、abstract、final,用來修飾類的成員變量的有public、private、protected、final、static,修飾成員方法的有public、private、protected、final、static、abstract。任何修飾符都沒有使用的,屬于默認修飾符(friendly)。將這些修飾符的
15、作用列如表3-1所示。表3-1 類及其成員修飾符的作用訪問控制修飾符同一類中同一包中不同包中的子類不同包中的非子類publicYesYesYesYesprotectedYesYesYesNo(friendly)YesYesNoNoprivateYesNoNoNo類型說明final最終類或最終成員,修飾類時表示此類不能有子類,修飾變量時表明此變量是一個常量,修飾方法時表明此方法不允許被覆蓋abstract抽象類或抽象方法,修飾類時表明此類不能定義對象,修飾方法時表明此方法必須被覆蓋static類成員或靜態(tài)成員,表明此成員屬于類,而不屬于該類的某一具體對象1訪問控制修飾符訪問控制修飾符說明類或類的
16、成員的可訪問范圍,用public修飾的類或成員擁有公共作用域,表明此類或類的成員可以被任何Java中的類所訪問,是最廣泛的作用范圍。用protected修飾的變量或方法擁有受保護作用域,可以被同一個包中所有的類及其他包中該類的子類所訪問。用private修飾的變量或方法擁有私有作用域,只能在此類中訪問,在其他類中,包括該類的子類中也是不允許訪問的,private是最保守的作用范圍。沒有使用任何修飾符的,擁有默認訪問權(quán)限,表明此類或類的成員可以被同一個包中的其它類訪問?!纠?_6】訪問控制修飾符示例。class Exam3_6private static int i=10;public stat
17、ic void printI()System.out.println (i=+i);public void setI(int i1)i=i1;class Testpublic static void main(String args) Exam3_6 e=new Exam3_6(); e.printI(); /e.i=100; e.setI(100); e.printI(); 程序中我們將i的修飾符改為private,這樣i只能在類Exam3_4中直接訪問,在Test類中的直接訪問語句e.i=100將出現(xiàn)“i has private access in Exam3_4”錯誤,為了給i賦值,我們
18、提供了可以在所有類中訪問的public方法setI(),以達到改變i值得目的。程序運行結(jié)果如圖3-5所示。圖3-5 例3_6程序運行結(jié)果2static修飾符在一個類中,使用static修飾的變量和方法分別稱為類變量(或稱靜態(tài)變量)和類方法(或稱靜態(tài)方法),沒有使用static修飾的變量和方法分別稱為實例變量和實例方法。類成員(靜態(tài)成員)屬于這個類而不是屬于這個類的某個對象,它由這個類所創(chuàng)建的所有對象共同擁有。類成員僅在類的存儲單元中存在,而在由這個類所創(chuàng)建的所有對象中,只是存儲了一個指向該成員的引用。因此,如果任何一個該類的對象改變了類成員,則對其他對象而言該類成員會發(fā)生同樣的改變。對于類成員
19、,既可以使用對象進行訪問,也可以使用類名直接進行訪問,并且在類方法中只能訪問類成員,而不能訪問實例成員。實例成員由每一個對象個體獨有,對象的存儲空間中的確有一塊空間用來存儲該成員。不同的對象之間,它們的實例成員相互獨立,任何一個對象改變了自己的實例成員,只會影響這個對象本身,而不會影響其他對象中的實例成員。對于實例成員,只能通過對象來訪問,不能通過類名進行訪問。在實例方法中,既可以訪問實例成員,也可以訪問類成員?!纠?_7】static修飾符訪問示例。class Exam3_7static int i=1;int j=1;static void printStatic( )System.out
20、.println(i=+i);/System.out.println(j=+j);/非法訪問void print()System.out.println(i=+i);System.out.println(j=+j);public static void main(String args)Exam3_7.printStatic( );/Exam3_7.print( );/非法訪問Exam3_7.i=2;/Exam3_7.j=2;/非法訪問Exam3_7 st=new Exam3_7( );st.i=3;st.j=3;st.print( );st.printStatic( );Exam3_7.pr
21、intStatic( );程序定義了一個類變量i,定義了一個實例變量j,定義了一個類方法printStatic(),定義了一個實例方法print(),在類方法printStatic()中,只能訪問類變量i,但不能訪問實例變量j,在實例方法print()中,則兩個變量都可以訪問。在main()方法中,由于main()方法是使用static修飾的,因此可以直接通過類名訪問類變量i和類方法printStatic(),但不能通過類名訪問實例變量j和實例方法print(),而一旦定義了對象st,則通過對象st可以訪問類的任何成員,不論是類成員還是實例成員。程序運行結(jié)果如圖3-6所示。圖3-6 例3_7程
22、序運行結(jié)果【例3_8】測試類變量與實例變量的不同。class Exam3_8int i=0;static int j=0;public void print( )System.out.println(i=+i);System.out.println(j=+j);public static void main(String args)Exam3_8 sv1=new Exam3_8( );sv1.i+;sv1.j+;sv1.print();Exam3_8 sv2=new Exam3_8( );sv2.print();程序中定義了實例變量i和類變量j,創(chuàng)建了兩個對象sv1和sv2,對sv1中的i和j
23、進行自增運算,輸出均為1;然后輸出sv2中的兩個變量,結(jié)果為0和1。因為i是實例變量,sv1的更改只影響sv1本身,不影響其他對象,而j是類變量,sv1對其更改,sv2中的該變量會隨之更改。程序運行結(jié)果如圖3-7所示。圖3-7 例3_8程序運行結(jié)果3.4 構(gòu)造函數(shù)341 構(gòu)造函數(shù)的作用和定義構(gòu)造函數(shù)也稱為構(gòu)造方法,用來對對象進行初始化。它本身是一種特殊的方法,構(gòu)造函數(shù)的名字必須和類名完全相同,并且沒有返回值,甚至連表示無返回值的空類型(void)也沒有,當創(chuàng)建對象時,由new運算符自動調(diào)用。有了構(gòu)造函數(shù),我們在3.2節(jié)中對類的實例化的格式可以改成: = new ( )由此可以看到,構(gòu)造函數(shù)的作
24、用就是用于創(chuàng)建不同的對象。【例3_9】構(gòu)造函數(shù)使用示例。class Exam3_9 int i; public Exam3_9(int i1) i=i1; public void printI()System.out.println (i=+i);class Testpublic static void main(String args) Exam3_9 e1=new Exam3_9(1); Exam3_9 e2=new Exam3_9(2); Exam3_9 e3=new Exam3_9(3); e1.printI(); e2.printI(); e3.printI(); 程序中的publi
25、c Exam3_9(int i1)是一個方法的聲明,但是該方法無返回值,且與類名完全相同,因此它是類Exam3_9的構(gòu)造函數(shù)。在這個構(gòu)造函數(shù)中,我們將傳遞進來的整數(shù)值賦值給類的成員變量i,因此,我們可以用構(gòu)造函數(shù)來創(chuàng)建具有不同i的 Exam3_9類的對象e1、e2、e3。程序的執(zhí)行結(jié)果如圖3-8所示。圖3-8 例3_9程序運行結(jié)果342 默認構(gòu)造函數(shù)一般而言,每個類都至少有一個構(gòu)造函數(shù)。如果程序員沒有為類定義構(gòu)造函數(shù),Java虛擬機會自動為該類生成一個默認的構(gòu)造函數(shù)。默認構(gòu)造函數(shù)的參數(shù)列表及方法體都為空。在程序中,當使用new Xxx()的形式來創(chuàng)建對象實例時,就是調(diào)用了默認構(gòu)造函數(shù),這里Xx
26、x表示類名。例如在3.1和3.2節(jié)中我們遇到的所有的構(gòu)造函數(shù)其實都是由JVM為我們創(chuàng)建的默認構(gòu)造函數(shù)。要特別注意的是,如果程序員定義了一個或多個構(gòu)造函數(shù),則自動屏蔽掉默認的構(gòu)造函數(shù)。3.5 this引用351 this引用在例3_9的構(gòu)造函數(shù)中我們將傳入的變量i1的值賦值給類的成員變量i,如果我們不把構(gòu)造函數(shù)的參數(shù)聲明為i1,而把它也聲明為i,此時構(gòu)造函數(shù)中的賦值語句就會變?yōu)閕=i;這樣我們就分不清楚兩個“i”究竟指的是哪一個。此時我們需要一個指示器來指明究竟哪一個“i”是構(gòu)造方法中的變量i,哪一個“i”是類中的成員變量i,而這個指示器就是this引用。在Java語言動態(tài)方法的作用域中,thi
27、s代表當前的對象,一個變量引用它自己的實例變量及方法時,在每個引用的前面都隱含著this?!纠?_10】this引用使用示例1。class Exam3_10 int i; public Exam3_10(int i) this.i=i; public void printI()System.out.println (i=+i);class Testpublic static void main(String args) Exam3_10 e1=new Exam3_10(1); e1.printI(); 程序中的構(gòu)造函數(shù)Exam3_10(int i)的參數(shù)與類的成員變量同名,因此我們使用this
28、引用當前對象,這樣在這個構(gòu)造函數(shù)中的this.i指的就是類的成員變量i,而沒有使用this應用的變量i,指的就是構(gòu)造函數(shù)的參數(shù)i。程序的執(zhí)行結(jié)果如圖3-9所示。圖3-9 例3_10程序運行結(jié)果有些時候,方法需要明確使用對當前對象的引用,此時要使用this關鍵字。this關鍵字用于獲得調(diào)用本方法的那個對象的引用。當方法需要訪問類的成員變量時,就可以使用this引用指明要操作的對象。【例3_11】this引用使用示例2。class Exam3_11 int i; public Exam3_11(int i) this.i=i;printI(this); public void printI(Exa
29、m3_11 e)System.out.println (i=+e.i);class Testpublic static void main(String args) Exam3_11 e1=new Exam3_11(1); 類Exam3_11的構(gòu)造方法中調(diào)用了方法printI(),但printI()需要Exam3_11類的一個對象作參數(shù),也就是使用本身這個類的一個對象作參數(shù),此時我們使用this引用當前這個類的對象。程序的運行結(jié)果如圖3-8所示。352 類的封裝性我們知道,類由成員變量和成員方法構(gòu)成,變量和方法可以封裝在一個單個實體中,這是面向?qū)ο笳Z言的一個基本特征封裝。我們對類可以進行各種操
30、作,也就是對類的成員進行各種操作。但是如果可以訪問的類的成員很多,出現(xiàn)問題的機率就會變大,程序的健壯性、穩(wěn)定性就變得很差。為避免這種情況,在面向?qū)ο缶幊讨刑岢隽恕皬妰?nèi)聚、弱耦合”的編程思想。也就是要求一個類的內(nèi)部成員之間聯(lián)系緊密一些,而一個類與其他類之間的聯(lián)系疏松一些。實現(xiàn)這種“強內(nèi)聚、弱耦合”編程思想的方式,就是盡可能的把類的成員聲明為私有的(private),只把一些少量的、必要的方法聲明為公共的(public),提供給外部使用。這種方式使得類功能的實現(xiàn)只在類內(nèi)可見,在類的外部,則只能訪問那些少量的public方法,完成相應的功能。至于實現(xiàn)這些功能的內(nèi)部機理和過程,在類的外部并不知道也不需
31、要知道,從而減少了用戶對類的內(nèi)部成員的訪問,增強了程序的健壯性。這種技術(shù)就是封裝。它將類的外部界面與類的實現(xiàn)區(qū)分開來,隱藏實現(xiàn)細節(jié)。迫使用戶去使用外部界面,即使實現(xiàn)細節(jié)改變,還可通過界面承擔其功能而保留原樣,確保調(diào)用它的代碼還繼續(xù)工作。這使代碼維護更簡單。3.6類的組織361 包的概念包是Java提供的文件組織方式。一個包對應一個文件夾,一個包中可以包括很多類文件,包中還可以有子包,形成包等級。Java把類文件放在不同等級的包中。這樣一個類文件就會有兩個名字:一個是類文件的非全限定名,另外一個是類文件的全限定名。非全限定名就是類文件本身的名字,全限定名則是在類文件的名字前面加上包的名字。362
32、 創(chuàng)建包 創(chuàng)建一個包是很簡單的:只要使用一個package語句作為一個Java源文件的第一句,則該源文件中所定義的任何類都將屬于由此package語句指定的包。其語法格式為:package ;其中package是關鍵字,包名是包的標識符。package語句使得其所在文件中的所有的類都屬于指定的包。例如:package myPackage; 也可以創(chuàng)建包的層次。一個多級包的聲明的通用形式如下:package . .;例如,下面的聲明在名為MyPackage的包中創(chuàng)建了它的子包secondPackage。package myPackage .secondPackage;需要注意的是,在一個Java
33、文件中,只允許出現(xiàn)一句package語句。【例3_12】創(chuàng)建包的示例。package pa;class Exam3_12 int i; public Exam3_12(int i) this.i=i;printI(this); public void printI(Exam3_12e)System.out.println (i=+e.i);class Testpublic static void main(String args) Exam3_12 e1=new Exam3_12(1); 我們在程序的最前面加上了package pa一條語句,此時類Exam3_12和Test就屬于包pa。在執(zhí)行
34、javac生成語句時,加 d參數(shù),可在指定目錄下建立一個以包名命名的文件夾,生成好的class文件會存入該目錄中。如上題在生成時可寫為:javac d E:myjava Exam3_12.java此時會在E:myjava目錄下創(chuàng)建一個pa文件夾,生成的class文件存于該文件夾中。若在生成時不使用 d 參數(shù)直接創(chuàng)建新文件夾,也可以先手工建立包文件夾,然后將生成的類存入包文件夾中。但我們一般不推薦使用這種方法。363 訪問包包的存在方便了類的管理,但在使用一個類時必須加上類所在包的包名,這會帶來編程的不便。為此,Java使用import語句來引入特定的類甚至是整個包。一旦被引入,類可以被直呼其名
35、,而不必使用全限定名。在Java源程序文件中,import語句緊接著package語句(如果package 語句存在的話),它存在于任何類定義之前。下面是import聲明的通用形式:import pkg1.pkg2.(classname|*);這里,pkg1是頂層包名,pkg2是在外部包中的用逗點(.)隔離的下級包名。引入包還有另外一種情況,那就是使用一個星號(*)指明要引入這個包中所有的public類。例如:import java.util.Date;/引入java.util.Date類import java.io.*;/引入java.io包中的所有public類【例3_13】訪問包的示例。
36、package pa;import java.lang.Math;class Exam3_13 int i; public Exam3_13(int i) this.i=i;printI(this); public void printI(Exam3_13 e)System.out.println (i=+e.i);class Testpublic static void main(String args)int i=(int)(Math.random()*100); Exam3_13 e1=new Exam3_13(i); 程序中我們使用了import java.lang.Math語句引入了
37、Math類,在程序中就可以使用這個類了。我們在main()方法中使用了Math類的random()方法產(chǎn)生了一個01的隨機數(shù),然后將其轉(zhuǎn)化成一個0100的整數(shù),將其作為Exam3_13類的構(gòu)造函數(shù)的參數(shù),來初始化創(chuàng)建的對象。3.7案例一個銀行帳戶類的設計本節(jié)中,我們設計一個銀行賬戶類,其中包括賬號、儲戶姓名、儲戶身份證號、日期、金額、余額、累計余額等屬性,存款、取款、查詢等方法,并使用自己的包存儲該類。程序如下所示:/銀行帳戶的屬性有賬號、儲戶姓名、儲戶身份證號、日期、金額、余額、累計余額/銀行帳戶的方法有存款、取款、查詢等,package myaccount;class Account fi
38、nal int Max=5; /操作的次數(shù) private int top; /儲戶帳目管理的指針 private int Ac_id; /賬號 private String Ac_name; /儲戶姓名 private long Ac_card; /儲戶身份證號 private String Ac_date=new StringMax; /日期 private int Ac_money=new intMax; /金額 private int Ac_rest=new intMax; /余額 private static int Ac_sum=0; /累計余額 public Account()
39、/構(gòu)造函數(shù),設置各參數(shù) top=0; /儲戶帳目管理的指針 Ac_id=0; /賬號 Ac_name=; /儲戶姓名 Ac_card=0; /儲戶身份證號 void Ac_in(String Ac_name,String aAc_date,int aAc_money)/定義存款的方法 Ac_datetop=aAc_date; Ac_moneytop=aAc_money; Ac_sum=Ac_sum+aAc_money; Ac_resttop=Ac_sum; System.out.println(儲戶姓名+Ac_name+日期+ Ac_datetop+存入+ Ac_moneytop+存款余額+A
40、c_resttop); top+; void Ac_out(String Ac_name,String aAc_date,int aAc_money)/定義存款的方法 Ac_datetop=aAc_date; Ac_moneytop=-aAc_money; Ac_sum=Ac_sum-aAc_money; Ac_resttop=Ac_sum; System.out.println(儲戶姓名+Ac_name+日期+ Ac_datetop+取出+ (-Ac_moneytop)+存款余額+Ac_resttop); top+; void Ac_ask(String Ac_name,String aAc
41、_date)/定義查詢的方法 Ac_datetop=aAc_date; Ac_moneytop=0; Ac_resttop=Ac_sum; System.out.println(儲戶姓名+Ac_name+日期+ Ac_datetop+查詢存款余額+Ac_resttop); top+; public class BankAccount public static void main(String args) /利用實例,調(diào)用儲蓄用戶 Account zhang =new Account(); zhang.Ac_in(張梁,2003.6.6,3000); zhang.Ac_out(張梁,2003.
42、6.8,2000); zhang.Ac_in(張梁,2003.7.7,3000); zhang.Ac_out(張梁,2003.7.9,1500); zhang.Ac_ask(張梁,2003.7.10); Account li =new Account(); li.Ac_in(李巖,2003.8.6,3000); li.Ac_in(李巖,2003.8.7,2000); li.Ac_in(李巖,2003.9.7,3000); li.Ac_out(李巖,2003.9.9,1500); li.Ac_ask(李巖,2003.9.10); 程序中我們創(chuàng)建了銀行儲戶類Account,在其中定義了相關的屬性和
43、方法,為了體現(xiàn)封裝。我們將所有的屬性都定義為私有的訪問權(quán)限,使用方法對這些屬性進行操作,并將類放到了自定義的包中,最后使用BankAccount類對程序進行了測試。程序運行結(jié)果如圖3-10所示。圖3-10程序BankAccount運行結(jié)果小結(jié)Java通過類和對象來組織和構(gòu)建程序。類包括類的聲明和類的主體。類的聲明使用如下格式:修飾符 class extends 父類名 implements 接口名。其中的修飾符確定了類的特性和訪問權(quán)限。abstract類是抽象類,final類是最終類,public具有公共訪問權(quán)限,默認類具有包的訪問權(quán)限。類的主體包括成員變量和成員方法,聲明成員變量的格式為:修
44、飾符 聲明成員方法的格式為: ( 參數(shù)列表 ) throws 變量和方法的修飾符用以表明其特性。public表明該成員可以被任何類訪問,private表明該成員只能被該類所訪問,protected表明該成員可以被同一包中所有類及其他包中該類的子類所訪問,final表明該成員是不可被改變的,static表明該成員是類的成員或者說是一個靜態(tài)成員變量,是一個類所有對象共同擁有的。沒有任何修飾符則為默認訪問權(quán)限,表明該成員可以被同一包中的所有類所訪問。abstract表明此方法是抽象的,必須被覆蓋。類的主體中還包括一個與類名相同無返回值的特殊方法,這就是構(gòu)造函數(shù)。構(gòu)造函數(shù)用來對對象進行初始化。Java
45、虛擬機會自動為類生成一個無參數(shù)的默認構(gòu)造函數(shù),但如果程序中定義了一個或多個構(gòu)造函數(shù),則會屏蔽掉默認的構(gòu)造函數(shù)。有些方法在使用時需要為其傳送參數(shù),this引用可以把當前對象作為參數(shù)傳遞到方法中。類設計好以后,就可以用來定義對象,其格式為: = new 構(gòu)造函數(shù) ( )對象是一種引用類型,存放的是實際對象的內(nèi)存地址。使用對象名來訪問對象的成員變量和方法,以實現(xiàn)對對象的操作,完成程序的功能。通常對對象的成員變量和方法的訪問是使用成員運算符“”。包是類的組織結(jié)構(gòu)。創(chuàng)建包使用import語句,并要作為源文件的第一句。引入包使用import語句,它緊接著package語句后面(如果package 語句存在的話)。包主要用來管理Java中的類并提供訪問控制。實訓3一、實訓目的1. 類的定義,對象的創(chuàng)建及使用,構(gòu)造函數(shù)的使用。2. 包的創(chuàng)建及使用,類及其成員的訪問權(quán)限。3. 理解靜態(tài)和非靜態(tài)成員變量的區(qū)別。4. 學會創(chuàng)建自己的包。二、 實訓內(nèi)容1. 編寫一個學校類,其中包括成員變量scoreLine(錄取分數(shù)線)和對該變量進行設置和獲取的方法。學校類僅包括靜態(tài)成員變量和方法。2. 編寫一個學生類,她的成員變量有考生的name(姓名)、id(考號)、intgre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025福建南平市延平區(qū)區(qū)屬國有企業(yè)社會招聘及擬錄用人員筆試歷年參考題庫附帶答案詳解
- 2025浙江紹興市柯橋區(qū)開發(fā)經(jīng)營集團有限公司招聘11人筆試歷年參考題庫附帶答案詳解
- 湖南省郴州市2024-2025學年高二下學期期末語文試題(含答案)
- 2024年河北省臨城縣人民醫(yī)院公開招聘護理工作人員試題帶答案詳解
- 2024年中國碳纖維原絲行業(yè)市場調(diào)查報告
- 啤酒蛋白酶投資項目分析報告
- 2024年全球及中國電加熱杯墊行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年中國開式索節(jié)行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年油氣回收設備項目立項申請報告
- 合作經(jīng)營協(xié)議書餐飲店合同書
- 七年級上冊口算題300道
- 《2024運動鞋市場與消費趨勢洞察》
- 山東省機場管理集團濟南國際機場股份有限公司招聘筆試題庫2024
- 《計算工具的認識 》(教學設計)-2023-2024學年四年級上冊數(shù)學人教版
- FZ∕T 54007-2019 錦綸6彈力絲行業(yè)標準
- GB/T 4074.3-2024繞組線試驗方法第3部分:機械性能
- 增匯減排技術(shù)與應用智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學
- 《火力發(fā)電建設工程機組調(diào)試技術(shù)規(guī)范》
- 2014年10月自考00730中外音樂史試題及答案含解析
- 員工關系風險防范培訓課件
- 設備維保中的關鍵設備與關鍵件管理
評論
0/150
提交評論