1. 程式人生 > >黑馬程式設計師_學習筆記JAVA基礎總結

黑馬程式設計師_學習筆記JAVA基礎總結

1、方法過載 方法覆蓋

過載:一個類中一種功能的多種實現方式,呼叫哪種實現方式,根據呼叫者給出的引數。有兩個或多個方法方法名相同,但是引數型別或者引數個數或者引數順序不同。
覆蓋:子類重寫父類的一個函式,函式名,引數,返回型別都相同。

覆蓋的應用:

當子類需要父類的功能,而功能主體子類有自己特有內容時,可以複寫父類中的方法,這樣,即沿襲了父類的功能,又定義了子類特有的內容

Overload和Override的區別

override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個方法並且對其重寫,以求達到不同的作用。對我們來說最熟悉的覆蓋就是對介面方法的實現,在介面中一般只是對方法進行了宣告,而我們在實現時,就需要實現介面宣告的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點:

1、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全匹配,才能達到覆蓋的效果;

2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;

3、覆蓋的方法所丟擲的異常必須和被覆蓋方法的所丟擲的異常一致,或者是其子類;

4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。

overload可以翻譯為過載,它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入引數來區分這些方法,然後再呼叫時,VM就會根據不同的引數樣式,來選擇合適的方法執行。在使用過載要注意以下的幾點:

1、在使用過載時只能通過不同的引數樣式。例如,不同的引數型別,不同的引數個數,不同的引數順序(當然,同一方法內的幾個引數型別必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int));

2、不能通過訪問許可權、返回型別、丟擲的異常進行過載;

3、方法的異常型別和數目不會對過載造成影響;

4、對於繼承來說,如果某一方法在父類中是訪問許可權是priavte,那麼就不能在子類對其進行過載,如果定義的話,也只是定義了一個新方法,而不會達到過載的效果。

2、static關鍵字:

用於修飾成員(成員變數和成員函式):類變數或類方法

被修飾後的成員具備以下特點:

隨著類的載入而載入

優先於物件存在

被所有物件所共享

可以直接被類名呼叫

使用注意

靜態方法只能訪問靜態成員

靜態方法中不可以寫this,super關鍵字

主函式是靜態的

修飾程式碼塊:靜態區域塊 static{ }  --只在定義類的時候執行一次

3、java面向物件程式設計的三大特徵:

封裝(訪問控制修飾符,包)

繼承(extends)

多型(一個引用在不同情況下的多種狀態 )

5抽象類,介面,final

 抽象類:

abstract class Animal{
abstract public void cry();
}
 介面:

interface Usb{

public void start();

}
      class Camera implements Usb{
public void start(){}
}
 抽象類中的方法可以有方法體,介面中所有方法都沒有方法體;
 一個類只能繼承一個父類,但是可以實現多個介面;

 介面中所有變數都不能用private和protected修飾,介面中所有的變數本質上都是靜態變數,不管寫不寫static,而且是final的;
 在java開發中,我們把經常用的變數定義在介面中作為全域性變數,呼叫方法:介面名.變數名;
 一個介面不能繼承其他的類,但是可以實現(繼承)其他的介面。

6、集合類:

類的集合,定義的時候不用設定長度。

List:方便遍歷,不方便單個查詢    

Map:鍵值對,方便單個查詢
ArrayList:資料增長慢適合小資料                                              

Vertor:適合大資料,但是速度稍慢    

7、&和&&的區別。

&和&&都可以用作邏輯與的運算子,表示邏輯與(and),當運算子兩邊的表示式的結果都為true時,整個運算結果才為true,否則,只要有一方為false,則結果為false。

&&還具有短路的功能,即如果第一個表示式為false,則不再計算第二個表示式,例如,對於if(str! = null && !str.equals(“”))表示式,當str為null時,後面的表示式不會執行,所以不會出現NullPointerException如果將&&改為&,則會丟擲NullPointerException異常。If(x==33 & ++y>0) y會增長,If(x==33 && ++y>0)不會增長

&還可以用作位運算子,當&操作符兩邊的表示式不是boolean型別時,&表示按位與操作,我們通常使用0x0f來與一個整數進行&運算,來獲取該整數的最低4個bit位,例如,0x31 & 0x0f的結果為0x01。

8、Java 的 char型變數是兩個位元組

char型變數是用來儲存Unicode編碼的字元的,unicode編碼字符集中包含了漢字,所以,char型變數中當然可以儲存漢字啦。不過,如果某個特殊的漢字沒有被包含在unicode編碼字符集中,那麼,這個char型變數中就不能儲存這個特殊漢字。補充說明:unicode編碼佔用兩個位元組,所以,char型別的變數也是佔用兩個位元組。

9、Java 的 char型變數是兩個位元組

==操作符專門用來比較兩個變數的值是否相等,也就是用於比較變數所對應的記憶體中所儲存的數值是否相同,要比較兩個基本型別的資料或兩個引用變數是否相等,只能用==操作符。

如果一個變數指向的資料是物件型別的,那麼,這時候涉及了兩塊記憶體,物件本身佔用一塊記憶體(堆記憶體),變數也佔用一塊記憶體,例如Objet obj = new Object();變數obj是一個記憶體,new Object()是另一個記憶體,此時,變數obj所對應的記憶體中儲存的數值就是物件佔用的那塊記憶體的首地址。對於指向物件型別的變數,如果要比較兩個變數是否指向同一個物件,即要看這兩個變數所對應的記憶體中的數值是否相等,這時候就需要用==操作符進行比較。

equals方法是用於比較兩個獨立物件的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個物件是獨立的。例如,對於下面的程式碼:

String a=new String("foo");

String b=new String("foo");

兩條new語句建立了兩個物件,然後用a,b這兩個變數分別指向了其中一個物件,這是兩個不同的物件,它們的首地址是不同的,即a和b中儲存的數值是不相同的,所以,表示式a==b將返回false,而這兩個物件中的內容是相同的,所以,表示式a.equals(b)將返回true。

如果一個類沒有自己定義equals方法,那麼它將繼承Object類的equals方法,Object類的equals方法的實現程式碼如下:

boolean equals(Object o){

return this==o;

}

這說明,如果一個類沒有自己定義equals方法,它預設的equals方法(從Object類繼承的)就是使用==操作符,也是在比較兩個變數指向的物件是否是同一物件,這時候使用equals和使用==會得到同樣的結果,如果比較的是兩個獨立的物件則總返回false。如果你編寫的類希望能夠比較該類建立的兩個例項物件的內容是否相同,那麼你必須覆蓋equals方法,由你自己寫程式碼來決定在什麼情況即可認為兩個物件的內容是相同的。

10.記憶體結構:

Java程式在執行時,需要在記憶體中的分配空間。為了提高運算效率,

有對空間進行了不同區域的劃分,因為每一片區域都有特定的處理資料方式和記憶體管理方式。

棧記憶體:用於儲存區域性變數,當資料使用完,所佔空間會自動釋放。

堆記憶體:陣列和物件,通過new建立的例項都存放在堆記憶體中。

每一個實體都有記憶體地址值

實體中的變數都有預設初始化值

實體不在被使用,會在不確定的時間內被垃圾回收器回收

11、作用域public,private,protected,以及預設的區別

如果在修飾的元素上面沒有寫任何訪問修飾符,則表示package。

作用域    當前類 當前package      子孫類   其他package

public        √              √                     √           √

protected  √              √                      √           ×

friendly     √               √                     ×            ×

private      √              ×                      ×           ×

12、super和this的用法

this代表本類物件的引用

super代表父類的記憶體空間的標識。

當子父類出現同名成員時,可以用super進行區分

子類要呼叫父類建構函式時,可以使用super語句。

 13、final關鍵字

final可以修飾類,方法,變數。

final修飾的類不可以被繼承。

final修飾的方法不可以被覆蓋。

final修飾的變數是一個常量。只能被賦值一次。

內部類只能訪問被final修飾的區域性變數。

14、使用final關鍵字修飾一個變數時,是引用不能變,還是引用的物件不能變?

使用final關鍵字修飾一個變數時,是指引用變數不能變,引用變數所指向的物件中的內容還是可以改變的。

例如,對於如下語句:

 final StringBuffer a=new StringBuffer("immutable");
執行如下語句將報告編譯期錯誤:

a=new StringBuffer("");
但是,執行如下語句則可以通過編譯:

a.append(" broken!"); 

有人在定義方法的引數時,可能想採用如下形式來阻止方法內部修改傳進來的引數物件:

publicvoid method(final  StringBuffer  param){

}

實際上,這是辦不到的,在該方法內部仍然可以增加如下程式碼來修改引數物件:

          param.append("a");

15.抽象

抽象定義:抽象就是從多個事物中將共性的,本質的內容抽取出來。

抽象類:Java中可以定義沒有方法體的方法,該方法的具體實現由子類完成,該方法稱為抽象方法,

包含抽象方法的類就是抽象類。

抽象方法的由來:

多個物件都具備相同的功能,但是功能具體內容有所不同,那麼在抽取過程中,只抽取了功能定義,

並未抽取功能主體,那麼只有功能宣告,沒有功能主體的方法稱為抽象方法。

抽象類的特點

抽象類和抽象方法必須用abstract關鍵字來修飾。

抽象方法只有方法宣告,沒有方法體,定義在抽象類中。

格式:修飾符abstract返回值型別函式名(引數列表);

抽象類不可以被例項化,也就是不可以用new建立物件。原因如下:

抽象類是具體事物抽取出來的,本身是不具體的,沒有對應的例項。

例如:犬科是一個抽象的概念,真正存在的是狼和狗。

而且抽象類即使建立了物件,呼叫抽象方法也沒有意義。

抽象類通過其子類例項化,而子類需要覆蓋掉抽象類中所有的抽象方法後才可以建立物件,

否則該子類也是抽象類。

16.介面

格式:public interface介面名稱{}

介面中的成員修飾符是固定的。

成員常量:public static final

成員函式:public abstract

介面的出現將“多繼承”通過另一種形式體現出來,即“多實現”。

介面的特點:

介面是對外暴露的規則。

介面是程式的功能擴充套件。

介面的出現降低耦合性。

介面可以用來多實現。

類與介面之間是實現關係,而且類可以繼承一個類的同時實現多個介面。

介面與介面之間可以有繼承關係。

介面與抽象的區別於共性:

共性:都是不斷抽取出來的抽象的概念

區別:1)抽象類體現繼承關係,一個類只能單繼承介面體現實現關係,一個類可以多實現

2)抽象類是繼承,是"is a"關係介面是實現,是"like a"關係

3)抽象類中可以定義非抽象方法,供子類直接使用。介面的方法都是抽象,介面中的成員都有固定修飾符

17.多型

定義:某一類事物的多種存在形態。

程式中體現:

父類或者介面的引用指向或者接收自己的子類物件。

好處和作用:

多型的存在提高了程式的擴充套件性和後期可維護性

前提:

1)需要存在繼承或者實現關係

2)要有覆蓋操作

多型的特點

成員函式:

編譯時:要檢視引用變數所屬的類中是否有所呼叫的成員。

在執行時:要檢視物件所屬的類中是否有所呼叫的成員。

成員變數:

只看引用變數所屬的類。

實體繼承類抽象類介面的設計原則以及各特點:

1、抽象層次不同。抽象類是對類抽象,而介面是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是介面卻是對類區域性(行為)進行抽象。

2、跨域不同。抽象類所跨域的是具有相似特點的類,而介面卻可以跨域不同的類。我們知道抽象類是從子類中發現公共部分,然後泛化成抽象類,子類繼承該父類即可,但是介面不同。實現它的子類可以不存在任何關係,共同之處。例如貓、狗可以抽象成一個動物類抽象類,具備叫的方法。鳥、飛機可以實現飛Fly介面,具備飛的行為,這裡我們總不能將鳥、飛機共用一個父類吧!所以說抽象類所體現的是一種繼承關係,要想使得繼承關係合理,父類和派生類之間必須存在"is a"關係,即父類和派生類在概念本質上應該是相同的。對於介面則不然,並不要求介面的實現者和介面定義在概念本質上是一致的,僅僅是實現了介面定義的契約而已。

3、設計層次不同。對於抽象類而言,它是自下而上來設計的,我們要先知道子類才能抽象出父類,而介面則不同,它根本就不需要知道子類的存在,只需要定義一個規則即可,至於什麼子類、什麼時候怎麼實現它一概不知。比如我們只有一個貓類在這裡,如果你這是就抽象成一個動物類,是不是設計有點兒過度?我們起碼要有兩個動物類,貓、狗在這裡,我們在抽象他們的共同點形成動物抽象類吧!所以說抽象類往往都是通過重構而來的!但是介面就不同,比如說飛,我們根本就不知道會有什麼東西來實現這個飛介面,怎麼實現也不得而知,我們要做的就是事前定義好飛的行為介面。所以說抽象類是自底向上抽象而來的,介面是自頂向下設計出來的。

相關推薦

no