java面向對象程序設計基礎知識總結_第1頁
java面向對象程序設計基礎知識總結_第2頁
java面向對象程序設計基礎知識總結_第3頁
java面向對象程序設計基礎知識總結_第4頁
java面向對象程序設計基礎知識總結_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1、含有main()方法的類稱為主類,一個.java文件中可以有多個類,但只能有一個主類。2 、 轉義字符:對于 和 ,需在前面加上,即用char a = ,b=表示。n表示回車換行;t表示水平制表;b表示退格;v表示水平制表;r表示回車;a表示警鈴3 、 標識符:Java程序中自定義的類名、方法名、參數(shù)都是標識符,Java語言中規(guī)定標識符由字母(區(qū)分大小 寫)、數(shù)字、下劃線、$自由組合而成,但不能以數(shù)字開頭,標識符長度不限。4 、 基本數(shù)據(jù)類型:分4大類整數(shù)(byte:1字節(jié)/int:4字節(jié)/short:2字節(jié)/long:8字節(jié))、浮點數(shù)(float:4字節(jié)/double:8字節(jié))、字符型(

2、char:2字節(jié))、布爾型(boolean:1字節(jié))。5 、 整形變量注意:16進制數(shù)以0x開頭,8進制數(shù)以0開頭。6 、 浮點型變量注意:如果數(shù)字未加任何字母,則默認為double類型,賦值時須注意數(shù)據(jù)類型匹配問題。7 、 數(shù)組的定義:char array1;和char array2;都可以。8 、 雙目運算符:+ - * / 對于整形和浮點數(shù)有效(float x = 1f/3f;的運行結果是x=0.),但%只對整形運算。9 、 邏輯運算符:邏輯運算是對布爾型變量進行運算,結果也是布爾型。表示異或運算(ab表示a和b真假不同時,值為真)。&和|是短路的(對于a&b,如果a為假,則不再計算b的

3、值),&和|是非短路的,a和b的值都要計算。10 、 位運算符:&位與、|位或、位反、位異或、右移、無符號右移(忽略了符號位擴展,0補最高位)。11 、 位運算注意:JAVA進行移位運算中因為int是占32位,進行移位的數(shù)是32的模,long占8字節(jié)也就是64位,所以移位的數(shù)是64的模,byte、short進行右移位運算,會自動轉換成int類型。12 、 左移運算:value num:符號位不變,左邊補上符號位;運算規(guī)則:a.按二進制形式把所有的數(shù)字向右移動對應的位數(shù),低位移出(舍棄),高位的空位補符號位,即正數(shù)補零,負數(shù)補1;b.當右移的運算數(shù)是byte 和short類型時,將自動把這些類型

4、擴大為 int 型。14 、 三目運算符(條件表達式): x?y:z;表示x為真時,表達式的值是y的值,否則取z的值。int x=1,y=2,z=3; int i = x0?y:z;則i的取值就是3.15 、 java中提供了四種轉移語句:break、continue、return、throw break:在Java 中,break語句有3種作用。第一,你已經看到,在switch語句中,它被用來終止一個語句序列。第二,它能被用來退出一個循環(huán)。第三,它能作為一種“先進”的goto 語句來使用(break label; 標簽label 是標識代碼塊的標簽。當這種形式的break執(zhí)行時,控制被傳遞出

5、指定的代碼塊。被加標簽的代碼塊必須包圍break 語句,但是它不需要是直接的包圍break的塊。這意味著你可以使用一個加標簽的break 語句退出一系列的嵌套塊。但是你不能使用break 語句將控制傳遞到不包含break 語句的代碼塊 )。16 、 continue:類似break,不帶標簽的continue是終止當前循環(huán)結構,轉而直接進入下一輪循環(huán)。而continue label;則是把程序直接轉到label所指向的那一個循環(huán)結構的下一輪循環(huán),而不管被它嵌套的及continue語句所在的循環(huán)結構運行到了哪一輪。17 、 方法的調用及參數(shù)的傳遞:一個是傳值(要求實際參數(shù)必須是簡單類型的變量),

6、一個是傳遞地址(數(shù)組)。 18 、 類與對象:類是對對象的抽象,而對象是對類的具體化或實例化。19 、 類頭說明:類名第一個字母大寫并體現(xiàn)該類的功能或特征。類的修飾符分兩種:一是訪問控制符,如public;一是類型說明符,類型說明符只有兩個:abstract和 final。20 、 類的訪問控制符:一個是public,可以被所有的類訪問和引用,其他包用import語句引入后可調用;一個是默認的,也就是沒有控制符,也稱為友好的friendly,包中的類能用而不能被其他包中的類訪問或使用(import引入也不行)。注意:import語句引入的類必須是public修飾的類,Java規(guī)定一個.java

7、文件可以有多個類,但必須有一個而且最多有一個public類,因而文件中的其他類只能是友好訪問控制符。21 、 屬性和方法的訪問控制符:public、private(私有訪問控制符,只能被該類自身所訪問或調用)、protect(保護訪問控制符,它可被同一個包中的其他類、不同包中的該類的子類及自身調用)、private protect(只能被該類自身及該類的子類訪問和引用)、默認訪問控制符(具有包內訪問性,只能被同一個包中的其他類訪問或引用,不在同一個包中的類不能訪問它,即使用import語句引入也不行)22 、 static:只能修飾屬性和方法,修飾的屬性和方法不用實例化,可以用類直接調用。23

8、 、 多個修飾符放在一起使用:abstract不能與final共同修改一個類;abstract不能與private,static,final和native共同修飾一個方法;abstract 類中不能有私有屬性和方法。24 、 另一種創(chuàng)建對象的方法:假設一個類名為Text,它有一個方法名為print(),則可以直接用下面的語句創(chuàng)建對象并其方法:new Text().print();不過這個對象是無名,所以不能被再次調用。25 、 構造函數(shù):構造函數(shù)名字必須與類名完全相同,沒有返回值也不用void指明,還可以通過重載實現(xiàn)不同的初始化方法。26 、 Java允許類的嵌套:因此類的默認訪問控制符有兩個

9、:一個是友好類default,一個是類中類,一個友好類編譯后能后生一個獨立的.class文件,如Input.class,而類中類卻產生Judge$Imput.class,所以只能被包含它的類使用。27 、 命令行參數(shù):main()方法是通過String args這個字符串數(shù)組來接收命令行參數(shù)的。28 、 繼承:一個子類只能繼承一個父類,這樣繼承關系就形成了一棵樹。繼承能夠使子類擁有父類非私有的屬性和方法。子類通過super來調用父類的屬性和方法。29 、 多態(tài):指一棵繼承樹的類中可以有多個同名但不同方法體以及不同形參的方法。分兩種情況覆蓋和重載。 覆蓋是在子類中直接定義和父類同樣的屬性和方法,

10、而重載是指在同一個類定義中有多個同名的方法,但有不同的形參。 覆蓋:子類與父類的關系,是在子類中直接定義和父類同樣的屬性和方法,但重新編寫了方法體,即子類與父類的形參與返回值都相同,但內部處理不同。通過調用它的對象來決定調用哪個方法。 重載:同一個類內部多個方法間的關系,是指在同一個類定義中有多個同名的方法,但不同的形參,而且每個方法有不同的方法體,調用時根據(jù)形參的個數(shù)和類型來決定調用的是哪個方法。通過形參表來決定調用哪個方法。30 、 在Java技術中,另一個必須要求有重載存在的原因是構造函數(shù)。31 、 繼承了父類的屬性表示子類被創(chuàng)建時另外開辟了新的空間來存儲從父類繼承而來的屬性,其初值應該

11、是父類中屬性的初值,但之后雙方的相同屬性彼此相互獨立。32 、 final修飾的方法不能被子類覆蓋,但可以被重載。abstract修飾的方法必須被子類覆蓋。33、this的使用:this關鍵字(只能在方法內部使用)可以為調用了自己的方法的那個對象生成相應的地址,可以像對待其他任何對象地址一樣對待。public class Leaf private int i=0; Leaf increment() i+; return this; /將當前對象的地址作為返回值返回void print()System.out.println(i= +i); public static void main(Str

12、ing args) Leaf x = new Leaf(); x.increment().increment().increment().print(); /多次調用方法/increment(),返回的都是對象x的地址,i值表示調用次數(shù)34、super的作用:它并不是父類對象的地址,它專門用來指代父類,也就是說super的含義是被修飾的屬性和方法將使用父類的定義,而非子類本身的定義,因此子類的對象想使用它父類中的同名屬性和方法時,就可以使用super。35、構造函數(shù):如果定義了多個構造函數(shù),創(chuàng)建對象時必須使用其中之一,因為系統(tǒng)不再定義默認的空構造函數(shù)了。 構造函數(shù)的簡化(調用):用構造函數(shù)間的

13、調用可以實現(xiàn)定義的簡化,就是先調用定義好的構造函數(shù)完成部分屬性的初始化,再加上其他屬性的賦值。public class Leaf private String lname; private int lnum; Leaf(int num) lnum = num; Leaf(int $num,String $name) this($num); /調用上一個構造函數(shù),等同于lnum = $num; lname = $name; public static void main(String args) Leaf x = new Leaf(20,good); System.out.println(lnu

14、m= +x.lnum+ lname= +x.lname);Leaf y = new Leaf(22);System.out.println(lnum=+y.lnum);調用其他構造函數(shù)時,必須加上this代替函數(shù)名,但這時的this不代表地址,只用來表示構造函數(shù)的名稱,也就是類名;注意要在實際參數(shù)名前加上$作為開參名,這樣既區(qū)別于實際參數(shù)名,又能反映形參的含義。 構造函數(shù)的繼承:A、子類只能繼承父類的默認構造函數(shù),即無形參構造函數(shù),并且在創(chuàng)建對象時先調用這個構造函數(shù)對對象進行初始化,再調用子類自己定義的構造函數(shù)。B、如果父類沒有默認構造函數(shù),子類將不能從父類繼承到任何構造函數(shù),并且子類也不能定

15、義自己的無參數(shù)構造函數(shù)。C、如果子類想調用父類的非默認構造函數(shù),必須使用super來實現(xiàn)。例如調用父類的構造函數(shù)并加入自己的定義:NormalStudent($stuFlag,$sName,$sSex,$reduceFlag)super($stuFlag,$sName,$sSex); /此處調用的是父類的構造函數(shù)對形參$stuFlag,$sName,$sSex初始化。reduceFlag = $reduceFlag;D、子類的構造函數(shù)的形參表只能使用父類構造函數(shù)中用過的形參表,或者是對它的擴展。例如父類的構造函數(shù) 只有一個:Super(int i, String s),那么它的子類只能定義這樣

16、的構造函數(shù):subbie(int i,String s,char c)等。36、最終類成員A用final修飾的方法是不能被該類的子類所重載的方法。B、用final修飾的簡單變量相當于常量,不管這個變量是屬性還是自變量,這時相當于編程者用一個名稱來代替一個常量。如果類的屬性是常量,那么它的各個對象的這個值一定相同,所以final通常和static放在一起修飾屬性,以節(jié)省內存空間;另外final的修飾的簡單變量通常是所有字母大寫,以表示它是常量。37、靜態(tài)變量、動態(tài)變量區(qū)別A、對于靜態(tài)變量在內存中只有一個拷貝(節(jié)省內存),JVM只為靜態(tài)分配一次內存,在加載類的過程中完成靜態(tài)變量的內存分配,可用類名

17、直接訪問(方便),當然也可以通過對象來訪問(但是這是不推薦的)。 B、對于實例變量,每創(chuàng)建一個實例,就會為實例變量分配一次內存,實例變量可以在內存中有多個拷貝,互不影 響(靈活)。 38、對象在繼承關系中的改變:A、子類實例可以被當作父類的一個對象使用,而父類實例不能被當作子類的一個對象使用。子類對象可賦予父類對象,父類對象賦予子類對象則出錯B、如果一個父類對象通過賦值指向的地址是子類對象所在的地址,按照前一條規(guī)則,這個對象仍然是父類的對象。但它可以通過強制類型轉換變成子類對象,這種轉換只能用在對象間賦值時,不能單獨使用強制轉換。以上規(guī)則可以這樣理解:子類對象所占的內存在一般情況下比父類對象所

18、占的內存空間大,父類對象中的成員都可以在子類對象的地址中找到對應部分,所以可以把子類對象當作父類的一個對象用。而相反時,子類對象的成員并不一定能在父類對象地址中找到對應部分,這樣就可能造成成員丟失。而強制類型轉換則是因為父類對象本身就與子類對象的地址相對應(從子類轉換而來),當然可以把這個對象轉換成子類的對象,而不造成成員的丟失。public class ObjectConvert public static void main(String args)SuperClass superA = new SuperClass(),superB;Subbie subA = new Subbie(),

19、subB;/用子類對象作為實際參數(shù)傳遞給應是父類對象的形參(new ObjectConvert().useSubAsSuper(subA);superB = subA;/把子類對象賦予父類對象System.out.println(superB.getX()+superB.getX();/如果輸出中仍用方法getY()將出錯。/System.out.println(superB.gety();/ subB = superA;/把父類對象賦予子類對象將出錯/把指向子類對象地址的父類對象superB強制轉換成子類對象,并賦予subBsubB = (Subbie)superB;System.out.p

20、rintln(subB.getX()+ +subB.getY();/子類對象還相當于是原來的子類對象subApublic void useSubAsSuper(SuperClass x)System.out.println(x.getX()+!);class SuperClassprivate int x = 100;public int getX()return x;class Subbie extends SuperClassprivate int y = 200;public int getY()return y;39、抽象類:抽象類的屬性和方法是它的子類的公共屬性和方法的集合。A、用a

21、bstract修飾的方法是抽象方法,所有的抽象方法都必須在抽象類中,抽象方法只有方法頭而無方法體。定義格式如下:abstract 返回值類型 方法名(形參);B、抽象類可以包含抽象方法和一般方法,繼承它的非抽象子類必須實現(xiàn)其所有的抽象方法(注意是覆蓋而不是重載),對于抽象類中的一般方法的繼承和普通的繼承一樣,只要該方法是非private的就可以繼承。C、抽象類的實例:抽象類不能有實例,但有一種情況例外,就是定義一個抽象類的對象名(引用)指向它的非抽象子類的對象。這也就是38(B)中介紹的情況,這時的抽象類實例只含有父類所有的方法,而沒有子類新增加的方法??梢赃@樣理解:一個對象名或方法名相當于一

22、個指針,父類的對象指向了子類的實例對象,因此父類對象的方法找到了指針的目標,就是子類對象中的同名方法,而對于子類對象中私有的方法C(),父類對象中沒有指針指向C(),也即父類對象根本不知道有方法C()的存在,所以父類對象不能調用子類對象方法C()。D、抽象類可以有抽象方法也可以沒有抽象方法;但是如果一個類有抽象方法,那這個類只能定義為抽象類。E、如果是抽象類實現(xiàn)一個接口,那么抽象類中可以不具體實現(xiàn)接口的方法(保持其抽象性),而由其子類去實現(xiàn)。40、接口:接口在語法上和類很相似,它的屬性都是常量(用final修飾),方法都是抽象方法(abstract),沒有方法體,接口間也可以形成繼承關系。定義

23、:public interface 接口名 extends 父接口名1,父接口名2, public static final 屬性數(shù)據(jù)類型 屬性名1 = 值;/必須給出屬性值 public abstract native 返回值類型 方法名(形參表)throw 例外名列表; 說明:1、puiblic 表示它可以被不同包中的類或接口使用,沒有用public表示它是友好的(default),具有包內訪問性。Interface的修飾符只能為public或默認(default)。 2、子接口將繼承所有父接口的所有屬性和方法 3、接口的屬性必須是public static final(靜態(tài)常量) 修飾的

24、,這是被系統(tǒng)默認的,所以可以不寫,但一般寫出final(所以接口的屬性必須給出屬性值) 4、 接口的方法系統(tǒng)默認為public abstract 的,一般不寫修飾符 5、一個接口可以沒有任何接口體,但大括號不能省略,這種接口一般是接口繼承結構中一個最頂層的父接口接口與抽象類的區(qū)別:接口中不能有非抽象的方法,但抽象類中可以有一個類能實現(xiàn)多個接口,但只能有一個父類接口與繼承無關,所以無關的類可以實現(xiàn)同一個接口。接口的實現(xiàn):必須在類的定義時用關鍵字implements來聲明一個類聲明實現(xiàn)某個接口后必須實現(xiàn)該接口的全部方法(包括該接口的所有父類的方法),被實現(xiàn)的方法和接口定義的方法有完全一樣的方法名、

25、返回值和形參表。被實現(xiàn)的方法的訪問控制符必須顯式地使用public修飾,因為接口的方法都是public的。41、適配器:當我們只需要使用某個接口中的少部分方法時,可以繼承與之相對應的抽象類(抽象類不用實現(xiàn)所有的方法?)。java類庫為所有的接口都提供了與之相對應的抽象類,我們稱之為適配器。?42、例外:java允許我們聲明拋出一個并沒有發(fā)生的例外,可將其作為一個“占位符”來理解。A、java提供了一個名為Throwable的類,所有的例外都必須是它或它子類的實例。Throwable有兩個子類:Error和Exception,其中Error代表編譯期和系統(tǒng)錯誤,我們一般不用特意捕獲它們。Exce

26、ption是可以從任何標準Java庫的類方法中招聘的基本例外類,它們亦可以從我們自己的方法或者在運行期偶發(fā)事件中拋出。java定義的例外類都是Exception的子類。-B、catch的括號內定義的對象名必須是try塊中可能拋出的例外類的同一個類或父類、甚至祖先類。因此說用catch(Exception e)能捕獲所有例外就不奇怪了。C、異常的繼承結構:基類為Throwable,Error和Exception繼承Throwable,RuntimeException和IOException等繼承Exception,具體的RuntimeException繼承RuntimeException。 D、

27、 Error和RuntimeException及其子類成為未檢查異常 ?(unchecked),其它異常成為已檢查異常(checked)E、例外在繼承關系中的特殊性:子類方法只能拋出被父類方法所能拋出的例外所屬的例外類或它的衍生類,如果父類方法未定義成拋出例外,那么子類覆蓋方法也不能拋出例外,如果父類方法聲明拋出例外,子類方法可以不聲明拋出例外。但是,父類的構造函數(shù)如果聲明拋出例外,則子類的構造函數(shù)也必須聲明拋出,子類也可以拋出根本不存在的例外。43、RuntimeException介紹1)、NullPointerException(值為空):見的最多了,其實很簡單,一般都是在null對象上調用方法了。 String s=null; boolean eq=s.equals(); / NullPointerException 這里你看的非常明白了,為什么一到程序中就暈呢? public int getNumber(String str)if(str.equals(A) return 1; else if(str.equals(B) return 2; 這個方法就有可能拋出NullPointerException,我建議你主動拋出異常,因為代碼一多,你可能又暈了。 public int getNumber(String str)if(str=null) throw new

溫馨提示

  • 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

提交評論