java教程--類與對(duì)象.ppt_第1頁(yè)
java教程--類與對(duì)象.ppt_第2頁(yè)
java教程--類與對(duì)象.ppt_第3頁(yè)
java教程--類與對(duì)象.ppt_第4頁(yè)
java教程--類與對(duì)象.ppt_第5頁(yè)
已閱讀5頁(yè),還剩100頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

4.類與對(duì)象,主講:王華彬,知識(shí)點(diǎn),變量作用域 構(gòu)造方法 方法重載 參數(shù)傳遞 實(shí)例成員和類成員 package import 訪問(wèn)權(quán)限 可變參數(shù),Java技術(shù)及其應(yīng)用,面向?qū)ο蟮娜齻€(gè)特性: 封裝、繼承和多態(tài) 本章學(xué)習(xí)封裝性,類的封裝性體現(xiàn)在,把一類事物所具有的相同的屬性和方法封裝在一起。 然后通過(guò)定義該類的一個(gè)對(duì)象,進(jìn)而對(duì)該對(duì)象的屬性賦值,調(diào)用類的方法,從而完成一定的功能,封裝性,汽車類: CLASS car 屬性: 顏色, 灰色、紅色、黃色 品牌, 法拉利、現(xiàn)代、馬自達(dá) 類型, 賽車、轎跑車、SUV 方法: 啟動(dòng) 前進(jìn) 倒車 熄火 car 羅院長(zhǎng)的車 =new car(); 羅院長(zhǎng)的車.carColor=gray;羅院長(zhǎng)的車.carBrand=現(xiàn)代; 羅院長(zhǎng)的車.carStart();羅院長(zhǎng)的車.carStop();,封裝性,手機(jī)類: CLASS phone 屬性: 顏色, 灰色、紅色、黃色 品牌, 蘋果、谷歌、三星 類型, 觸屏、直板、翻蓋 方法: 開(kāi)機(jī) 撥號(hào) 掛斷 關(guān)機(jī) phone 王瑋的手機(jī) =new phone(); 王瑋的手機(jī).phoneColor=gray;王瑋的手機(jī).phoneBrand=諾基亞*; 王瑋的手機(jī).phonePoweron();王瑋的手機(jī).phonePoweroff();,類定義的一般要求,class Rect double width; double height; double getArea() double area=width*height; return area; 要求:類名是合法標(biāo)示符,且容易理解 定義一個(gè)類包括三步: 取類名 定義屬性 定義方法,類定義的一般要求,class car int carBrand; char carColor; int carKind; /屬性一般寫在方法前習(xí)慣先定義屬性,再定義方法; /一行只定義一個(gè)屬性,不提倡int carBrand , carKind; /變量首字母小寫,第2個(gè)單詞開(kāi)始字母大寫 int startCar(); int forward(); int reversing(); int stopCar(); ; /方法 函數(shù) ,類的屬性 或稱為成員變量,類的屬性初始值,class Rect double width; double height; double getArea() double area=width*height; return area; ,Java技術(shù)及其應(yīng)用,class 類名 成員變量; 成員方法; ,width=0.0; height=0.0;,類成員變量可以不賦初值,默認(rèn)0,false; 局部變量需要賦初值。,類的屬性初始值,class Rect double width=1; double height; double getArea() double area=width*height; return area; class test public static void main(String args) Rect r=new Rect(); System.out.println(r.width); System.out.println(r.height); 思考:程序的輸出?,Java技術(shù)及其應(yīng)用,double width; width=1;,變量作用域,class Rect double width; double height; double area; double getArea() double area=width*height; return area; void setHeight (double height) this.height=height; ,Java技術(shù)及其應(yīng)用,成員變量,方法體內(nèi)局部變量,方法的參數(shù)變量,成員變量,即屬性的有效區(qū)是整個(gè)類; 方法中的局部變量的有效區(qū)是該方法; 方法的參數(shù)的有效區(qū)在該方法中; 當(dāng)成員變量和方法的局部變量或方法的參數(shù)變量相同時(shí),成員變量被隱藏, 即:成員變量在方法中暫時(shí)失效,Java技術(shù)及其應(yīng)用,this關(guān)鍵字,當(dāng)成員變量被同名的局部變量或方法的參數(shù)變量隱藏時(shí)(即成員變量在方法中暫時(shí)失效), 為了表示成員變量,可以用this.成員變量為指代 this指向調(diào)用該成員方法的對(duì)象。 Rect r=new Rect (); this可以理解是r的引用,變量作用域例題,class Variable int x=10;/成員變量 int y; void init() int x=5; y=x; System.out.println(y); 思考:程序輸出?,/此時(shí)y=x=5,變量作用域例題,class Variable int x=10;/成員變量 int y; void init() int x=5; y=this.x; System.out.println(y); ,/此時(shí)y=x=10,class Variable int x=0,y=0,z=0;/成員變量 void init(int x,int y) this.x=x; this.y=y; int z=5;/方法中的局部變量 System.out.println(x+“ “+y+“ “+z); Variable v=new Variable(); System.out.println(v.x+“ “+v.y+“ “+v.z); v.init(20,30); System.out.println(v.x+“ “+v.y+“ “+v.z);,20,30,v.x=20,v.y=30,再來(lái)一個(gè)例題,public class A void f() int m=10,sum=0; if(m9) int z=10; z=2*m+z; for(int i=0;im;i+) sum=sum+i; m=sum; z=i+sum; ,Java技術(shù)及其應(yīng)用,編譯錯(cuò),錯(cuò)在哪兒?,Z的有效區(qū)在if; i的有效區(qū)在for,課后習(xí)題4-8,class B int x=100,y=200; public void setX(int x) x=x; public void setY(int y) this.y=y; public int getXYSum() return x+y; ,Java技術(shù)及其應(yīng)用,B b=new B(); b.setX(-100); /成員變量b.x=? b.setY(-200); /成員變量b.y=? System.out.println(b.getXYSum(); /成員變量x=100; /成員變量y=-200 /X+y=-100,變量作用域知識(shí)點(diǎn)小結(jié),類的成員方法中定義的局部變量或成員方法的參數(shù)變量都會(huì)隱藏掉同名的類的成員變量, 這時(shí)可以使用this關(guān)鍵字來(lái)表示同名的類的成員變量 this關(guān)鍵字指向調(diào)用該成員方法的對(duì)象。,Java技術(shù)及其應(yīng)用,已經(jīng)介紹了類的屬性,接下來(lái)是: ? 類的方法 或稱為成員函數(shù) 1、構(gòu)造方法 2、成員方法,構(gòu)造方法,public class Example public static void main(String args) Rect r1= new Rect(); /創(chuàng)建對(duì)象 r1.width=128;/使用對(duì)象 r1.height=69; double area=r1.getArea(); System.out.println(“rectangle的面積:“+area); ,Java技術(shù)及其應(yīng)用,分配空間,并初始化對(duì)象,調(diào)用構(gòu)造方法,構(gòu)造方法,class Rect double width; double height; double getArea() double area=width*height; return area; ,Java技術(shù)及其應(yīng)用,Rect() ,構(gòu)造方法是一種特殊的方法 構(gòu)造方法名和類名相同 無(wú)返回類型 構(gòu)造方法在new創(chuàng)建對(duì)象時(shí)被調(diào)用 若無(wú)構(gòu)造方法,按照默認(rèn)的構(gòu)造方法僅分配空間 構(gòu)造方法可以重載,Rect r1=new Rect();,構(gòu)造方法: 是一個(gè)函數(shù) 和類同名 對(duì)類的屬性進(jìn)行賦值 可以重載,,構(gòu)造方法的重載,class Rect double width; double height; Rect() width=10.0; height=20.0; Rect(double x,double y) width=x; height=y; double getArea() ,構(gòu)造方法名相同,而 參數(shù)的個(gè)數(shù)或類型不同,Rect() ,構(gòu)造方法的調(diào)用,public class Example public static void main(String args) Rect r1= new Rect(); /創(chuàng)建對(duì)象 double area1=r1.getArea(); Rect r2= new Rect(1,2); /創(chuàng)建對(duì)象 double area2=r2.getArea(); ,Java技術(shù)及其應(yīng)用,一個(gè)類可以定義多個(gè)構(gòu)造方法,根據(jù)參數(shù)個(gè)數(shù)或類型不同, 使用不同的構(gòu)造方法, 構(gòu)造函數(shù)作用是:為對(duì)象分配內(nèi)存空間,為對(duì)象的屬性賦初始值,方法重載(Method Overloading),多個(gè)方法可以享有相同的名字 方法的參數(shù)必須不同 或者是參數(shù)個(gè)數(shù)不同; 或者是參數(shù)類型不同; 完成的功能相似 返回類型不能作為區(qū)分函數(shù)重載的標(biāo)準(zhǔn),方法重載的好處,要打印不同類型的數(shù)據(jù):int, float, String,不需要定義不同名的方法名: printInt(int); printFloat(float); printString(String); 利用方法重載,只需要定義一個(gè)方法名print(),接收不同的參數(shù): print(int); print(float); print(String);,class MethodOverloading void 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 datas “); System.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 MethodOverloadingTest public static void main(String args) MethodOverloading mo=new MethodOverloading(); mo.receive(1); mo.receive(2,3); mo.receive(12.56); mo.receive(“very interesting,isnt it“); ,方法重載例題,多態(tài)性:發(fā)送消息給某個(gè)對(duì)象, 讓該對(duì)象自行決定響應(yīng)何種行為。,書(shū)上例題4-11,見(jiàn).Java文件,Java技術(shù)及其應(yīng)用,練習(xí),課后習(xí)題4-10,Java技術(shù)及其應(yīng)用,小結(jié),構(gòu)造方法 構(gòu)造方法是一種特殊的方法 方法名和類名相同 無(wú)返回類型 構(gòu)造方法在new創(chuàng)建對(duì)象時(shí)被調(diào)用 若無(wú)構(gòu)造方法,按照默認(rèn)的構(gòu)造方法僅分配空間 構(gòu)造方法可以重載,即可以有多個(gè)構(gòu)造方法,Java技術(shù)及其應(yīng)用,類的方法,與c語(yǔ)言的函數(shù)定義基本相同,只不過(guò)在類中稱為方法,在此不再贅述 。 需要注意的是:在方法體內(nèi),成員變量和局部變量的區(qū)別。其實(shí)可以把成員變量當(dāng)做全局變量理解即可。,小結(jié),方法重載 多個(gè)方法可以享有相同的名字 方法的參數(shù)必須不同 或者是參數(shù)個(gè)數(shù)不同; 或者是參數(shù)類型不同; 完成的功能相似 返回類型不能作為區(qū)分函數(shù)重載的標(biāo)準(zhǔn) 體現(xiàn)面向?qū)ο蟮亩鄳B(tài)性,Java技術(shù)及其應(yīng)用,類變量和簡(jiǎn)單數(shù)據(jù)類型變量的區(qū)別,Circle c1; int i;,Java技術(shù)及其應(yīng)用,只聲明,未分配空間,c1=null,聲明的同時(shí)分配空間,簡(jiǎn)單數(shù)據(jù)類型變量,int i; i=1; int j; j=2; j=i;,Java技術(shù)及其應(yīng)用,i,j,1,2,1,i和j分別指向兩塊不同的內(nèi)存區(qū)域。 j=I;把i中的內(nèi)容復(fù)制到j(luò)中;,類變量,Java技術(shù)及其應(yīng)用,Circle c1; c1=new Circle(); Circle c2; c2=new Circle(); c2=c1;,c1,c2,c1和c2指向同一塊內(nèi)存區(qū)域。 c2=c1;c2相當(dāng)于c1的引用; 此時(shí),c2原來(lái)的內(nèi)存空間被釋放;,幾條注意事項(xiàng),1、不要定義沒(méi)有實(shí)體的類的空對(duì)象,必需通過(guò) new+構(gòu)造函數(shù)創(chuàng)建對(duì)象; 2、對(duì)象的名字,可以認(rèn)為是該對(duì)象對(duì)應(yīng)內(nèi)存區(qū)域的一個(gè)引用,即:一個(gè)別名。如果對(duì)象直接進(jìn)行賦值,則原先的內(nèi)存被釋放。 3、在java語(yǔ)言中,類只有構(gòu)造方法,沒(méi)有析構(gòu)方法,只是因?yàn)閖ava語(yǔ)言有垃圾回收機(jī)制。這也正是java程序一般很少有內(nèi)存泄露的原因。,已經(jīng)介紹了類的屬性和方法, 包括:成員變量的作用域 構(gòu)造函數(shù)及重載 對(duì)象創(chuàng)建的原理 接下來(lái),介紹一下方法的參數(shù)傳遞中的注意事項(xiàng),成員方法參數(shù),參數(shù)的類型: 簡(jiǎn)單數(shù)據(jù)類型:傳值,不改變參數(shù)的值; 引用數(shù)據(jù)類型(數(shù)組類型、類或接口):傳地址,可改變參數(shù)的值; class Method void receive(int i)i=6; 在main函數(shù)中,執(zhí)行如下代碼,思考輸出? Method m=new Method (); int a=5; m. receive(a); System.out.println(a);,此時(shí):a為全局變量,通過(guò) 參數(shù)i傳到receive方法中, i相當(dāng)于a的復(fù)制品, i的改變不改變a的值,class Method void receive(int i)i=6; 在main函數(shù)中,執(zhí)行如下代碼,思考輸出? Method m=new Method (); float a=5; m. receive(a); System.out.println(a);,參數(shù)傳遞的值的級(jí)別 不能高于該參數(shù)值, 可以低于該參數(shù)值,參數(shù)傳遞,當(dāng)傳遞的參數(shù)是簡(jiǎn)單類型的時(shí)候,傳值,方法調(diào)用結(jié)束后原值不變; 當(dāng)傳遞的參數(shù)是引用類型的時(shí)候,傳地址,方法調(diào)用結(jié)束后原值會(huì)變。 int a=5; void receive(int i)i=6;,Java技術(shù)及其應(yīng)用,5,5,6,a,i,i,如果參數(shù)是引用的話: 當(dāng)傳遞的參數(shù)是引用類型的時(shí)候,傳地址,方法調(diào)用結(jié)束后原值會(huì)變。 注意: 對(duì)象名是一種引用,5,a,i,6,i=6,再看一個(gè)綜合性的例子!,傳值和傳地址舉例,public class PassTest float ptValue; public void changeInt(int value) value=55; public void changeObjValue(PassTest ref) ref.ptValue=99f; public static void main(String args) int val; PassTest pt=new PassTest(); val=11; pt.changeInt(val); /val=? pt.ptValue=101f; pt.changeObjValue(pt); /pt.ptValue=? ,練習(xí),Java技術(shù)及其應(yīng)用,課堂練習(xí) : 請(qǐng)同學(xué)們思考結(jié)果,并解釋 public class Swap void swapp(int x,int y) int temp; System.out.println(x+“,“+y); temp=x; x=y; y=temp; System.out.println(x+“,“+y); public static void main(String args) int u=30,v=50; System.out.println(u+“,“+v); Swap s=new Swap(); s.swapp(u,v); System.out.println(u+“,“+v); ,練習(xí),Java技術(shù)及其應(yīng)用,public class Swap1 int x,y; void swapp(Swap1 s) int temp; System.out.println(s.x+“,“+s.y); temp=s.x; s.x=s.y; s.y=temp; System.out.println(s.x+“,“+s.y); int u=30,v=50; Swap1 s=new Swap1(); s.x=u; s.y=v; System.out.println(s.x+“,“+s.y); s.swapp(s); System.out.println(s.x+“,“+s.y);,參數(shù)傳遞小結(jié),當(dāng)傳遞的參數(shù)是簡(jiǎn)單類型的時(shí)候,傳值,方法調(diào)用結(jié)束后原值不變; 當(dāng)傳遞的參數(shù)是引用類型的時(shí)候,傳地址,方法調(diào)用結(jié)束后原值會(huì)變。,Java技術(shù)及其應(yīng)用,在之前的學(xué)習(xí)中,我們知道: 類的屬性和方法,必須先創(chuàng)建對(duì)象,然后通過(guò)對(duì)象調(diào)用,為什么輸出函數(shù)可以直接調(diào)用呢? System.out.println(); 請(qǐng)同學(xué)們思考: System是什么? Out是什么? println()是什么?,類成員 和實(shí)例成員 static關(guān)鍵字 靜態(tài)成員:靜態(tài)成員變量和靜態(tài)成員函數(shù),static關(guān)鍵字,class 類名 成員變量; 成員方法; class 類名 成員變量; 成員方法; ,static,static,實(shí)例成員,類成員或 靜態(tài)成員,類變量 和實(shí)例變量,類的組成部分是: 屬性和方法,及成員變量和成員函數(shù) 成員變量的類型分為兩種: class rect int weight; /實(shí)例變量 static int height; /類變量或靜態(tài)變量 ,由static修飾的成員變量,稱為類變量。 1、一個(gè)類的不同對(duì)象,分別分配空間,一個(gè)對(duì)象的實(shí)例變量改變,不影響其他類; 2、但是對(duì)于類變量,在字節(jié)碼文件加載到內(nèi)存時(shí),如果沒(méi)有創(chuàng)建對(duì)象,實(shí)例變量就不分配內(nèi)存,而類變量分配了內(nèi)存,思考:意味著什么? 而且,所有的對(duì)象的類變量都共享同一個(gè)內(nèi)存,即:如果一個(gè)對(duì)象的類變量改變,其他對(duì)象的類變量也同時(shí)改變。,類成員和實(shí)例成員,類成員(屬性或方法) 用static修飾的成員; 屬于類; 所有對(duì)象共享一個(gè)類成員,只有一個(gè)。 實(shí)例成員(屬性或方法) 無(wú)static修飾的成員; 屬于對(duì)象; 每個(gè)對(duì)象都有各自的一個(gè),相互獨(dú)立。,類成員和實(shí)例成員,類成員 用類名或?qū)ο竺麃?lái)調(diào)用; 對(duì)類成員的修改影響整個(gè)類的所有對(duì)象的類成員; 類成員方法只能對(duì)類成員變量進(jìn)行操縱; 實(shí)例成員 用對(duì)象名來(lái)調(diào)用; 對(duì)某對(duì)象實(shí)例成員的修改不會(huì)影響其他對(duì)象的實(shí)例成員;,class Student String name; static String school=“北京大學(xué)“; class t public static void main(String args) System.out.println(Student.school);/正確 System.out.println(Student. name); /錯(cuò)誤 Student stu1=new Student(); System.out.println(stu1.school); System.out.println(stu1. name); /對(duì)于類變量,可以在主函數(shù)中,不創(chuàng)建該類對(duì)象,而直接使用類名進(jìn)行調(diào)用,也可以通過(guò)創(chuàng)建對(duì)象,通過(guò)對(duì)象進(jìn)行調(diào)用,共享內(nèi)存,實(shí)例成員和類成員舉例,舉例memberTest.java,類memberTest,類變量a 實(shí)例變量b,方法,。,對(duì)象a,對(duì)象b,對(duì)象n,類變量a 實(shí)例變量b,函數(shù),類變量a 實(shí)例變量b,函數(shù),類變量a 實(shí)例變量b,函數(shù),類變量a,方法,實(shí)例成員方法在生成第一個(gè)對(duì)象時(shí)被分配了入口地址;,類成員方法在類被裝載內(nèi)存時(shí)被分配了入口地址;,Student.java,public class Student String name; static String school=“北京大學(xué)“; public static void main(String args) Student stu1=new Student(); Student stu2=new Student(); Student stu3=new Student(); =“1“; =“2“; =“3“; System.out.println(+“,“+stu1.school); System.out.println(+“,“+stu2.school); System.out.println(+“,“+stu3.school); stu2.school=“安徽大學(xué)“; System.out.println(+“,“+stu1.school); System.out.println(+“,“+stu2.school); System.out.println(+“,“+stu3.school); /思考程序的輸出結(jié)果 ,Java技術(shù)及其應(yīng)用,對(duì)于方法,也分為:類方法和實(shí)例方法 class rect int start() /實(shí)例方法 static int stop /類方法 1、對(duì)于實(shí)例方法,只有創(chuàng)建對(duì)象后,通過(guò)對(duì)象調(diào)用。 2、對(duì)于類方法,可以不創(chuàng)建對(duì)象直接通過(guò)類名調(diào)用,也可以創(chuàng)建對(duì)象,通過(guò)對(duì)象調(diào)用。 3、實(shí)例方法可以調(diào)用實(shí)例變量和類變量,而類方法不能調(diào)用實(shí)例變量,思考為什么? 因?yàn)椋侯惙椒ㄔ趯?duì)象創(chuàng)建之前就可以使用,而此時(shí)實(shí)例變量還沒(méi)有分配內(nèi)存。,class Student String name; static String school=“北京大學(xué)“; void start1() System.out.println(name); System.out.println(school); static void start() System.out.println(name); System.out.println(school); ,練習(xí),class Student String name; static String school=“北京大學(xué)“; void start1() System.out.println(name); System.out.println(school); static void start() System.out.println(school); class t public static void main(String args) Student.start(); /類方法,可由類名直接調(diào)用 ,Java技術(shù)及其應(yīng)用,main()方法,思考:為什么main()方法用static修飾? public class Student public static void main(String args) java 類名.main() Student .main() 一個(gè)類的main方法必須用static修飾,因?yàn)镴ava運(yùn)行時(shí)系統(tǒng)在開(kāi)始執(zhí)行一個(gè)程序前,并沒(méi)有生成類的一個(gè)實(shí)例,它只能通過(guò)類名來(lái)調(diào)用main方法作為程序的入口。,static關(guān)鍵字小結(jié),用static修飾的類中的成員變量或成員方法,都稱為類的成員;-類 沒(méi)有用static修飾的,稱為實(shí)例成員。-對(duì)象 類的成員唯一;而對(duì)象的成員有多個(gè),每個(gè)相互獨(dú)立。 類的成員由類或?qū)ο髞?lái)調(diào)用;實(shí)例成員由對(duì)象來(lái)調(diào)用 類的成員在類有了之后就存在了,而實(shí)例成員必須在生成對(duì)象之后才存在。,Java技術(shù)及其應(yīng)用,思考: this 關(guān)鍵字 能否在類方法中調(diào)用?為什么? class Rect static double width; static double height; double area=0; static double getArea() double area=width*height; return this.area; ,思考2:,在Java編程中,我們常常用System.out.println()方法來(lái)輸出字符串,也許我們都已經(jīng)猜到println()是方法名,但System是什么,out又是什么呢? 其實(shí)System是java.lang包里面的一個(gè)類 而out就是System類里面的一個(gè)靜態(tài)成員變量,其類型是java.io.PrintStream類; 被關(guān)鍵字static修飾的數(shù)據(jù)成員或方法可以直接通過(guò)“類名.數(shù)據(jù)成員”或“類名.方法”來(lái)引用,而無(wú)須先建立對(duì)象。所以System.out是應(yīng)用了out這個(gè)靜態(tài)數(shù)據(jù)成; 而out又是一個(gè)java.io.PrintStream類的對(duì)象,所以out必然可以調(diào)用java.io.PrintStream類里面的方法,println()就是java.io.PrintStream類里的一個(gè)方法,它的作用就是用來(lái)想控制臺(tái)輸出信息的,class System static java.io.PrintStream out; / System. out class PrintStream println() / System. out . println(),包(package),由于Java編譯器為每個(gè)類生成一個(gè)字節(jié)碼文件,且文件名與類名相同, 因此,同名的類有可能發(fā)生沖突。為了解決這一問(wèn)題,Java提供包來(lái)管理類名空間。 比如:同一文件夾下,不能有相同名稱的文件,而不同文件夾下的文件名可以相同。 c:/我的音樂(lè)/國(guó)歌.MP3 c:/我的音樂(lè)/好聽(tīng)/國(guó)歌.MP3,包(package),Ex1.java public class Ex1 class A package p1; public class Ex1 class A p1.A,Ex2.java public class Ex2 class A package p2; public class Ex2 class A p2.A,package語(yǔ)句,package語(yǔ)句作為Java源文件的第一條語(yǔ)句,指明該文件中定義的類所在的包。(若缺省該語(yǔ)句,則指定為無(wú)名包)。它的格式為: package pkg1.pkg2.pkg3; Java編譯器把包對(duì)應(yīng)于文件系統(tǒng)的目錄管理,package語(yǔ)句中,用 . 來(lái)指明目錄的層次;,package語(yǔ)句,package p1; public class Ex1 class A p1.A p1/A.class,package p2; public class Ex2 class A p2.A p2/A.class,package 的實(shí)際含義是指:定義當(dāng)前java文件所在的文件夾路徑,以及生成字節(jié)碼文件的路徑,命令行下編譯和運(yùn)行帶包的Java程序,若無(wú)package語(yǔ)句,類都放入缺省的無(wú)名包中,對(duì)應(yīng)于當(dāng)前文件夾; 若有package p1; package p1; public class Ex1 Ex1類放入p1包內(nèi), 對(duì)應(yīng)于文件目錄:當(dāng)前目錄下創(chuàng)建p1文件夾,下放Ex1.java文件 編譯方式:javac p1Ex1.java 運(yùn)行方式:java p1.Ex1,練習(xí),package s1.s2.s3.s4; public class Hello 如何存放Hello.java文件? 如何編譯和運(yùn)行? 當(dāng)前文件夾下創(chuàng)建s1,再創(chuàng)建s2,再創(chuàng)建s3, 再創(chuàng)建s4,在s4里面放Hello.java 在當(dāng)前文件夾下javac s1s2s3s4Hello.java 在當(dāng)前文件夾下java s1.s2.s3.s4.Hello,Java技術(shù)及其應(yīng)用,JCreator處理帶包的Java程序,package p1; public class Ex1 class A Jcreator不需把源文件放入p1中,自動(dòng)在當(dāng)前文件夾下創(chuàng)建子目錄p1,并將生成的字節(jié)碼文件Ex1.class和A.class存入其中。,Java技術(shù)及其應(yīng)用,同一個(gè)包,即同一個(gè)文件夾下的類可以互相調(diào)用,如果屬于不同包的類,怎么處理? import命令,import語(yǔ)句,為了能使用不在同一個(gè)包中的其他類,我們需要用import語(yǔ)句來(lái)引入所需要的類。 import package1.package2. (classname |*); 例如: import java.awt.*; import java.util.Date; Java編譯器為所有程序自動(dòng)引入包java.lang,因此不必用import語(yǔ)句引入它所包含的所有類。,import語(yǔ)句,import java.util.Date; java/util/Date.class 當(dāng)前目錄下沒(méi)有java文件夾!? 包的根目錄由classPath決定。 classPath: c:/Program files/java/jdk1.6/jre/lib/rt.jar;.; 思考:如何引入自定義包?,Java技術(shù)及其應(yīng)用,之前,我們做的所有實(shí)驗(yàn),都沒(méi)有定義包,如果一個(gè)源文件沒(méi)有使用包語(yǔ)句,則得到的類沒(méi)有包名,該類如果被使用,必須放在需使用工程的目錄下。 但是,如果有其他包中的類名和該無(wú)包類的類名相同,就可能產(chǎn)生混淆。 比如:現(xiàn)有工程下有一個(gè)無(wú)名包中的類 A;通過(guò)import又引入了一個(gè)類:tom.A,則默認(rèn)情況下, A類認(rèn)為是tom.A。 正確的使用方法是: tom.A a=new tom.A(); /tom.A類 A a=new A(); /無(wú)名包A類,import語(yǔ)句,import java.util. Date ; class myDate Date date=new Date(); Class myDate java.util.Date date=new java.util.Date(); ,小結(jié),package p1; 即指明當(dāng)前java文件的包路徑,方面進(jìn)行工程管理。 Import ,引入其他包中的類,如果引入自定義包中的類,需要在環(huán)境變量中設(shè)置CLASSPATH。 Import 其他包中的類時(shí),一般情況下,最好把類和包的全名都寫上。即: import a.b.c /引入a.b下的c類 a.b.c test=new a.b.c(); 而不要寫成c test=new c();,小結(jié):Java程序結(jié)構(gòu),package p; import ; import ; class class public class . ,Java技術(shù)及其應(yīng)用,0-1個(gè),0-多個(gè),0-多個(gè),1個(gè),訪問(wèn)權(quán)限,class 類名 成員變量; 成員方法; 類名 對(duì)象名=new 類名(); 對(duì)象名.成員變量;,Java技術(shù)及其應(yīng)用,成員的訪問(wèn)權(quán)限,對(duì)類的成員施以一定的訪問(wèn)權(quán)限限定,實(shí)現(xiàn)類中成員在一定范圍內(nèi)的信息隱藏 同一個(gè)類中 同一個(gè)包中 不同包中的子類 不同包中的非子類 private default protected public ,成員的訪問(wèn)權(quán)限,private:同類。 default:同類,同包。默認(rèn)情況下都是default。 protected:同類,同包,子類(不一定要同包) 處在不同包中的子類可以訪問(wèn)父類中限定為protected的成員,但這時(shí)訪問(wèn)這些成員的對(duì)象必須具有子類的類型或是子類的子類類型,而不能是父類類型。 public:所有,private,class Tom private float weight; private float f(float a,float b) return a+b; class Jerry void g() Tom cat=new Tom(); cat.weight=23f; float sum=cat.f(3,4); ,Java技術(shù)及其應(yīng)用,public,class Tom public float weight; public float f(float a,float b) return a+b; class Jerry void g() Tom cat=new Tom(); cat.weight=23f; float sum=cat.f(3,4); ,Java技術(shù)及其應(yīng)用,default,class Tom float weight; float f(float a,float b) return a+b; class Jerry void g() Tom cat=new Tom(); cat.weight=23f; float sum=cat.f(3,4); ,Java技術(shù)及其應(yīng)用,protected,class Tom protected float weight; protected float f(float a,float b) return a+b; class Jerry void g() Tom cat=new Tom(); cat.weight=23f; float sum=cat.f(3,4); ,Java技術(shù)及其應(yīng)用,成員的訪問(wèn)權(quán)限,對(duì)類的成員施以一定的訪問(wèn)權(quán)限限定,實(shí)現(xiàn)類中成員在一定范圍內(nèi)的信息隱藏 同一個(gè)類中 同一個(gè)包中 不同包中的子類 不同包中的非子類 private default protected public ,練習(xí),課后習(xí)題4-7,Java技術(shù)及其應(yīng)用,訪問(wèn)權(quán)限一般做法,class 類名 private folat height; private folat width; public void setHeight(float height) this.height=height; public void setWidth(float width) this.width=width; public float getHeight() r

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論