




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、接口與包接口與包什么是包(什么是包( package )l包的作用類似于C的函數(shù)庫,但是C的函數(shù)庫很容易出現(xiàn)重名的問題,包在一定程度上解決了這個(gè)問題。l一個(gè)包通常包含很多個(gè)功能相近的類。lJDK里面已經(jīng)包含了N個(gè)功能強(qiáng)大的包,所以當(dāng)你要實(shí)現(xiàn)一個(gè)功能,首先記得去查一下JDK的文檔,看看有否對(duì)應(yīng)功能的包。l編程語言的優(yōu)劣都是相對(duì)而言的,大家覺得Java功能很強(qiáng)大,其實(shí)是因?yàn)镾UN公司的JDK免費(fèi)贈(zèng)送了眾多功能強(qiáng)大的包。包包1l包的命名lSUN公司建議用域名的逆序,因?yàn)橛蛎俏ㄒ坏?。如?xmul包的結(jié)構(gòu)l一個(gè)包被映射為一個(gè)目錄,包里面的每個(gè)類,則映射到目錄中的某一個(gè)文件,如:com.p
2、renhall.mypackage這個(gè)包被展開后,就是包包2l打包lpackage packagename;l上面這一行一般出現(xiàn)在Java源文件的第一行,表示這個(gè)文件的所有類,都將被打包到packagename中。l不同源文件的packagename可以相同,Java會(huì)根據(jù)packagename將相同包的class壓縮在一起,生成一個(gè)擴(kuò)展名為jar的包。l順便說一下,jar包其實(shí)是zip格式的壓縮文件包包3l使用包l要使用一個(gè)包里的某個(gè)類,必須首先導(dǎo)入limport javax.swing.JOptionPane;l如果要使用一個(gè)包里的多個(gè)類,用這個(gè)limport javax.swing.*;
3、l*表示導(dǎo)入這個(gè)包的所有類l注意包之間沒有嵌套關(guān)系,例如java.awt和java.awt.geom是兩個(gè)完全獨(dú)立的包。這個(gè)其實(shí)很好理解,因?yàn)閖ava.awt這個(gè)包,僅僅包含java/awt這個(gè)目錄下的class文件,而java/awt/geom則是另外一個(gè)目錄了。包的命名規(guī)范包的命名規(guī)范l包的名稱一般全部采用小寫l包名的前綴一般是域名單詞序列的逆序l實(shí)例lcom.sun.englcom.apple.quicktimeledu.cmu.cs.bovik.cheese文件的命名規(guī)范文件的命名規(guī)范l必須與該文件中public類的類名同名l后綴必須是 .java類類/接口的命名規(guī)范接口的命名規(guī)范l類
4、名一般是名詞/名詞詞組:每個(gè)單詞的首字母大寫,其它字母小寫l類名應(yīng)當(dāng)盡量簡(jiǎn)單,而且其含義能夠盡量準(zhǔn)確地刻畫該類的含義l一般采用全稱盡量少用縮寫詞 (除非該縮寫詞被廣泛使用)l實(shí)例lClocklTimelImageSprite方法的命名規(guī)范方法的命名規(guī)范l方法名一般是l動(dòng)詞/動(dòng)詞性詞組l首字母小寫l中間單詞的首字母大寫,其它字母小寫l盡量應(yīng)用簡(jiǎn)單的、常用的單詞l實(shí)例lrun( );lgetBackground( );lgetTime( );變量的命名規(guī)范變量的命名規(guī)范l變量名的首字母小寫l中間單詞的首字母大寫,其它字母小寫l變量名的首字母盡量不要用字符: _ 或 $l變量名應(yīng)當(dāng)簡(jiǎn)短、有含義、且便
5、于記憶l變量名常常由表示其所扮演的角色與數(shù)據(jù)類型組成l實(shí)例lint i; char c; double widthBox;lPoint startingPoint, centerPoint;lName loginName;常量的命名規(guī)范常量的命名規(guī)范l常量名一般全大寫,單詞之間用下劃線分隔 (“_”)l實(shí)例:lstatic final int MIN_WIDTH = 4;lstatic final int MAX_WIDTH = 999;源文件編輯源文件編輯l盡量不要用TAB排版l行數(shù)/每行的字符數(shù)不宜過多l(xiāng)縮排方式(Indentation)l多用空白符/行l(wèi)友情提示:通常Java的開發(fā)環(huán)境都
6、會(huì)提供源代碼的格式化/重排功能,如果使用記事本編輯源代碼,建議去下載一個(gè)叫astyle的源代碼重排工具(DOS命令行工具)。UltraEdit有捆綁這個(gè)工具,并提供了GUI界面的調(diào)用方式。文件組織文件組織l源程序文件一般采用如下的組織順序:l最開始一般是注釋lpackage 和 import 語句l類和接口的定義搞一個(gè)復(fù)雜一點(diǎn)的例子先熱身搞一個(gè)復(fù)雜一點(diǎn)的例子先熱身l我們想做一個(gè)類Circle表示平面直角坐標(biāo)系上的一個(gè)圓(解析幾何還記得吧.)。l然后我們想做一個(gè)求面積的成員函數(shù)。l我們還要假定所有的Circle的成員變量都是private的,所有的成員函數(shù)都是public的,下面開始動(dòng)手設(shè)計(jì)這個(gè)
7、類。操作步驟操作步驟 1l先搭一個(gè)空架子總是沒有問題的:class Circle操作步驟操作步驟 2l設(shè)計(jì)一下成員變量,這里三個(gè)足夠了:class Circle private double r; /r是半徑 private double x,y; /(x,y)是圓心坐標(biāo)操作步驟操作步驟 3l然后是構(gòu)造函數(shù),這里先搞兩個(gè):class Circle private double r; private double x,y; public Circle() x=0; y=0; r=1; public Circle(double x, double y, double r) this.x=x; th
8、is.y=y; this.r=r; /一不小心用到了this,阿門,this是啥知道不? 操作步驟操作步驟 4l然后是面積函數(shù):class Circle private double r; private double x,y; public Circle() x=0; y=0; r=1; public Circle(double x, double y, double r) this.x=x; this.y=y; this.r=r; public double getArea() return (Math.PI*r*r); Eclipse測(cè)試程序測(cè)試程序l綜合一下以上的所有步驟:l先建一個(gè)工
9、程,名字隨意,再建一個(gè)類,名字叫Circle,然后把Circle的代碼貼上;l再建一個(gè)類,名字隨意,例如叫Test,勾上自動(dòng)生成main函數(shù)的選項(xiàng);l現(xiàn)在你的工程里應(yīng)該有兩個(gè)java源文件,兩個(gè)類,其中一個(gè)是用來測(cè)試的類,所以它有main函數(shù),Circle類由于沒有main函數(shù),所有它是不能運(yùn)行的。因此啟動(dòng)運(yùn)行的主類是Test。Test類的寫法類的寫法public class Testpublic static void main(String args) Circle c1 = new Circle();System.out.println(c1.getArea();Circle c2 =
10、new Circle(3.0,4.0,5.0);System.out.println(c2.getArea();Circle的改進(jìn)的改進(jìn)lCircle類顯然不完善,例如你在Test類里,如果想知道c1的x,y,r三個(gè)成員分別是多少,可能嗎?如果你想在Test類里,隨時(shí)修改c1的半徑,可能嗎?l答案顯然不行,所以,Circle其實(shí)還有很多的成員函數(shù)需要添加。l這里就不演示了,自己動(dòng)手試試。研究一下對(duì)象的引用研究一下對(duì)象的引用l一個(gè)類的成員函數(shù)(static除外),是不是一定要new才能被使用呢?例如GUI編程中經(jīng)常有這種語句:lContainer container = getContentPa
11、ne(); container.add(new Button(hello button);l這個(gè)container好像就沒有new對(duì)吧?怎么就可以抓來用呢?難道隨便get一下也能用?l其實(shí)這個(gè)container已經(jīng)被new過了,只是你沒有看見而已。get一下相當(dāng)于做對(duì)象的引用。這么說好像很復(fù)雜,看一個(gè)例子:對(duì)象的引用對(duì)象的引用 Iclass A public int x;public class Testpublic static void main(String args) A a = new A(); a.x = 1; System.out.println(a.x=+a.x); A b =
12、 a; /注意這里注意這里b不是不是new出來的出來的 b.x = 10; System.out.println(b.x=+b.x); System.out.println(a.x=+a.x); a.x = 100; System.out.println(a.x=+a.x); System.out.println(b.x=+b.x);這個(gè)例子的輸出是:a.x=1b.x=10a.x=10a.x=100b.x=100對(duì)象的引用對(duì)象的引用 IIl總結(jié)一下,如果一個(gè)對(duì)象不是new出來的(例子中的b),而是直接用一個(gè)已經(jīng)new出來的對(duì)象(例子中的a)給它賦值,那么這個(gè)對(duì)象b就叫做a的引用。l引用的對(duì)象之
13、所以可以使用,不需要new,其實(shí)是因?yàn)樗赶虻膶?duì)象和賦值給它的對(duì)象是同一個(gè)它所指向的對(duì)象和賦值給它的對(duì)象是同一個(gè)!也就是它只是給原來的對(duì)象又起了一個(gè)名字而已。l順便再提一次,對(duì)象作為函數(shù)參數(shù)的時(shí)候,實(shí)參都是通過引用傳遞引用傳遞的方式傳給形參的。再談多態(tài)性再談多態(tài)性當(dāng)繼承發(fā)生的時(shí)候,多態(tài)性就來了當(dāng)繼承發(fā)生的時(shí)候,多態(tài)性就來了方法覆蓋方法覆蓋l當(dāng)子類和超類定義了同樣的函數(shù)時(shí),就產(chǎn)生了方法覆蓋,如:public class Circle extends GeometricObject /* Override the toString method defined in GeometricObjec
14、t */ public String toString() return super.toString() + nradius is + radius; l當(dāng)覆蓋發(fā)生時(shí),在子類中,超類中的函數(shù)會(huì)被自動(dòng)屏蔽;如果非要調(diào)用超類的函數(shù),只能借助于super關(guān)鍵字。覆蓋和重載是不同的覆蓋和重載是不同的l下圖中的函數(shù)p,左邊是覆蓋,右邊是重載l覆蓋的特征:函數(shù)名相同,參數(shù)列表相同l重載的特征:函數(shù)名相同,參數(shù)列表不同來一個(gè)例子來一個(gè)例子class A protected int x; public void f() x-; class B extends A int x; void f() /覆蓋了超類
15、的覆蓋了超類的f() this.x+; /這里用的是自己的這里用的是自己的x,也可以直接寫,也可以直接寫x+ super.x = 100; /這里用的是超類繼承來的這里用的是超類繼承來的x super.f(); /這里用的是超類繼承來的這里用的是超類繼承來的f() void f(int i) /重載了繼承來的函數(shù)重載了繼承來的函數(shù)f(),注意二者的參數(shù)列表不同,注意二者的參數(shù)列表不同 i+; 有個(gè)復(fù)雜點(diǎn)的例子有個(gè)復(fù)雜點(diǎn)的例子class A void fun() System.out.println(“A”); class B extends A void fun() System.out.pr
16、intln(“B”); class C extends B void fun() System.out.println(“C”); class Test public static void main(String args) A a; B b = new B(); C c = new C(); a=b; a.fun(); / 此處將輸出Ba=c; a.fun(); / 此處將輸出C 解釋一下解釋一下lJava 的動(dòng)態(tài)多態(tài)性這種機(jī)制遵循一個(gè)原則:當(dāng)超類(父類)對(duì)象的引用變量引用子類對(duì)象時(shí),被引用對(duì)象的類型而不是引用變量的類型決定了調(diào)用誰的成員方法;l當(dāng)然,這個(gè)被調(diào)用的方法必須是必須是在超類中定
17、義過的,也就是說被子類覆蓋的方法。你可能會(huì)問,如果這個(gè)方法沒有被覆蓋呢?Good question還有個(gè)例子還有個(gè)例子class A void fun() System.out.println(“A”); class B extends A void funB() System.out.println(“B”); class C extends B void funC() System.out.println(“C”); class Test public static void main(String args) A a; B b = new B(); C c = new C(); a=b;
18、 a.fun(); / 此處將輸出Aa=c; a.fun(); / 此處將輸出A 從編程角度來看抽象類從編程角度來看抽象類抽象類抽象類l假設(shè)我們用GeometricObject這個(gè)類作為幾何形狀的基類,以便可以在GeometricObject的基礎(chǔ)上派生出Circle類、Rectangle類等等具體的幾何圖形。l顯然,GeometricObject這個(gè)類應(yīng)該包含幾何形狀的一些共性:顏色、是否填充、創(chuàng)建日期、toString()函數(shù)、可以被求周長(zhǎng)、可以被求面積l下面我們來設(shè)計(jì)這個(gè)類:面積和周長(zhǎng)的困惑面積和周長(zhǎng)的困惑l顏色、是否填充、創(chuàng)建日期等函數(shù)不難寫出相應(yīng)的Java代碼。但是這里有兩個(gè)函數(shù)是沒
19、法寫代碼的,這就是面積和周長(zhǎng)函數(shù)。這是因?yàn)槊娣e和周長(zhǎng)跟具體形狀有關(guān),在沒有具體的形狀之前,這兩個(gè)屬性沒法計(jì)算。l現(xiàn)在的問題是,作為一個(gè)基類GeometricObject,如果沒有設(shè)計(jì)getArea和getPerimeter函數(shù),顯然屬于重大設(shè)計(jì)失誤。但是這個(gè)函數(shù)又確實(shí)沒法寫,怎么辦呢?Java說,好辦,你可以把那兩個(gè)函數(shù)做成抽象函數(shù)嘛。抽象函數(shù)抽象函數(shù)l抽象函數(shù)是一種特殊函數(shù),它只定義了函數(shù)原型,但是不需要實(shí)現(xiàn)這個(gè)函數(shù)。抽象函數(shù)用關(guān)鍵字abstract修飾。l包含抽象函數(shù)的類叫做抽象類,也必須用abstract修飾。l我們現(xiàn)在知道,抽象類只是一個(gè)半成品,所以Java中,抽象類不可以被new出來
20、。GeometricObject類的部分代碼類的部分代碼 1 public abstract class GeometricObject 2 private String color = white; 3 private boolean filled; 4 private java.util.Date dateCreated; 5 6 /* Construct a default geometric object */ 7 protected GeometricObject() 8 dateCreated = new java.util.Date(); 9 .43 /* Abstract me
21、thod getArea */44 public abstract double getArea();4546 /* Abstract method getPerimeter */47 public abstract double getPerimeter();48 注意這兩個(gè)抽象函數(shù)注意這兩個(gè)抽象函數(shù)是沒有函數(shù)體的。是沒有函數(shù)體的。抽象類的派生類抽象類的派生類l剛才看到,抽象類有幾個(gè)函數(shù)其實(shí)是沒有實(shí)現(xiàn)的;于是Java規(guī)定,凡是抽象類的派生類,一定要完成父類的未竟事業(yè)。l例如從GeometricObject類派生兩個(gè)類,一個(gè)叫做Circle,一個(gè)叫做Rectangle。那么這兩個(gè)類都一定要覆蓋
22、(實(shí)現(xiàn))getArea和getPerimeter函數(shù)。換句話說,這兩個(gè)類可以沒有其它成員,但是一定要實(shí)現(xiàn)這兩個(gè)成員函數(shù)。Circle類的部分代碼類的部分代碼3 public class Circle extends GeometricObject 4 private double radius;.23 /* Return area */24 public double getArea() 25 return radius * radius * Math.PI;26 .33 /* Return perimeter */34 public double getPerimeter() 35 retu
23、rn 2 * radius * Math.PI;36 .43 注意這兩個(gè)注意這兩個(gè)GeometricObject的抽象函數(shù)在這里一定抽象函數(shù)在這里一定要被實(shí)現(xiàn)。要被實(shí)現(xiàn)。Rectangle類的部分代碼類的部分代碼 3 public class Rectangle extends GeometricObject 4 private double width; 5 private double height;.35 /* Return area */36 public double getArea() 37 return width * height;38 3940 /* Return perim
24、eter */41 public double getPerimeter() 42 return 2 * (width + height);43 44 注意這兩個(gè)注意這兩個(gè)GeometricObject的抽象函數(shù)在這里一定抽象函數(shù)在這里一定要被實(shí)現(xiàn)。要被實(shí)現(xiàn)。抽象類小結(jié)抽象類小結(jié) 抽象函數(shù)只能在抽象類中出現(xiàn),這些抽象函數(shù)在派生類中一定要被實(shí)現(xiàn)。 抽象類不能被new出來。 抽象類可以沒有抽象函數(shù),但是即便如此,它也不能被new出來。 即使父類不是抽象類,子類也可以定義成抽象類。 父類中的非抽象函數(shù),可以被子類覆蓋,并修改成抽象函數(shù)。 抽象類不能被new,但是抽象類是一個(gè)合法的數(shù)據(jù)類型。如:Geo
25、metricObject objects = new GeometricObject10; 1 public class TestGeometricObject 2 /* Main method */ 3 public static void main(String args) 4 / Declare and initialize two geometric objects 5 GeometricObject geoObject1 = new Circle(5); 6 GeometricObject geoObject2 = new Rectangle(5, 3); 7 8 System.ou
26、t.println(The two objects have the same area? + 9 equalArea(geoObject1, geoObject2);1011 / Display circle12 displayGeometricObject(geoObject1);1314 / Display rectangle15 displayGeometricObject(geoObject2);16 1718 /* A method for comparing the areas of two geometric objects */19 public static boolean
27、 equalArea(GeometricObject object1,20 GeometricObject object2) 21 return object1.getArea() = object2.getArea();22 2324 /* A method for displaying a geometric object */25 public static void displayGeometricObject(GeometricObject object) 26 System.out.println();27 System.out.println(The area is + obje
28、ct.getArea();28 System.out.println(The perimeter is + object.getPerimeter();29 30 一個(gè)測(cè)試程序一個(gè)測(cè)試程序特殊抽象類:接口特殊抽象類:接口接口接口1l當(dāng)一個(gè)抽象類沒有成員變量,并且其全部函數(shù)都被做成抽象函數(shù)時(shí),Java會(huì)建議你使用interface這個(gè)關(guān)鍵字來替換class。所以,本質(zhì)上,接口其實(shí)是一個(gè)抽本質(zhì)上,接口其實(shí)是一個(gè)抽象類,它的全部函數(shù)都是抽象函數(shù)并且沒有成員變量象類,它的全部函數(shù)都是抽象函數(shù)并且沒有成員變量(可以有靜態(tài)常量)。(可以有靜態(tài)常量)。l接口由于不帶有成員變量,所以它特別適合用來描述一種通用
29、的操作。例如同一個(gè)類的兩個(gè)實(shí)例A、B比較大小這個(gè)操作,無論A、B是什么類的實(shí)例,你都可以定義AB時(shí),取正值;A=B時(shí),取零;A (ComparableRectangle)o).getArea()11 return 1;12 else if (getArea() 基本類型基本類型l可以使用包裝類的doubleValue, floatValue, intValue, longValue, shortValue函數(shù),從包裝類取出對(duì)應(yīng)的基本類型的值。l例如:llong l = doubleObject.longValue(); /有截?cái)鄉(xiāng)int i = integerOValue()
30、;數(shù)值包裝類和字符串的轉(zhuǎn)換數(shù)值包裝類和字符串的轉(zhuǎn)換l數(shù)值包裝類 = 字符串ldouble d = 5.9;lDouble doubleObject = new Double(d);lString s = doubleObject.toString();l字符串 = 數(shù)值包裝類lDouble doubleObject = Double.valueOf(1.4);lInteger integerObject = Integer.valueOf(12);字符串字符串 = 基本類型基本類型l/ These two methods are in the Byte classlpublic static byte parseByte(String s)lpublic static byte parseByte(String s, int radix)l/ These two methods are in the Short classlpublic static short parseShort(String s)lpublic static short parseShort(String s, int radix)l/ These two methods are in the Integer classlpublic static int par
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程忠信正心管理制度
- 調(diào)研養(yǎng)老面試題及答案
- 高考速寫考試題及答案
- T/CAEPI 37-2021鉻污染土壤異位修復(fù)技術(shù)指南
- 反腐倡廉巡講創(chuàng)新工作材料總結(jié)模版
- T/CAEPI 23-2019地下式城鎮(zhèn)污水處理廠工程技術(shù)指南
- 星級(jí)酒店廚房承包協(xié)議書
- 公司員工合同培訓(xùn)協(xié)議書
- 果園承包合同解除協(xié)議書
- 施工合同外工程量協(xié)議書
- 難點(diǎn)02:總集篇·十六種陰影部分面積法專項(xiàng)練習(xí)-2024年小升初數(shù)學(xué)典型例題系列(解析版)2
- 全球經(jīng)濟(jì)2025年全球經(jīng)濟(jì)與貿(mào)易師考試試題及答案
- 2024年國家大劇院招聘真題
- 2025年四川省綿陽市富樂學(xué)校中考模擬英語試題(含答案)
- 文化產(chǎn)業(yè)發(fā)展的試題及答案
- 學(xué)校大型活動(dòng)組織流程
- 2025年教育信息化2.0背景下教師跨學(xué)科教學(xué)能力培養(yǎng)模式創(chuàng)新與優(yōu)化
- 2025-2030全球及中國協(xié)作機(jī)器人系統(tǒng)行業(yè)市場(chǎng)現(xiàn)狀供需分析及市場(chǎng)深度研究發(fā)展前景及規(guī)劃可行性分析研究報(bào)告
- 2025年高考政治搶押秘籍(江蘇專用)時(shí)政熱點(diǎn)05延遲法定退休年齡改革(學(xué)生版+解析)
- 財(cái)務(wù)公司調(diào)賬合同協(xié)議
- 品牌輸出合同協(xié)議
評(píng)論
0/150
提交評(píng)論