Java程序設計項目式教程 課件 單元4 Java繼承_第1頁
Java程序設計項目式教程 課件 單元4 Java繼承_第2頁
Java程序設計項目式教程 課件 單元4 Java繼承_第3頁
Java程序設計項目式教程 課件 單元4 Java繼承_第4頁
Java程序設計項目式教程 課件 單元4 Java繼承_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

§4-1不同類別學生信息的管理Java面向對象程序設計教學目標任務分析

說到學生大家肯定都不陌生,在每個人的腦海中定都會呈現(xiàn)出不同的學生形象。那么如何對學生下一個定義呢?百度百科中是這樣描述的:“學生,也叫學子;一般指正在學校、學堂或其他學習地方受教育的人,而在研究機構或工作單位(如醫(yī)院、研究所)學習的人也稱學生,根據學習的不同階段,可以把學生分為:幼兒園學生、小學生、中學生、高等院校學生(大學生、碩士研究生、博士研究生)等等?!庇纱丝梢姟霸趯W校接受學習教育”是學生的共性,小學生、中學生、大學生又各有不同的特點。我們如何通過Java程序來描述學生這一群體呢?

通過本單元Java繼承相關知識的學習,就可以非常高效地解決此問題。教學內容1Java繼承的實現(xiàn)Java中的繼承23繼承與構造方法成員的隱藏與覆蓋45super和final關鍵字一、Java中的繼承繼承是面向對象程序設計中最為關鍵的概念及編程技術。類的繼承也稱為類的派生,一個新類可以從另一個已存在的類中派生,這個過程便稱為類的繼承。派生出的新類稱為已有類的子類(Subclass)或派生類(Derivedclass),已有類稱為基類(Baseclass)、父類(Parentclass)或超類(Superclass)。類的繼承性很好地解決了軟件的代碼重用性問題。通過繼承,一個類可以擁有已有類的功能。即子類不但可以繼承父類的行為和屬性,它還可以根據需要增加自己的行為和屬性。Java只支持單重繼承,所以Java程序中的類層次結構是樹狀結構。什么是繼承一、Java中的繼承【例4-1】類繼承程序示例。classVehicle{

publicvoidstart(){

System.out.println(“Starting...”);}}classCarextendsVehicle{publicvoiddrive(){

System.out.println(“Driveing...”);}}publicclassTestVehicle{publicstaticvoidmain(string[],args){

System.out.println(“Createingacar...”);Carc=newCar();c.start();c.drive();}}二、Java繼承的實現(xiàn)Java中的繼承是通過在類聲明中加入extends關鍵字來實現(xiàn)的。其一般格式如下:

[類修飾符]class子類名extends父類名{

//子類類體

}例如:

classCarextendsVehicle二、Java繼承的實現(xiàn)1)子類可以繼承父類中所有非私有的變量成員和方法成員。2)子類不能繼承父類的構造方法,因為父類構造方法創(chuàng)建的是父類對象,子類必須聲明自己的構造方法,用于創(chuàng)建子類自己的對象。但在子類構造方法中可以(顯式或隱式地)調用父類的構造方法。3)子類可以聲明自己的變量成員和方法成員。如果子類聲明了與父類同名的成員,則不能繼承父類的成員,此時子類成員覆蓋(或隱藏)了父類的成員。4)子類不能刪除父類成員。5)子類對象對父類對象的訪問權限遵循表3-1中的訪問權限規(guī)定。6)extends關鍵字后即為父類的名字。其實這個父類也可以是另一個類的子類,所以父類、子類是相對的。Java繼承遵循的規(guī)則二、Java繼承的實現(xiàn)【例4-2】子類的創(chuàng)建與實現(xiàn)示例1。//創(chuàng)建父類AclassA{inti,j;voidshowij(){

System.out.println("iandj:"+i+""+j);}}//創(chuàng)建類A的子類BclassBextendsA{intk;//k是子類B加入的成員變量.voidshowk(){System.out.println("k:"+k);}voidsum(){

System.out.println("i+j+k:"+(i+j+k));}}classExample{publicstaticvoidmain(Stringargs[]){AsuperObj=newA();BsubObj=newB();//父類的對象可以使用自己的成員變量.superObj.i=10;superObj.j=20;System.out.println("父類可用的成員變量有:");superObj.showij();System.out.println();//子類可以引用父類的非private成員變量及子類自己的成員變量subObj.i=7;subObj.j=8;subObj.k=9;System.out.println("子類可用的成員變量有:");subObj.showij();subObj.showk();System.out.println();System.out.println("子類中成員變量的和為:");subObj.sum();}}二、Java繼承的實現(xiàn)【例4-3】子類的創(chuàng)建與實現(xiàn)示例2。//創(chuàng)建父類A.classA{inti;//默認權限的成員變量.privateintj;//只限于A使用的局部成員變量.

publicvoidsetij(intx,inty){i=x;j=y;}publicintgetj(){

returnj;

}}//創(chuàng)建類A的子類B.classBextendsA{inttotal;voidsum(){

total=i+j;

//語法錯誤。子類B無權訪問A類中的用private成員j.

total=i+getj();//允許}}classAccess{publicstaticvoidmain(Stringargs[]){BsubOb=newB();subOb.setij(10,12);subOb.sum();System.out.println("Totalis"+subOb.total);}}說明:1)子類只能繼承父類中的非私有成員2)Java中每個類都有父類,如果沒有顯式地標明類的父類,則隱含為java.lang包中的Object類。三、成員的隱藏與覆蓋子類不僅可以繼承父類的所有非私有成員,還可以對父類的屬性變量及方法進行重新定義,分別稱為變量隱藏和方法覆蓋。若子類定義了與父類同名的變量成員,則父類中同名的變量成員將被隱藏起來。當在子類對象中直接通過變量名訪問變量成員時,訪問到的是子類的同名變量,如果需要訪問同名的父類變量,必須通過父類名或super關鍵字來訪問。1.變量成員的隱藏三、成員的隱藏與覆蓋【例4-4】變量隱藏示例1。//創(chuàng)建父類A1classA1{inti=100;}//創(chuàng)建類A1的子類B1publicclassB1extendsA1{inti=200;//子類B1的同名成員變量ivoidprint(){System.out.println("子類中i="+i);System.out.println("父類中i="+super.i);//訪問父類A的同名成員變量i}publicstaticvoidmain(Stringargs[]){ (newB1()).print();}}三、成員的隱藏與覆蓋【例4-5】變量隱藏示例2。classA2{intm=5;publicvoidsetM(inti){

m=i;

}voidprinta(){

System.out.println("m="+m);

}}classB2extendsA2{

intm=10;voidprintb(){super.m=super.m+20;System.out.println("super.m="+super.m+"m="+m);}}publicclassTest{publicstaticvoidmain(String[]args){A2a=newA2();a.setM(50);a.printa();B2b=newB2();b.printb();b.printa();b.setM(60);b.printb();b.printa();a.printa();}}三、成員的隱藏與覆蓋子類中除可以定義自己的方法之外,也可對父類中的方法進行重新定義,這種情況稱為方法覆蓋(或重寫)。當調用一個對象的方法時,Java總是先在該對象所屬的類中尋找該方法的定義,如果找不到,就到該類的上一級別的類中去尋找,直到找到了該方法的定義。如果需要調用父類中被覆蓋的方法,則使用關鍵字super。方法覆蓋中需要注意的問題是,子類重新定義父類已有的方法時,應保持與父類完全相同的方法名、返回值和參數列表。2.方法覆蓋三、成員的隱藏與覆蓋【例4-6】方法覆蓋示例程序。//創(chuàng)建父類A3.classA3{inti;voidsetValue(){

i=100;

}publicvoidchangeValue(){

i=i-50;

}publicvoidprint(){

System.out.println("父類中i="+i);}}//創(chuàng)建類A的子類B3.classB3extendsA3{intk;

//k是子類B3加入的成員變量.voidsetValue(){

k=200;

}publicvoidchangeValue(){

k=k+50;

}publicvoidprint(){

super.print();//調用父為中的print()方法System.out.println("子類中k="+k);}}publicclassMethOver{publicstaticvoidmain(Stringargs[]){A3obj1=newA3();B3obj2=newB3();obj1.setValue();obj1.changeValue();obj1.print();obj2.setValue();obj2.changeValue();obj2.print();}}說明:如果將子類中changeValue()方法和print()方法的類修飾符public去年或改為private,程序就不能通過編譯,因為Java中規(guī)定,子類中重定義的方法不能比它所覆蓋的方法具有更嚴格的訪問權限。特別地,如果父類方法是public,那么子類方法一定要聲明為public,如果遺漏將發(fā)生編譯錯誤。三、成員的隱藏與覆蓋所謂多態(tài)是指不同類型的對象對同一行為作出的不同反應,多態(tài)是繼封裝、繼承之后,面向對象程序設計的第三大特性。例如不同階段學生的學習,就是同一行為,但學習的具體內容和具體實現(xiàn)過程是不一樣的,現(xiàn)實中這種的例子還有很多,Java中稱其為多態(tài)。即同一行為,不同對象有不同的實現(xiàn)方式或狀態(tài)。Java面向對象程序設計中實現(xiàn)多態(tài)技術的兩種重要手段是方法重載和方法覆蓋,實際編程中要注意兩者的區(qū)別。方法覆蓋是對從父類所繼承的方法進行重寫,而且要示要保持與父類同名方法完全相同的方法聲明部分(即應與父類有完全相同的方法名、返回值和參數列表);方法重載是同一類中有多個同名方法,且要求與被重載的方法必須有不同的參數列表。3.類的多態(tài)及實現(xiàn)四、繼承與構造方法當一個類被實例化時,它的構造方法自動被調用。當一個子類被實例化時,即使沒有加入任何調用構造方法的語句,子類的構造方法和父類的構造方法都被自動地調用。classSuperClass{publicSuperClass(){

System.out.println("SuperClassconstructor");

}publicSuperClass(Stringmsg){

System.out.println("SuperClassconstructor:"+msg);

}}【例4-7】隱含調用父類構造方法示例。比較程序運行結果,認識構造方法的調用規(guī)則。classSubClassextendsSuperClass{publicSubClass(Stringmsg){System.out.println("SubClassconstructor:"+msg);

}}publicclassTestSuper{publicstaticvoidmain(Stringargs[]){

SubClassdescendent=newSubClass("Test");

}}四、繼承與構造方法1)如果在子類的構造方法中沒有明確地調用父類的構造方法,則系統(tǒng)在創(chuàng)建子類時會自動調用父類的默認構造方法(即無參構造方法)。2)如果在子類的構造方法中有明確地調用父類的構造方法的語句,則調用語句必須是子類構造方法的第一個語句。構造方法調用規(guī)則五、super和final關鍵字關鍵字super可以用于兩種用途:一是調用父類的構造方法;二是調用父類中的成員。(1)調用父類的構造方法super用于調用父類的構造方法,其語法格式為:

super();或super(參數列表);該語句必須出現(xiàn)在子類構造方法的第一個語句。(2)調用父類中的成員當在子類中定義了與父類同名的變量或方法時,父類中的同名成員則被隱藏,如果要調用父類中的同名成員,則要加前綴super。其語法格式為:

super.變量名;或super.方法名([參數列表]);1.super關鍵字五、super和final關鍵字Java中關鍵字final可以用來修飾類、方法或變量。(1)final修飾類,阻止繼承對于不允許被繼承的類,可以使用final修飾符將它們定義為最終類。如:

finalclassberd{

publicvoidfly(){

……

}

}

該類將不能用來產生子類,否則將產生編譯錯誤。2.final關鍵字五、super和final關鍵字(2)final修飾方法,阻止該方法被覆蓋如果一個方法不希望被覆蓋,則可使用fina將其說明為最終方法。如:

classanimal{

finalvoidbreath(){

……

}

}該方法將不能被覆蓋,否則同樣會產生編譯錯誤。(3)final修飾屬性,用于聲明常量final另一個作用是用來說明常量。如:

finalintA=10;則A將被定義為常量,其值將不能再被改變。2.final關鍵字任務實施編程分別描述小學生、中學生、大學生的屬性和學習特點。1)任務分析。無論是小學生、中學生、大學生均為學生,所有他們都具有學生的屬性和行為。如:都需要有學號、姓名、性別、年齡等基本的屬性,都必須有完成學習的行為;但又因為他們處于不同的成長、學習階段,各自又有一些獨特屬性,如大學生要有所學專業(yè)方面的屬性,不同學生完成學習這一行為所使用學習方法也各不同。2)任務實施。三類學生既有共同屬性和行為,也有各自特別的屬性和行為方式,為了提高編程效率,可以使用Java繼承來實現(xiàn)。首先定義父類Student,然后分別定義代表小學生、中學生和大學生的子類:SStudent、MStudent、GStudent,還要有一個提供程序執(zhí)行入口的主類:TestStudent。完成“工單4-1”訓練任務同步訓練課后作業(yè)P83課后作業(yè),三、1

§4-2使用抽象類實現(xiàn)學生類繼承Java面向對象程序設計教學目標任務分析

在上一任務的實施中,父類定義的表示“信息顯示”和“學習行為”的兩個方法,并不完全適合各個子類,每個子類都需要對這兩個方法進行重寫,所以父類中對這兩個方法的定義是不確定的。對于這種類似情況,Java提供了抽象方法來滿足這種編程需求。教學內容1抽象類抽象方法2一、抽象方法Java中用關鍵字abstract聲明抽象方法,抽象方法聲明的一般格式為:

abstract類型方法名([參數列表]);如:

publicabstractvoidcomputeArea();

publicabstractvoidcomputePerimeter();抽象方法只有方法的說明部分,方法體被一個分號(;)代替,方法的具體實現(xiàn)由各個子類完成。所有的抽象方法必須存在于抽象類中。二、抽象類抽象類是不能使用new關鍵字進行實例化的類,即沒有具體實例對象的類。抽象類同樣使用abstract關鍵字進行修飾。抽象類聲明的一般格式為:

[public]abstractclass類名{

類體

}抽象類中可以包含常規(guī)類中能夠包含的所有成員。如可將Student類定義為如下抽象類。

abstractclassStudent{

Stringsid; //學號

Stringsname; //姓名

intsage; //年齡

publicabstractvoidshowInfo(); //抽象方法

publicabstractvoidtoLearn(); //抽象方法

}二、抽象類1)包含抽象方法的類必須是抽象類。2)抽象類和抽象方法必須用abstract關鍵字聲明。3)抽象方法只需聲明不需要實現(xiàn)。4)子類必須實現(xiàn)父類中所有的抽象方法。5)不能用抽象類創(chuàng)建對象。抽象類使用說明二、抽象類【例4-8】抽象類和抽象方法的使用示例。abstractclassA4{

//定義一個抽象類abstractStringgetdata();//定義一個抽象方法publicvoidprint(){System.out.print(getdata());}}classB4extendsA4{Stringgetdata(){//重寫抽象方法return“Hellostudents!”;}}publicclassExp{publicstaticvoidmain(String[]args){B4b1=newB4();b1.print();}}任務實施使用抽象方法完成完成“任務4.1”,可將父類Student定義為抽象類。完成“工單4-2”訓練任務同步訓練課后作業(yè)P83課后作業(yè),一、13

三、2

§4-3使用接口實現(xiàn)學生信息管理系統(tǒng)Java面向對象程序設計教學目標任務分析

在學生信息管理系統(tǒng)中,除定義表示學生實體的類(實體類)之外,還需要定義各種完成系統(tǒng)功能的類(業(yè)務處理類),本任務的業(yè)務處理類中必須完成學生信息的增、刪、改、查等基本操作,但不同實體實現(xiàn)業(yè)務的方式又各不相同,為了保證這些基本功能的實現(xiàn),通常先定義一組約束或規(guī)范,約定好必須要實現(xiàn)的功能,Java中的接口便可以實現(xiàn)這一功能。教學內容1抽實現(xiàn)接口定義21Java多態(tài)一、接口定義接口是由一些抽象方法和常量所組成的一個集合。它的定義與抽象類類似,只定義了類中方法的原型,而沒有直接定義方法的內容。其定義格式為:

[public]interface接口名[extends接口1,接口2,......]{

類型標識符常量名1=常數;

類型標識符常量名2=常數;

......

類型標識符常量名n=常數;

返回值類型方法1(參數列表);

返回值類型方法2(參數列表);

......

返回值類型方法n(參數列表);

}一、接口定義接口中定義的常量默認使用了“publicstaticfinal”進行修飾,即為靜態(tài)常量;方法都默認使用了“publicabstract”進行修飾,即為抽象方法。接口也不能用來實例化對象,它不是一個類。例如:

interfaceCallback{

floatPI=3.14159;

voidcallback(floatparam);

}二、接口實現(xiàn)一個或多個類可以實現(xiàn)該接口。Java中使用關鍵字implements實現(xiàn)接口,接口實現(xiàn)一般格式如下:

[public]class類名[extends父類名稱][implements接口名列表]

{類體

}說明:1)如果一個類實現(xiàn)多個接口,這些接口名之間用逗號分隔。2)當一個類實現(xiàn)某個接口時,必須實現(xiàn)接口中的所有方法,且方法必須聲明為public;如果不能實現(xiàn),也必須寫出一個空方法。而且,實現(xiàn)方法的類型必須嚴格與接口定義中指定的類型相匹配。3)允許多個類實現(xiàn)同一接口。二、接口實現(xiàn)例如,實現(xiàn)Callback接口的類Area的定義。

classAreaimplementsCallback{

publicvoidcallback(floatr){

System.out.println("半徑為"+r+"圓的面積是:"+PI*r*r);

}

}注意:callback(

)必須用public修飾符聲明。二、接口實現(xiàn)【例4-9】根據用戶要求在控制臺打印不同的圖形。interfaceShape{//定義接口voiddraw();}classCircleimplementsShape{voiddraw(){System.out.println("drawCircle.");}}classSquareimplementsShape{voiddraw(){System.out.println("drawSquare.");}}classTriangleimplementsShape{voiddraw(){System.out.println("drawTriangle.");}}classTestShape{publicstaticvoidmain(String[]args){drawShape(newCircle());

drawShape(newSquare());

drawShape(newTriangle());

}staticvoiddrawShape(Shapes){//s可以是實現(xiàn)Shape接口的任何類的對象

s.draw();

}}三、Java多態(tài)性封裝是把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。類中成員的屬性有:public,protected,(default),private,這四個屬性的訪問權限依次降低。

封裝可以隱藏實現(xiàn)細節(jié),實現(xiàn)了代碼模塊化。繼承是指這樣一種能力,它可以使用現(xiàn)有類的所有功能,并在無需重新編寫原來類的情況下對這些功能進行擴展。

繼承實現(xiàn)了代碼重用,提高了代碼編寫效率。封裝、繼承、多態(tài)是Java面向對象編程的三大特征,也稱為三大基石。三、Java多態(tài)性多態(tài)是指不同對象在調用同一個方法時,表現(xiàn)出的多種不同形態(tài)。利用多態(tài)可以使程序具有良好的可維護性和可擴展性。Java中的多態(tài)有兩種。

1)編譯時多態(tài):方法的重載。

2)運行時多態(tài):Java運行時系統(tǒng)根據調用該方法的對象類型來決定選擇調用哪個方法。多態(tài)實現(xiàn)有三個必要條件。一要有繼承,二要有重寫,三是父類引用指向子類對象封裝、繼承、多態(tài)是Java面向對象編程的三大特征,也稱為三大基石。三、Java多態(tài)性【例4-10】多態(tài)性應用示例,對各類水果味道的描述。publicabstractclassFruit{ //抽象類,父類——水果

Stringfname;

publicFruit(Stringfname){ super(); this.fname=fname;

}

publicabstractvoidshowTaste();//抽象方法,描述水果味道}publicclassOrangeextendsFruit{ //子類——橙子類

publicOrange(Stringfname){ super(fname);

}

publicvoidshowTaste(){ System.out.println("酸甜可口!");

}}publicclassAppleextendsFruit{ //子類——蘋果類

publicApple(Stringfname){ super(fname);

}

publicvoidshowTaste(){ System.out.println("非常甜!");

}}publicclassChild{ //孩子類

Stringname;

publicChild(Stringname){ super(); =name;

}

publicvoideat(Fruitfruit){ //父類對象作為形參

//參數是父類型“水果”類型,該父類及其子類的對象都可以作為實參傳入 System.out.print(+"今天吃了一個"+fruit.fname+","); fruit.showTaste();

}}三、Java多態(tài)性【例4-10】多態(tài)性應用示例,對各類水果味道的描述。publicclassTestFruit{ //主類(測試類)

publicstaticvoidmain(String[]args){ Childchild1=newChild("小明"); Childchild2=newChild("小紅"); child1.eat(newApple("蘋果")); //子類對象作為實參 child2.eat(newOrange("橙子"));

//子類對象作為實參

//實現(xiàn)動態(tài)綁定,在執(zhí)行期間判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法

}}程序說明:1)程序中使用了一個實現(xiàn)多態(tài)的關鍵手段:“將子類的引用賦給父類對象(向上轉型)”也稱為“父類引用指向子類對象”。相當于:Fruitapple=newApple();聲明的是父類類型,創(chuàng)建的是子類對象。2)該程序具有較強的可擴展性。如:若在程序中再增加一種水果——桃子,現(xiàn)在已有代碼不需要做任何改動,只需要添加一個“桃子”子類,就可以完成。這就是多態(tài)的最大優(yōu)勢。任務實施學生信息管理系統(tǒng)中,為了實現(xiàn)學生信息的“增、刪、改、查”這些基本功能,首先定義了一個接口StudentDao,在其中規(guī)定了實現(xiàn)接口的類必須實現(xiàn)的功能。publicinterfaceStudentDao{

publicUserlogin(Stringuname,Stringupassword); publicintaddStudent(Studentstudent); publicintupdateStudent(Studentstudent); publicintdelStudentbyID(intsid);}完成“工單4-3”訓練任務同步訓練課后作業(yè)P83課后作業(yè),一、2

三、

§4-4使用包對項目進行管理Java面向對象程序設計教學目標任務分析

在學生信息管理系統(tǒng)中,為了實現(xiàn)系統(tǒng)規(guī)定的功能,分別設計了實體類、業(yè)務類、工具類、界面實現(xiàn)類、接口等多種不同功能的類,為了對這些類進行分門別類的管理,需要用到“包”這一工具。教學內容1導入其他包中的類包的定義21常用系統(tǒng)包及類一、包的定義包(package)是類的一種組織方式。在操作系統(tǒng)中,用文件夾(目錄)來組織管理文件,Java則利用包來組織相關的類及各種相關文件,并控制其訪問權限,同一包中的類默認情況下可以互相訪問。如同文件夾一樣,包也采用了樹形目錄的存儲方式,同一個包中的類名字不能相同,不同包中類的名字則可以相同,當同時調用兩個不同包中相同類名的類時,應該加上包名加以區(qū)別。Java中的包可以分為兩種形式:內置包(系統(tǒng)包)和用戶自定義包。一、包的定義包的定義是指用戶自定義包。Java使用package關鍵字定義包,package語句應該放在源文件的第一行,在每個源文件中只能有一個包定義語句。定義包的語法格式如下:

package包名;Java包的命名規(guī)則。1)包名一般全部由小寫字母(多個單詞也全部小寫)組成。2)如果包名包含多個層次,每個層次用“.”分割。3)包名一般由倒置的域名開頭,比如com.baidu,不要有www。4)用戶自定義包不能用java開頭。二、導入其他包中的類如果使用不同包中的類,需要使用該類的全名(包名+類名)。如:

unit.Testtest=newunit.Test();其中,unit是包名,Test是包中的類名,test是類的對象。為了簡化編程,可以使用import可以向某個Java文件中導入指定包層次下的某個類或全部類。一個Java源文件只能包含一個package語句,但可以包含多個import語句。import導入單個類的語法格式:

import包名+類名;如,importunit.Test;import導入指定包下全部類的語法格式:

import包名.*;import語句中的星號(*)只能代表類,不能代表包,只能導入指定包下的所有類。二、導入其他包中的類【例4-11】包應用實例。將Calculate接口和Sum類存儲在ch04包中,然后在ch05包中調用這些類。packagech04;//創(chuàng)建包ch04interfaceCalculate{

intdisp(intn);}publicclassSumimplementsCalculate{publicintdisp(intn){ints=0,i;for(i=1;i<=n;i++)s=s+i;returns;}}//ch05包中的Test類packagech05;importch04.*;publicclassTest{publicstaticvoidmain(Stringargs[]){intn=10;Sums=newSum();System.out.println("1—"+n+"的和為:"+s.disp(n));}}三、常用系統(tǒng)包及類Java提供了豐富類庫,為用戶提供了豐富的應用程序接口(ApplicationProgrammingInterface,API),也是Java重要的特三、常用系統(tǒng)包及類色之一。這些類庫分別放在不同的Java系統(tǒng)包中。Java常用包及功能如表4-1所示。包名所提供類的主要功能java.langJava的核心類庫,包含運行Java程序必不可少的系統(tǒng)類,如基本數據類型、基本數學函數、字符串處理、異常處理和線程類等。系統(tǒng)默認加載這個包java.ioJava語言的標準輸入/輸出類庫,如基本輸入/輸出流、文件輸入/輸出、過濾輸入/輸出流等java.util包含如處理時間的Date類,處理動態(tài)數組的Vector類,以及Stack和HashTable類java.awt構建圖形用戶界面(GUI)的類庫,低級繪圖操作Graphics類、圖形界面組件和布局管理(如Checkbox類、Container類、LayoutManager接口等),以及用戶界面交互控制和事件響應(如Event類)Java.swing構建圖形用戶界面組件類庫java.math提供有關數學計算的類及其方法實現(xiàn)網絡功能的類庫有Socket類、ServerSocket類java.sql實現(xiàn)JDBC的類庫java.text提供有關操作數據、文本、數字和消息的類及其方法三、常用系統(tǒng)包及類使用基本數據類型聲明的變量不被視為對象,Java語言中專門提供了與基本數據類型相對應的類,稱為包裝類(或數據類型類),以便將基本數據類型當作對象使用。java.lang包對每個基本數據類型都有一個相應的包裝類,它的名字與基本數據類型的名字相似,不同的是包裝類是一個類,它提供構造方法、常量和處理不同類型的轉換方法。表4-2給出了各個基本數據類型所對應的包裝類的名稱。1.包裝類4-2包裝類包裝類(數據類型類)基本數據類型BooleanbooleanCharactercharDoubledoubleFloatfloatIntegerintLonglong三、常用系統(tǒng)包及類【例4-12】輸出int類型的最大值與最小值和double類型絕對值的最大值與最小值。classMax_Min{

publicstaticvoidmain(Stringargs[]){

System.out.println(Integer.MAX_VALUE);//int類型的最大值

System.out.println(Integer.MIN_VALUE);//int類型的最小值

System.out.println(Double.MAX_VALUE);//double類型絕對值的最大值

System.out.println(Double.MIN_VALUE);//double類型絕對值的最小值}}三、常用系統(tǒng)包及類【例4-13】數據類型類Integer類常用方法的使用。publicclassTyprc{ publicstaticvoidmain(Stringargs[]) {

inta=69; System.out.println(a+"的二進制是:"+Integer.toBinaryString(a)); //將十進制數轉換為二進制數 System.out.println(a+"的八進制是:"+Integer.toOctalString(a)); //將十進制數轉換為八進制數 System.out.println(a+"的十六進制是:"+Integer.toHexString(a)); //將十進制數轉換為十六進制數 Integerbj=Integer.valueOf("123"); Integerbj1=newInteger(234);//創(chuàng)建整型對象 Integerbj2=newInteger("234"); inti=Value();//將對象轉換為整型值 System.out.println("bj="+bj); System.out.println("i="+i); System.out.println("bj1==bj2?"+bj1.equals(bj2)); }}三、常用系統(tǒng)包及類Java.lang包中的Math類提供了一些常量、基本的數學運算和幾何運算方法,如求平方根、指數函數、對數函數、三角函數等。此類中的方法都是靜態(tài)的。并且Math類是一個final類。常用的Math類中的方法如表4-3所示。2.Math類表4-3Math常量、方法常量/方法說明doubleE常量e(2.71828)doublePI常量π(3.14159)staticdoublesin(doublenumvalue)計算角numvalue的正弦值staticdoublecos(doublenumvalue)計算角numvalue的余弦值staticdoublepow(doublea,doubleb)計算a的b次方staticdoublesqrt(doublenumvalue)計算給定值的平方根staticdoubleexp(double計算e的a次方staticdoublelog(double計算a的自然對數staticintabs(intnumvalue)計算int類型值numvalue的絕對值,也接收long、float和double類型的參數staticdoubleceil(doublenumvalue)返回大于等于numvalue的最小整數值staticdoublefloor(doublenumvalue)返回小于等于numvalue的最大整數值staticintmax(inta,intb)返回int型值a和b中的較大值,也接收long、float和double類型的參數staticintmin(inta,intb)返回a和b中的較小值,也可接收long、float和double類型的參數staticintround(floatnumvalue)返回指定數字的取整值(四舍五入),也可接收long類型的參數staticdoublerandom()產生0~1之間的隨機數三、常用系統(tǒng)包及類【例4-14】Math方法使用示例。classMFUN{

publicstaticvoidmain(Stringargs[]){

floata=3,b=4;

System.out.println("exp(a)="+Math.exp(a));

System.out.println("log(a)="+Math.log(a));

System.out.println("sqr(a)="+Math.sqrt(a));

System.out.println("abs(-a*b)="+Math.abs(-a*b));

System.out.println("3*3*3*3="+Math.pow(a,b));

System.out.println("max(a,b)="+Math.max(a,b));//取a,b的較大值}}三、常用系統(tǒng)包及類Date類由java.util包提供,表示日期和時間,提供操縱日期和時間各組成部分的方法。Date類的最佳應用之一是獲取系統(tǒng)當前時。Date類的常用方法如表4-4所示。3.Date類表4-4Date類的常用方法方法說明publicDate()使用當前日期創(chuàng)建對象;publicDate(longdate)使用自1970年1月1日開始到某時刻的毫秒數創(chuàng)建對象booleanafter(Datedate)如果日期在指定日期之后,返回truebooleanbefore(Datedate)如果日期在指定日期之前,返回truebooleanequals(Datedate)如果兩個日期相等,返回truelonggetTime()返回一個表示時間的長整型(毫秒)voidsetTime(longtime)設定日期對象StringtoString()返回日期格式的字符串三、常用系統(tǒng)包及類【例4-15】Date類使用示例。importjava.util.Date;classDateTimeDisply{

DateobjDate;

DateTimeDisply(){

objDate=newDate();

}

voiddisplay(){StringstrDate,strTime="";System.out.println("今天的日期是:"+objDate);longtime=objDate.getTime();System.out.println("自1970年1月1日起"+“以毫秒為單位的時間(GMT):"+time);strDate=objDate.toString();strTime=strDate.substring(11,(strDate.length()-4));strTime="時間:"+strTime.substring(0,8);System.out.println(strTime);}}classDataTest{publicstaticvoidmain(String[]args){

DateTimeDisplyobjDateTime=newDateTimeDisply();

objDateTime.display();}}三、常用系統(tǒng)包及類在java.util包中還提供了一個與日歷相關的類Calendar,它可以根據給定的Date對象以YEAR和MONTH等整型的形式檢索信息。Calendar類是抽象類,因此不能像Date類那樣實例化。GregorianCalendar:是Calendar的子類,可以實現(xiàn)Gregorian形式的日歷。Calendar的常用方法如表4-5所示。4.Calendar類表4-5Calendar類的常用方法方法說明voidadd(intoriginalvalue,intvalue)將originalvalue指定的時間或日期增加一個value值intget(intcalFields)返回調用對象calFields指定部分的值。如年、月、日等CalendargetInstance()返回默認地區(qū)和時間的Calendar對象DategetTime()返回與調用對象具有相同時間的Date對象voidset(intcalFields,intval)將val中指定的值設置為調用對象calFields所指定的時間或日期的值voidclear()清除當前Calendar對象中的時間組成部分部分boolenequals(Objectc)如果當前日歷對象表示的Calendar實例與對象c相同,返回true三、常用系統(tǒng)包及類【例4-16】Calendar類使用示例。importjava.util.Date;importjava.util.Calendar;classCa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論