1. 程式人生 > >Java 知識點整理-4.面向物件(包、許可權修飾符、內部類1~38)+ 面向物件一點補充

Java 知識點整理-4.面向物件(包、許可權修飾符、內部類1~38)+ 面向物件一點補充

1、包package的概述:Ⅰ.將位元組碼(.class)進行分類存放。 Ⅱ.包其實就是資料夾。

2、包的命名:域名倒著寫。

3、定義包的格式:package 包名; 多級包用.分開即可。

4、定義包的注意事項:ⅰ.package語句必須是程式的第一條可執行的程式碼。ⅱ.package語句在一個java檔案中只能有一個。ⅲ. 如果沒有package,預設表示無包名。

5、帶包的類用cmd編譯和執行:Ⅰ.javac編譯的時候帶上-d即可。javac -d .類名.java。Ⅱ.通過java命令執行。java 包名.類名。

6、import關鍵字的概述:import是讓有包的類對呼叫者可見,不用寫全類名。

7、import關鍵字的使用:Ⅰ.導包格式 :import 包名; 這種方式匯入的是 類的名稱,可以最後寫*(*代表萬用字元,會到該包下挨個匹配,匹配上就匯入),但不建議,在開發中我們用的都是匯入具體的類。Ⅱ.package,import,class有順序關係。

8、四種許可權修飾符:

 

本類

同一個包下(子類和無關類)

不同包下(子類)

不同包下(無關類)

private

 

 

 

預設

 

 

protected

 

public

 

 

 

 

 

 

 

 

 

9、在不同包下的無關類,不允許訪問,因為是protected修飾的。

10、類及其組成所使用的常見修飾符:Ⅰ.修飾符:ⅰ.許可權修飾符:private,預設的,protected,public。ⅱ. 狀態修飾符:static,final。ⅲ. 抽象修飾符:abstract。

11、類及其組成所使用的常見修飾符:Ⅱ.類:ⅰ.許可權修飾符:預設修飾符,public (外部類是不能私有的,因為建立私有類的例項化將無意義)。ⅱ.狀態修飾符:final。ⅲ. 抽象修飾符:abstract。ⅳ. 用的最多的就是:public。

12、類及其組成所使用的常見修飾符:Ⅲ.成員變數:ⅰ.許可權修飾符:private,預設的,protected,public。ⅱ.狀態修飾符:static,final。ⅲ. 用的最多的就是:private。

13、類及其組成所使用的常見修飾符:Ⅳ.構造方法:ⅰ.許可權修飾符:private(當一個類中所有方法是靜態的,我們會將構造方法私有),預設的,protected,public。ⅱ. 用的最多的就是:public。

14、類及其組成所使用的常見修飾符:Ⅴ.成員方法:ⅰ.許可權修飾符:private,預設的,protected,public。ⅱ. 狀態修飾符:static,final。ⅲ. 抽象修飾符:abstract。ⅳ. 用的最多的就是:public。

15、類及其組成所使用的常見修飾符:Ⅵ.除此以外的組合規則:ⅰ.成員變數:public static final 公共靜態常量。ⅱ. 成員方法: public static  public abstract public final。

16、內部類概述:在類中定義的類。

17、內部類訪問特點:Ⅰ.內部類可以直接訪問外部類的成員,包括私有。將內部類看作外部類的一個成員,像一個成員方法一樣。Ⅱ.外部類要訪問內部類的成員,必須建立物件。

18、內部類訪問特點:Ⅲ.外部類名.內部類名 物件名 = 外部類物件.內部類物件;(new 外部類名().new 內部類名();)

19、成員內部類私有使用:private class 內部類名{} 如果想呼叫私有的成員內部類中的方法,只能在外部類本類中建立公共方法並在該公共方法中例項化私有成員內部類,再用私有的成員內部類物件呼叫原先想呼叫的方法。然後在主方法中例項化外部類,用外部類物件呼叫公共方法。

20、靜態成員內部類:static class 內部類名{} 看作一個靜態的成員,用類名.呼叫。

21、靜態成員內部類訪問方式:外部類名.內部類名 物件名 = 外部類名.內部類物件;(外部類名.new 內部類名();但書寫習慣是new在前,所以:new 外部類名.內部類名();) 靜態內部類裡有靜態方法,呼叫方式:外部類名.內部類名.方法名();

22、類名加()即調了類的一個構造,建立了一個物件。

23、在內部類的方法中想呼叫外部類的成員變數,且內部類有同名的成員變數,格式為:外部類名.this.成員變數名。

24、內部類之所以能獲取外部類的成員,是因為他能獲取到外部類的引用(外部類名.this)。

25、區域性內部類訪問區域性變數:區域性內部類跟區域性變數一個意思,在該方法內有效。只能在其所在的方法中訪問,出了該方法訪問不到

26、如果想訪問區域性內部類中的方法,在該內部類所在的方法中,例項化該類。再用該類的物件去調想訪問的方法。主方法中例項化外部類,用外部類呼叫該內部類所在的方法,即可建立內部類物件,並呼叫所需方法。

27、區域性內部類訪問區域性變數必須用final修飾。

28、解釋27: 因為當呼叫這個方法時,區域性變數如果沒有用final修飾,他的生命週期和所在的方法的生命週期是一樣的,當方法彈棧,這個區域性變數也會消失,那麼如果呼叫該方法的區域性內部類物件在堆裡還沒有馬上消失,還想用這個區域性變數,就用不到了,方法已經彈棧消失了。如果用final修飾會在類載入的時候進入常量池(常量池屬於方法區的一部分)延長區域性變數生命週期,即使方法彈棧,常量池的常量還在,也可以繼續使用。

29、但是jdk1.8取消了這個事情(jdk1.8不加final也沒有問題),所以我認為這是個bug。

30、匿名內部類是區域性內部類的一種,必須寫在方法裡。  class 外部類{方法名(){匿名內部類}} 是內部類的簡化寫法。

31、匿名內部類前提:存在一個類或者介面,這裡的類可以是具體類也可以是抽象類。

32、匿名內部類格式:new 類名或者介面名(){重寫方法;},本質是一個繼承了該類或者實現了該介面的子類匿名物件。

33、匿名內部類解釋Ⅰ:new 類名(){} 繼承一個類。 new 介面名();介面是抽象的,例項化是不行的。

new 介面名(){重寫抽象方法;} 實現該介面(該介面即為父類),整個代表該介面的子類 物件。再加.方法名(); 即可以調{}內重寫後的方法。

34、匿名內部類解釋Ⅱ:將建立子類繼承父類、重寫方法和new 子類物件(父類引用指向子類物件)、呼叫方法一步喝成,並省略建立子類,new 子類物件(物件即為類名加構造())的過程,直接通過父類建立子類物件並重寫抽象方法,再通過.方法名(); 直接呼叫重寫的方法。好處:不用建立子類了,不用起類名了。

35、匿名內部類重寫多個方法呼叫:匿名內部類只針對重寫一個方法時候使用。多個方法還是用有名字的類。

36、如果非要用匿名內部類重寫多個方法呼叫:介面名 識別符號 = new 介面名(){重寫抽象方法;} (父類引用指向子類物件 ),再用 識別符號.重寫方法1; 識別符號.重寫方法2;…… 但弊端是若子類有自己的方法,則無法呼叫。又因為沒有子類類名,無法向下強轉。

37、匿名內部類在開發中的應用:匿名內部類當做引數傳遞 物件名.呼叫方法名(new 父類名(){重寫抽象方法;});

本質是把匿名內部類看作一個物件,一個多做了方法重寫的物件。

38、鏈式程式設計,每次呼叫方法後還能繼續呼叫方法,證明呼叫方法返回的是物件。

39、如果一個方法的形式引數是一個類型別(引用型別),則需要傳入該類的物件或其子類物件,本質是匿名物件。

40、匿名物件就是沒有名字的物件,應用在僅僅只呼叫一次方法的時候。匿名呼叫可以節省程式碼。但不適合呼叫多次方法時使用。匿名物件呼叫完畢就是垃圾,可以被垃圾回收器回收。匿名物件可以作為實際引數傳遞。

41、private僅僅是封裝的一種體現形式,不能說封裝就是私有。封裝是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。

42、this代表當前物件的引用,可以用來區分成員變數和區域性變數重名。

43、構造方法沒有返回值型別,連具體的void都沒有,否則會被當成普通方法。沒有具體的返回值,想加只能寫return;

44、建立物件等式右邊解析:new 類名+構造方法 = new 物件;

45、方法重寫:子父類出現了一模一樣的方法,返回值可以是子父類,return new 子父類名();。解釋:子父類重寫方法時,父類被重寫的方法的返回值是引用型別且是子類重寫的方法的返回值的父類。可以這樣定義是因為,子類比父類更加的強大。

46、抽象類就比一般類多了個定義抽象方法的功能。

47、匿名內部類的位元組碼檔名字是由 外部類加$加數字 組成,是第幾個匿名內部類,數字就是幾。有名字的最後就是內部類的名字。