![第8章Java類(lèi)和對(duì)象_第1頁(yè)](http://file3.renrendoc.com/fileroot3/2021-11/17/d9cfca1d-09e0-49a2-b484-a13b279dc8dd/d9cfca1d-09e0-49a2-b484-a13b279dc8dd1.gif)
![第8章Java類(lèi)和對(duì)象_第2頁(yè)](http://file3.renrendoc.com/fileroot3/2021-11/17/d9cfca1d-09e0-49a2-b484-a13b279dc8dd/d9cfca1d-09e0-49a2-b484-a13b279dc8dd2.gif)
![第8章Java類(lèi)和對(duì)象_第3頁(yè)](http://file3.renrendoc.com/fileroot3/2021-11/17/d9cfca1d-09e0-49a2-b484-a13b279dc8dd/d9cfca1d-09e0-49a2-b484-a13b279dc8dd3.gif)
![第8章Java類(lèi)和對(duì)象_第4頁(yè)](http://file3.renrendoc.com/fileroot3/2021-11/17/d9cfca1d-09e0-49a2-b484-a13b279dc8dd/d9cfca1d-09e0-49a2-b484-a13b279dc8dd4.gif)
![第8章Java類(lèi)和對(duì)象_第5頁(yè)](http://file3.renrendoc.com/fileroot3/2021-11/17/d9cfca1d-09e0-49a2-b484-a13b279dc8dd/d9cfca1d-09e0-49a2-b484-a13b279dc8dd5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第8章章 Java類(lèi)和對(duì)象類(lèi)和對(duì)象本章學(xué)習(xí)重點(diǎn):本章學(xué)習(xí)重點(diǎn):l理解類(lèi)與對(duì)象、封裝的概念 l類(lèi)中成員變量和方法的聲明與使用 l對(duì)象的創(chuàng)建與使用 l包的作用與用法 8.1 面向?qū)ο蟮母拍蠲嫦驅(qū)ο蟮母拍頻傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言是結(jié)構(gòu)化的、面向過(guò)程的,以“過(guò)程”和“操作”為中心來(lái)構(gòu)造系統(tǒng)、設(shè)計(jì)程序,但當(dāng)程序的規(guī)模達(dá)到一定程度時(shí),程序員很難控制其復(fù)雜性。 方法 1 方法 2 方法 3 方法 6 方法 5 方法 4 Main 方法 l由于其他方法的影響數(shù)據(jù)會(huì)發(fā)生改變,同時(shí)數(shù)據(jù)可能會(huì)出乎意料地遭到破壞,這都將導(dǎo)致程序的可靠性降低,并且使程序很難調(diào)試;l修改數(shù)據(jù)時(shí)需要重寫(xiě)與數(shù)據(jù)相關(guān)的每個(gè)方法,這將導(dǎo)致程序的可
2、維護(hù)性降低;l方法和操作的數(shù)據(jù)沒(méi)有緊密地聯(lián)系在一起,由于復(fù)雜的操作網(wǎng)絡(luò)而導(dǎo)致代碼的重用性降低。 方法 1 方法 2 方法 3 方法 6 數(shù)據(jù) 數(shù)據(jù) 數(shù)據(jù) 面向?qū)ο蟮念?lèi)設(shè)計(jì)面向?qū)ο蟮念?lèi)設(shè)計(jì) 類(lèi) 2 類(lèi) 1 數(shù)據(jù) 數(shù)據(jù) 方法 3 方法 6 方法 1 方法 2 l從程序設(shè)計(jì)的觀點(diǎn)來(lái)看,類(lèi)也可以看作是數(shù)據(jù)類(lèi)型,通過(guò)這種類(lèi)型可以方便定義或創(chuàng)建某類(lèi)的眾多具有不同屬性的對(duì)象,因此類(lèi)的引入無(wú)疑擴(kuò)展了程序設(shè)計(jì)語(yǔ)言解決問(wèn)題的能力。l人們把現(xiàn)實(shí)世界分解為一個(gè)個(gè)對(duì)象,解決現(xiàn)實(shí)世界問(wèn)題的計(jì)算機(jī)程序也與此相對(duì)應(yīng),由一個(gè)個(gè)對(duì)象組成,這些程序就稱(chēng)為面向?qū)ο蟮某绦颍帉?xiě)面向?qū)ο蟪绦虻倪^(guò)程就稱(chēng)為面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-O
3、riented Programming,簡(jiǎn)寫(xiě)為OOP) l要想得到正確并且易于理解的程序,必須采用良好的程序設(shè)計(jì)方法。l結(jié)構(gòu)化程序設(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)是兩種主要的程序設(shè)計(jì)方法。結(jié)構(gòu)化程序設(shè)計(jì)建立在程序的結(jié)構(gòu)基礎(chǔ)之上,主張采用順序、循環(huán)和選擇三種基本程序結(jié)構(gòu)以及自頂向下、逐步求精的設(shè)計(jì)方法,實(shí)現(xiàn)單入口、單出口的結(jié)構(gòu)化程序。l面向?qū)ο蟪绦蛟O(shè)計(jì)則主張按人們通常的思維方式建立問(wèn)題域的模型,設(shè)計(jì)盡可能自然地表現(xiàn)客觀世界和求解方法的軟件。類(lèi)和對(duì)象是為實(shí)現(xiàn)這一目標(biāo)而引入的基本概念,面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特征在于類(lèi)的封裝性和繼承性以及由此帶來(lái)的對(duì)象的多態(tài)性。與結(jié)構(gòu)化程序設(shè)計(jì)相比較,面向?qū)ο蟪绦蛟O(shè)計(jì)具有更多的
4、優(yōu)點(diǎn),適合開(kāi)發(fā)大規(guī)模的軟件。 8.2 類(lèi)類(lèi)l類(lèi)是Java語(yǔ)言的最基本概念,是組成Java程序的基本要素;l類(lèi)是Java的執(zhí)行單位,Java運(yùn)行的就是Java類(lèi)本身;l類(lèi)封裝了該類(lèi)對(duì)象的成員變量和方法。lJava的類(lèi)分為兩大部分系統(tǒng)定義的類(lèi)用戶自定義的類(lèi) 定義一個(gè)兔子類(lèi)定義一個(gè)兔子類(lèi) class Rabit final char EyeColor=R; /所有兔子的眼睛都是紅的 int age; /兔子的年齡 char sex; /兔子的性別 char furcolor ; /兔子皮毛的顏色 int speed; /兔子跑的速度一個(gè)簡(jiǎn)單類(lèi)一個(gè)簡(jiǎn)單類(lèi) public class Example pu
5、blic static void main(String args ) System.out.println(“熱烈慶祝中華人民共和國(guó)建國(guó)60周年!”) public class Teacherprivate String name;protected int hours;protected long payment;public Teacher(String name,int hours) =name;this.hours=hours;this.payment=0;public void show() System.out.println(name+工作了+hours+小時(shí)
6、,應(yīng)付+payment);public void countPayment()payment=counting(1000,hours,50,0); public void resetHour() hours=0;public void addHour(int h)hours+=h; protected long counting(int base,int h,int perHour,long other)return (long)base+h*perHour+other;類(lèi)聲明類(lèi)聲明類(lèi)體類(lèi)體成員變量聲明成員變量聲明構(gòu)造函數(shù)構(gòu)造函數(shù)成員方法成員方法類(lèi)聲明類(lèi)聲明l類(lèi)聲明格式如下: 類(lèi)的修飾字cla
7、ss 類(lèi)名extends 父類(lèi)名implements 接口列表lclass是聲明一個(gè)類(lèi)的關(guān)鍵字,是必須的,類(lèi)名是要聲明的類(lèi)的名字,它必須是一個(gè)合法的Java標(biāo)識(shí)符。l根據(jù)聲明類(lèi)的需要,類(lèi)聲明還可以包含三個(gè)選項(xiàng):聲明類(lèi)的修飾符;說(shuō)明該類(lèi)的父類(lèi);說(shuō)明該類(lèi)所實(shí)現(xiàn)的接口。類(lèi)體類(lèi)體l類(lèi)體用一對(duì)大括號(hào)括起。l類(lèi)體中定義了該類(lèi)中所有的變量和該類(lèi)所支持的方法:成員變量對(duì)應(yīng)類(lèi)的靜態(tài)屬性方法對(duì)應(yīng)類(lèi)的行為和操作l成員變量成員變量是類(lèi)和對(duì)象的靜態(tài)屬性,它可以是基本數(shù)據(jù)類(lèi)型的變量,也可以是其它類(lèi)(系統(tǒng)類(lèi)或用戶自定義類(lèi))的對(duì)象。因此,定義成員變量的操作就是說(shuō)明變量或創(chuàng)建對(duì)象的操作。l方法方法是類(lèi)的動(dòng)態(tài)屬性,標(biāo)志了類(lèi)所具有
8、的功能和操作,用來(lái)把類(lèi)和對(duì)象的數(shù)據(jù)封裝在一起。Java的方法與其它語(yǔ)言中的函數(shù)或過(guò)程類(lèi)似,是一段完成某種功能的程序段。成員變量成員變量l最簡(jiǎn)單的成員變量的聲明方式如下:type 成員變量名; 這里的type可以是Java中任意的數(shù)據(jù)結(jié)構(gòu),包括簡(jiǎn)單類(lèi)型、類(lèi)、接口、數(shù)組。在一個(gè)類(lèi)中的成員變量應(yīng)該是唯一的。 l成員變量的作用域是整個(gè)類(lèi)。 l1靜態(tài)成員變量用static修飾的成員變量就是靜態(tài)成員變量(類(lèi)變量)。靜態(tài)成員變量最本質(zhì)的特點(diǎn)是:它們是類(lèi)的成員變量,不屬于任何一個(gè)類(lèi)的具體對(duì)象,它不保存在某個(gè)對(duì)象的內(nèi)存區(qū)成員變量中,而是保存在類(lèi)的內(nèi)存區(qū)成員變量的公共存儲(chǔ)單元。換句話說(shuō),對(duì)該類(lèi)的具體對(duì)象而言,靜態(tài)
9、成員變量是一個(gè)公共的存儲(chǔ)單元。任何一個(gè)類(lèi)的對(duì)象訪問(wèn)它,得到的都是相同的值;任何一個(gè)類(lèi)的對(duì)象修改它,都是對(duì)同一內(nèi)存單元進(jìn)行操作。沒(méi)有用static修飾的變量是實(shí)例變量,必須實(shí)例化該類(lèi)才可以使用實(shí)例變量。該類(lèi)的不同對(duì)象都各自擁有自身的實(shí)例變量的版本。 l2最終成員變量lfinal:用來(lái)聲明一個(gè)常量。如:classFinalVarfinal int CONSTANT=50; l此例中聲明了常量CONSTANT,并賦值為50。對(duì)于用final限定的常量,在程序中不能改變它的值。通常常量名用大寫(xiě)字母表示。 成員方法成員方法l方法由方法聲明和方法體組成,其一般格式如下:public|protected|p
10、rivatestaticfinal|abstractnativesynchronized 返回值類(lèi)型 方法名(形式參數(shù)列表) throws 異常列表 方法體各語(yǔ)句;l其中返回類(lèi)型可以是任意的Java數(shù)據(jù)類(lèi)型,當(dāng)一個(gè)方法不需要返回值時(shí),則必須聲明其返回類(lèi)型為void 。l形式參數(shù)列表指明每個(gè)參數(shù)的名字和類(lèi)型,各參數(shù)之間用逗號(hào)分隔,格式為:形參類(lèi)型1 形參名1,形參類(lèi)型2 形參名2, class Circleint x,y,radius; /x,y,radius是成員變量是成員變量public Circle(int x,int y,int radius) /x,y,radius是參數(shù)是參數(shù)Circ
11、le類(lèi)有三個(gè)成員變量:類(lèi)有三個(gè)成員變量:x、y和和radius。在在Circle類(lèi)的構(gòu)造函數(shù)中有類(lèi)的構(gòu)造函數(shù)中有3個(gè)參數(shù),名字也是個(gè)參數(shù),名字也是x、y和和radius。在方法中出現(xiàn)的在方法中出現(xiàn)的x、y和和radius指的是參數(shù)名,而不是成員變指的是參數(shù)名,而不是成員變量名。量名。如果要訪問(wèn)這些同名的成員變量,必須通過(guò)如果要訪問(wèn)這些同名的成員變量,必須通過(guò)“當(dāng)前對(duì)象當(dāng)前對(duì)象”指示符指示符this來(lái)引用它。來(lái)引用它。 this.x=x;this.y=y;this.radius=radius;thislthis表示的是當(dāng)前對(duì)象本身,更準(zhǔn)確地說(shuō),this代表當(dāng)前對(duì)象的一個(gè)引用。l對(duì)象的引用可以理解
12、為對(duì)象的另一個(gè)名字,通過(guò)引用可以順利地訪問(wèn)到對(duì)象,包括訪問(wèn)、修改對(duì)象的成員變量、調(diào)用對(duì)象的方法。l方法體方法體是對(duì)方法的實(shí)現(xiàn)。它包括局部變量的聲明以及所有合法的Java指令。方法體中可以聲明該方法中所用到的局部變量,它的作用域只在該方法內(nèi)部,當(dāng)方法返回時(shí),局部變量也不再存在。如果局部變量的名字和類(lèi)的成員變量的名字相同,則類(lèi)的成員變量被隱藏。 【例例6-4】成員變量和局部變量的作用域示例。成員變量和局部變量的作用域示例。class Variableint x=0,y=0,z=0; /類(lèi)的成員變量類(lèi)的成員變量void init(int x,int y)this.x=x;this.y=y;int z
13、=5; /局部變量局部變量System.out.println(*in init*);System.out.println(x=+x+ y=+y+ z=+z); public class VariableTestpublic static void main(String args)Variable v=new Variable();System.out.println(*before init*);System.out.println(x=+v.x+ y=+v.y+ z=+v.z);v.init(20,30);System.out.println(*after init*);System.o
14、ut.println(x=+v.x+ y=+v.y+ z=+v.z);方法重載方法重載l方法重載即指多個(gè)方法可以享有相同的名字。但是這些方法的參數(shù)必須不同,或者是參數(shù)個(gè)數(shù)不同,或者是參數(shù)類(lèi)型不同。 【例例】方法重載應(yīng)用舉例。方法重載應(yīng)用舉例。class MethodOverloadingvoid receive(int i) System.out.println(Receive one int data); System.out.println(i+i);void receive(int x,int y)System.out.println(Receive two int datum);Sys
15、tem.out.println(x=+x+ y=+y);void receive(double d)System.out.println(Receive one double data);System.out.println(d=+d);void receive(String s)System.out.println(Receive a string);System.out.println(s=+s);public class MethodOverloadingTestpublic static void main(String args)MethodOverloading mo=new Me
16、thodOverloading();mo.receive(1);mo.receive(2,3);mo.receive(12.56);mo.receive(very interesting,isnt it?);void receive(int i)void receive(int x,int y)void receive(double d) void receive(String s) -receive(1)-receive(2,3)-receive(12.56)-receive(very interesting,isnt it?)重載重載調(diào)用調(diào)用 圖圖 重載與調(diào)用關(guān)系重載與調(diào)用關(guān)系構(gòu)造方法構(gòu)造
17、方法l被自動(dòng)調(diào)用的專(zhuān)門(mén)的初始化方法稱(chēng)為構(gòu)造方法.l構(gòu)造函數(shù)是類(lèi)的一種特殊方法,其特殊性如下:構(gòu)造函數(shù)的方法名與類(lèi)名相同。構(gòu)造函數(shù)沒(méi)有返回值。構(gòu)造函數(shù)的作用是對(duì)類(lèi)的對(duì)象初始化。在創(chuàng)建一個(gè)類(lèi)的新對(duì)象的同時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用該類(lèi)的構(gòu)造函數(shù)。 l構(gòu)造函數(shù)是與類(lèi)同名的方法,創(chuàng)建對(duì)象的語(yǔ)句用new運(yùn)算符開(kāi)辟了新建對(duì)象的內(nèi)存空間后,將調(diào)用構(gòu)造函數(shù)初始化這個(gè)新建對(duì)象。一般將構(gòu)造方法聲明為公共的public型,如果聲明為private型,那么就不能夠創(chuàng)建對(duì)象的實(shí)例了,因?yàn)闃?gòu)造方法是在對(duì)象的外部被默認(rèn)地調(diào)用。 Java語(yǔ)言為每一個(gè)類(lèi)提供了一個(gè)默認(rèn)的構(gòu)造方法,也就是說(shuō),每個(gè)類(lèi)都有構(gòu)造方法,用來(lái)初始化該類(lèi)的一個(gè)新的對(duì)象
18、。如果不定義一個(gè)構(gòu)造方法,Java語(yǔ)言將調(diào)用它提供的默認(rèn)的構(gòu)造方法對(duì)一個(gè)新的對(duì)象進(jìn)行初始化。 在構(gòu)造方法的實(shí)現(xiàn)中,也可以進(jìn)行方法重載?!纠繕?gòu)造方法的實(shí)現(xiàn)。構(gòu)造方法的實(shí)現(xiàn)。class pointint x,y;point( ) /定義構(gòu)造方法定義構(gòu)造方法x=0;y=0;point(int x, int y) /構(gòu)造方法的重載構(gòu)造方法的重載this.x=x;this.y=y; main( )方法方法lmain( )方法是Java應(yīng)用程序必須具備的方法。格式是: public static void main(String args) l所有Java的獨(dú)立應(yīng)用程序都從main()開(kāi)始執(zhí)行。把st
19、atic放在方法名前就使方法變?yōu)殪o態(tài)的方法,即類(lèi)方法而非實(shí)例方法。finalize( )方法方法l在對(duì)對(duì)象進(jìn)行垃圾收集前,Java運(yùn)行時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用對(duì)象的finalize()方法來(lái)釋放系統(tǒng)資源,如打開(kāi)的文件或socket。該方法的聲明必須如下所示:protected void finalize( ) throws throwablel注意如果不定義finalize方法,Java將調(diào)用它提供的默認(rèn)的finalize方法進(jìn)行掃尾工作。【例例】finalize方法舉例。方法舉例。class myclassint m_DataMember1;float m_DataMember2;public my
20、Class() /構(gòu)造函數(shù)構(gòu)造函數(shù)m_DataMember1=1; /初始化變量初始化變量m_DataMember2=7.25;void finalize()/定義定義finalize方法方法m_DataMember1=null;/釋放內(nèi)存釋放內(nèi)存m_DataMember2=null; 8.3 對(duì)象對(duì)象l對(duì)象是類(lèi)的實(shí)例化,對(duì)象的創(chuàng)建是通過(guò)對(duì)象構(gòu)造方法來(lái)實(shí)現(xiàn)的;l我們可以生成多個(gè)對(duì)象,通過(guò)消息傳遞來(lái)進(jìn)行交互,最終完成復(fù)雜的任務(wù);l消息傳遞是指激活指定的某個(gè)對(duì)象的方法,以改變它的狀態(tài)或使其產(chǎn)生一定的動(dòng)作。l一個(gè)對(duì)象的生命期包括三個(gè)階段:創(chuàng)建、使用和清除。對(duì)象的創(chuàng)建對(duì)象的創(chuàng)建l對(duì)象的創(chuàng)建包括聲明、實(shí)
21、例化和初始化三方面的內(nèi)容。l一般格式為:type ObjectName=new type(paramlist);type objectName聲明了一個(gè)類(lèi)型為type的對(duì)象,其中type是引用類(lèi)型(包括類(lèi)和接口),對(duì)象的聲明并不為對(duì)象分配內(nèi)存空間。運(yùn)算符new為對(duì)象分配內(nèi)存空間,實(shí)例化一個(gè)對(duì)象。new調(diào)用對(duì)象的構(gòu)造方法,返回對(duì)該對(duì)象的一個(gè)引用(即該對(duì)象所在的內(nèi)存地址)。生成對(duì)象的最后一步是執(zhí)行構(gòu)造方法,進(jìn)行初始化。由于對(duì)構(gòu)造方法可以進(jìn)行重寫(xiě),所以通過(guò)給出不同個(gè)數(shù)或類(lèi)型的參數(shù)會(huì)分別調(diào)用不同的構(gòu)造方法。如果類(lèi)中沒(méi)有定義構(gòu)造方法,系統(tǒng)會(huì)調(diào)用缺省的空構(gòu)造函數(shù)。 【例例】定義類(lèi)并創(chuàng)建類(lèi)的對(duì)象。定義類(lèi)并創(chuàng)
22、建類(lèi)的對(duì)象。class Computer String Owner; /成員變量成員變量 public static void main(String args) void set_Owner(String owner) /成員方法成員方法Owner=owner; void show_Owner( )System.out.println(這臺(tái)電腦是這臺(tái)電腦是:+Owner+的的); class DemoComputer public static void main(String args) System.out.println(使用類(lèi)使用類(lèi));Computer MyComputer=new
23、Computer( ); /生成類(lèi)的對(duì)象生成類(lèi)的對(duì)象Mycomputer.set_Owner(知識(shí)工程教研室知識(shí)工程教研室);Mycomputer.show_Owner( ); Computer MyComputer=new Computer( );l等價(jià)于:Computer MyComputer;MyComputer=new Computer( );其中MyComputer是對(duì)象的名稱(chēng),它是一個(gè)屬于Coputer類(lèi)的對(duì)象,能夠調(diào)用Computer類(lèi)中的set_Owner( )、show_Owner( )方法。對(duì)象的使用對(duì)象的使用l要訪問(wèn)或調(diào)用一個(gè)對(duì)象的成員變量或方法,首先訪問(wèn)該對(duì)象,然后用成
24、員運(yùn)算符“.”可以實(shí)現(xiàn)對(duì)變量的訪問(wèn)和方法的調(diào)用。 例如:Mycomputer.set_Owner(“知識(shí)工程教研室”);Mycomputer.show_Owner( );對(duì)象的清除對(duì)象的清除l對(duì)象的清除,即系統(tǒng)內(nèi)無(wú)用單元的收集。 lJava運(yùn)行時(shí)系統(tǒng)通過(guò)垃圾收集周期性地釋放無(wú)用對(duì)象所使用的內(nèi)存,完成對(duì)象的清除。 lJava采用自動(dòng)垃圾收集進(jìn)行內(nèi)存管理,使程序員不需要跟蹤每個(gè)生成的對(duì)象,這是Java的一大優(yōu)點(diǎn)。l當(dāng)下述條件滿足時(shí),Java內(nèi)存管理系統(tǒng)將自動(dòng)完成收集內(nèi)存工作。(1)當(dāng)堆棧中的存儲(chǔ)器數(shù)量少于某個(gè)特定水平時(shí);(2)當(dāng)程序強(qiáng)制調(diào)用系統(tǒng)類(lèi)的方法時(shí);(3)當(dāng)系統(tǒng)空閑時(shí)。8.4 訪問(wèn)控制符訪問(wèn)
25、控制符l訪問(wèn)控制符是一組限定類(lèi)、成員變量或方法是否可以被程序里的其它部分訪問(wèn)和調(diào)用的修飾符。l類(lèi)的訪問(wèn)符只有public。l成員變量和方法的訪問(wèn)控制符有三個(gè):publicprivateprotected類(lèi)的訪問(wèn)控制符類(lèi)的訪問(wèn)控制符l1公共訪問(wèn)控制符public Java中類(lèi)的訪問(wèn)控制符只有一個(gè):public,即公共類(lèi)。一個(gè)類(lèi)被聲明為公共類(lèi),聲明它可以被所有其他類(lèi)所訪問(wèn)和引用,這里的訪問(wèn)和引用是指這個(gè)類(lèi)作為整體是可見(jiàn)和可使用的。 Java的類(lèi)是通過(guò)包來(lái)組織,處于同一包中的類(lèi)可以不需任何說(shuō)明而方便的互相訪問(wèn)和引用,而對(duì)于處于不同包中的類(lèi),缺省的它們是互相之間不可見(jiàn)的。但是,當(dāng)一個(gè)類(lèi)被聲明為publ
26、ic時(shí),它就具有了被其它包中類(lèi)訪問(wèn)的可能性,只要這些包中的類(lèi)在程序中使用import語(yǔ)句引入public類(lèi),就可訪問(wèn)它了。一個(gè)類(lèi)作為整體可見(jiàn),并不能代表類(lèi)中的成員變量和方法也一定可見(jiàn),除非它們也被聲明為public。l2.缺省訪問(wèn)控制符 若一個(gè)類(lèi)沒(méi)有訪問(wèn)控制符,說(shuō)明它具有缺省的訪問(wèn)控制特性。該訪問(wèn)控制規(guī)定這樣的類(lèi)只能被同一個(gè)包中的類(lèi)訪問(wèn)和引用,而不能被其他包中的類(lèi)使用,這種訪問(wèn)特性又稱(chēng)包訪問(wèn)性。通過(guò)聲明類(lèi)的訪問(wèn)控制符可以使整個(gè)程序結(jié)構(gòu)清晰、嚴(yán)謹(jǐn),減少可能產(chǎn)生的類(lèi)之間的干擾和錯(cuò)誤。 對(duì)類(lèi)成員的訪問(wèn)控制對(duì)類(lèi)成員的訪問(wèn)控制 l當(dāng)一個(gè)類(lèi)可以被訪問(wèn)時(shí),對(duì)類(lèi)內(nèi)的成員變量和成員方法而言,其應(yīng)用范圍可以通過(guò)施
27、以一定的訪問(wèn)權(quán)限來(lái)限定。同一個(gè)類(lèi)中同一個(gè)包中不同包中的子類(lèi)不同包中的非子類(lèi)(任意類(lèi))privatedefaultprotectedpublicl私有訪問(wèn)控制符用private修飾的成員變量或方法只能被該類(lèi)自身所訪問(wèn)和修改,而不能被任何其它類(lèi)(包括該類(lèi)的子類(lèi))來(lái)獲取和引用。private修飾符提供了最高的保護(hù)級(jí)別。 class Alphaprivate int iamprivate; / private成員變量成員變量private void privateMethod( ) / private成員方法成員方法System.out.println(privateMethod); class Be
28、ta void accessMethod( ) Alpha a=new Alpha( ); a.iamprivate=10; /非法非法 a.privateMethod( ); /非法非法 l缺省訪問(wèn)控制符類(lèi)中不加任何防問(wèn)權(quán)限限定的成員屬于缺省的(default)訪問(wèn)狀態(tài),可以被這個(gè)類(lèi)本身和同一個(gè)包中的類(lèi)所訪問(wèn)。這個(gè)訪問(wèn)級(jí)別是假設(shè)在相同包中的類(lèi)是互相信任的。 package Greek;public class Alphaint iamprivate;void packageMethod( ) System.out.println(packageMethod); package Greek;c
29、lass Betavoid accessMethod( ) Alpha a=new Alpha( ); a.iamprivate=10; /合法合法 tectedMethod( ); /合法合法 Alpha類(lèi)可以訪問(wèn)自己的成員,同時(shí)所有定義在與類(lèi)可以訪問(wèn)自己的成員,同時(shí)所有定義在與Alpha同一個(gè)同一個(gè)包中的類(lèi)也可以訪問(wèn)這些成員。包中的類(lèi)也可以訪問(wèn)這些成員。如如Alpha和和Beta都定義為都定義為Greek包的一部分,則包的一部分,則Beta可以合法訪可以合法訪問(wèn)問(wèn)Alpha的成員。的成員。 l保護(hù)訪問(wèn)控制符protectedl用protected修飾的成員變量和方法可以被三種類(lèi)引
30、用:該類(lèi)自身;與它在同一個(gè)包中的其它類(lèi);在其它包中的該類(lèi)的子類(lèi)。l使用protected修飾符的主要作用是允許包中的類(lèi)和其它包中的子類(lèi)來(lái)訪問(wèn)父類(lèi)的特定屬性。 l公共訪問(wèn)控制符public被定義為public的方法是這個(gè)類(lèi)對(duì)外的接口部分,程序的其它部分通過(guò)調(diào)用public方法達(dá)到與當(dāng)前類(lèi)交換信息、甚至影響當(dāng)前類(lèi)的目的。用public修飾的成員變量被稱(chēng)為公共成員變量,如果一個(gè)公共成員變量屬于一個(gè)公共類(lèi),則它可被所有其它類(lèi)所引用。public修飾符會(huì)造成安全性和數(shù)據(jù)封裝性下降,所以一般應(yīng)減少public成員變量的使用。訪問(wèn)控制符小結(jié)訪問(wèn)控制符小結(jié)l公共訪問(wèn)控制符(public):public類(lèi):公共
31、類(lèi),可以被其他包中類(lèi)引入后訪問(wèn)。public方法:是類(lèi)的接口,用于定義類(lèi)中對(duì)外可用的功能方法。public變量:可以被其他類(lèi)訪問(wèn)。l缺省訪問(wèn)控制符的類(lèi)、變量、方法:具有包訪問(wèn)性(只能被同一個(gè)包中的類(lèi)訪問(wèn))。l私有訪問(wèn)控制符(private):修飾變量或方法,只能被該類(lèi)自身所訪問(wèn)。l保護(hù)訪問(wèn)控制符(protected):修飾變量或方法,可以被類(lèi)自身、同一包中的類(lèi)、任意包中該類(lèi)的子類(lèi)所訪問(wèn)。8.5 包包l利用Java語(yǔ)言開(kāi)發(fā)實(shí)際系統(tǒng)時(shí),可以利用“包”來(lái)管理類(lèi)。包是類(lèi)和接口的集合,為了方便編程和管理,通常把需要在一起工作的類(lèi)放在一個(gè)包里。 l為Java創(chuàng)建一個(gè)源碼文件的時(shí)候,它通常叫做一個(gè)“編輯單元
32、”,每個(gè)編輯單元必須有一個(gè)以java結(jié)尾的名字。l缺省情況下,系統(tǒng)為每個(gè).java源文件創(chuàng)建一個(gè)無(wú)名包,該文件中定義的所有類(lèi)都隸屬于該包,但由于該包無(wú)名字,所以不能被其它包引用。為了解決這個(gè)問(wèn)題,就要?jiǎng)?chuàng)建有名包。l標(biāo)準(zhǔn)的Java包列表 包功能描述java.applet包含一些用于創(chuàng)建Java小應(yīng)用程序的類(lèi)java.awt包含一些編寫(xiě)平臺(tái)無(wú)關(guān)的圖形用戶界面(GUI)應(yīng)用程序的類(lèi)。它包含幾個(gè)子包,包括java.awt.peer和java.awt.imagejava.io包含一些用作輸入輸出(I/O)處理的類(lèi)。數(shù)據(jù)流就包含在這里java.1ang包含一些基本Java類(lèi)。java.1ang是被隱式地引入的,所以用戶不必引入它的類(lèi)包含用于建立網(wǎng)絡(luò)連接的類(lèi)。與java.io同時(shí)使用以完成與網(wǎng)絡(luò)有關(guān)的讀和寫(xiě)java.util包含一些其他的工具和數(shù)據(jù)結(jié)構(gòu),如編碼、解碼、向量和堆棧等包的創(chuàng)建包的創(chuàng)建l用package關(guān)鍵字創(chuàng)建包,而且該語(yǔ)句是.java源文件的第一個(gè)語(yǔ)句,前面不能有注釋和空
溫馨提示
- 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年度電子產(chǎn)品進(jìn)口代理與知識(shí)產(chǎn)權(quán)保護(hù)合同
- 2025年度裝配式建筑部品部件采購(gòu)合同匯編
- 2025年度建筑工程漿砌石分包合同模板
- 2025年度空調(diào)行業(yè)人才培訓(xùn)與就業(yè)合同
- 2025年度國(guó)際貨物貿(mào)易風(fēng)險(xiǎn)管理服務(wù)合同模板
- 2025年度生物肥料采購(gòu)與專(zhuān)業(yè)物流配送合同
- 2025年度化工產(chǎn)品運(yùn)輸合同(含司機(jī)培訓(xùn))
- 2025年度體育賽事運(yùn)營(yíng)合同(含擔(dān)保及賽事安全保障)
- 2025年度全國(guó)冷鏈物流配送服務(wù)合同范本
- 2025年度網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估與防范合同
- 報(bào)價(jià)單(報(bào)價(jià)單模板)
- 刑事案件模擬法庭劇本完整版五篇
- 2014教師事業(yè)單位工作人員年度考核登記表1
- 烏海周邊焦化企業(yè)概況
- 22S803 圓形鋼筋混凝土蓄水池
- Flash動(dòng)畫(huà)設(shè)計(jì)與制作(FlashCS6中文版)中職PPT完整全套教學(xué)課件
- 2023年開(kāi)心英語(yǔ)四年級(jí)上冊(cè)全冊(cè)練習(xí)
- Hadoop大數(shù)據(jù)開(kāi)發(fā)實(shí)例教程高職PPT完整全套教學(xué)課件
- 新人教版小學(xué)數(shù)學(xué)五年級(jí)下冊(cè)教材分析課件
- 企業(yè)中層管理人員測(cè)評(píng)問(wèn)題
- 人教版高中地理必修一全冊(cè)測(cè)試題(16份含答案)
評(píng)論
0/150
提交評(píng)論