Java基礎-面向物件-簡單總結(2)
面向物件:
Java是一種面向物件的語言,優點:1,系統結構穩定。2.子系統相對獨立。3.軟體可重用性,可維護性和可拓展性強。
面向物件的三大特徵:封裝,繼承,多型。
物件:描述客觀事物的實體。
類:具有相同屬性物件的集合。類中定義了物件將會有的屬性(特徵)和方法(行為)。
引數:
形參:建立方法時定義的引數,叫形式引數。
實參:呼叫方法時傳入的引數,叫實際引數。
方法過載:
在一個類中定義多個重名的方法,但每個方法具有不同的引數型別或引數個數。構造方法也可以過載(同類.同名.不同參)
優點:根據引數的不同,採用不同的實現方法,簡化了類呼叫方法的程式碼。
作用域:
全域性變數(成員變數):在類中定義,全域性呼叫,系統預設賦初始值。
區域性變數:在方法中定義,方法外不可呼叫,無初始值,賦值後使用。
構造方法:
每個類有一個預設無參構造方法,手工新增有參構造方法後,預設無參構造方法被覆蓋,如果想使用無參構造,必須將無參構造寫到類中。
封裝:
將類的資訊隱藏在類內部,不允許外部程式直接訪問,可以通過該類提供的方法實現對隱藏資訊的訪問和操作。
封裝兩大原則:1.把儘可能多的東西藏起來,對外提供便捷的介面。2.把所有的屬性藏起來。
實現封裝:1.修改屬性的可見性:private 資料型別 變數名。
2.建立公有的get/set方法:用於屬性的讀寫。
3.在get/set方法中加入屬性流控制語句:對屬性值的合理性進行判斷。
封裝的優點:1.使用者正確使用系統,防止錯誤修改屬性。
2.有助於系統間的鬆耦合,提高系統獨立性。
3.提高軟體可重用性。
4.降低了構建大型系統的風險。
包:
package,Java原始檔中第一條非註釋語句,一個原始檔只能有一個包宣告語句。
命名規範:小寫字母組成,不能以圓點開頭或結尾
類的訪問修飾符:
修飾符\作用域 同一包中 非同一包中
public 可用 可用
預設修飾符 可用 不可用
類成員的訪問修飾符:
修飾符\作用域 同一類中 同一包中 子類中 其他
private 可用 不可用 不可用 不可用
預設修飾符 可用 可用 不可用 不可用
protected 可用 可用 可用 不可用
public 可用 可用 可用 可用
static:
常用場景:定義使用final關鍵字修飾的常量,例:static final int PERSON_LIVE=1;
用static修飾的屬性稱為靜態變數或者類變數,未使用static修飾的屬性成為例項變數。
用static修飾的方法稱為靜態方法或者類方法,未使用static修飾的方法成為例項方法,方法中不能使用this和super。
static修飾的屬性和方法使用型別打點可直接呼叫“類名.”。
繼承:
將子類共有的屬性提取到父類中。
使用 extends 建立繼承關係。單根繼承:一個類只能有一個直接父類,但可以有多個間接父類。
子類通過super呼叫父類屬性,方法,構造方法。
例項化子類物件:
子類在例項化時,會先執行父類的構造方法,然後執行子類的構造方法。
父類引用可指向子類物件。例:Pet pet=new Dog();Dog為Pet子類。
Object類是所有類的父類。
方法重寫:
重寫方法和被重寫方法必須具有相同的方法名。
重寫方法和被重寫方法必須具有相同的引數列表。
重寫方法的返回值型別必須和被重寫方法的返回值型別相同,或是其子類。
重寫方法不能縮小被重寫方法的訪問許可權。
構造方法不能被重寫。
(同名,同參,不同類,同返回值或是其子類,訪問許可權不能嚴於父類)
多型:
方法重寫是實現多型的基礎。
向上轉型:子類轉父類直接轉換。
向下轉型:父類轉子類需要進行強制型別轉換。
instanceof:進行型別的判斷。判斷一個物件是否屬於一個類。
多型的優勢:可替換性,可擴充性,介面性,靈活性,簡化性。
多型的應用:使用父類作為方法的形參,作為方法的返回值。
抽象類:abstract
抽象類不能被例項化。
子類如果不是抽象類,就必須重寫父抽象類中的所有抽象方法。
abstract不能和final一起使用。
private不能修飾抽象方法。
沒有抽象構造方法,也沒有抽象靜態方法。
抽象類可以沒有抽象方法,但抽象方法必須定義在抽象類中。
抽象類中可以有非抽象的構造方法,供子類呼叫。
定義抽象類:public abstract class 類名{ }
定義抽象方法:訪問修飾符 abstract 返回值型別 方法名(引數列表);
介面:interface
介面可以說是一種能力,所以一般講功能放到介面中。
public interface 介面名,實現介面:implements
介面中全是公共的抽象方法(public abstract),變數為全域性靜態常量(public static final)。
介面不可被例項化。一個介面不能實現另一個介面,但可以繼承多個介面。
實現類必須實現介面的所有方法。
實現類可實現多個介面。
面向介面程式設計:關心實現類有何能力,不關心實現細節。關心面向介面的約定而不考慮介面的具體實現。
抽象類和介面:
相同點:1.代表系統的抽象層。
2.都不能被例項化。
3.都能包含抽象方法。
不同點:1.抽象類中可以有非抽象方法,介面中只能有抽象方法。
2.一個類只能有一個直接父類,但可以實現多個介面,中間用逗號隔開。
3.已存在的繼承樹,可以方便的抽取介面,但是抽取抽象類不容易。
使用原則:1.介面做系統與外界互動的視窗。
2.介面一旦制定,就不允許隨便更改。
3.抽象類可完成部分功能的實現和部分功能的拓展。
異常:
關鍵字:try,catch,finally,throw,throws。
Java異常體系結構:所有異常型別都是Throwable類,派生兩個子類:Error類(僅靠程式本身無法恢復的嚴重錯誤)和Exception類(由Java應用程式丟擲和處理的非嚴重錯誤)。
常見的異常類:
Exception:異常層次的根類。
ArithmeticException:算數錯誤異常。
ArrayIndexOutOfBoundsException:陣列下標越界。
NullPointerException:空指標異常,嘗試訪問未建立物件。
ClassNotFoundException:不能載入所需要的類。
InputMismatchException:想得到的資料型別和實際輸入的資料型別不匹配。
IllegalArgumentException:方法接收到非法引數。
ClassCastException:物件強制型別轉換出錯。
NumberFormatException:數字格式轉換異常,如把“abc”轉換成數字。
try-catch-finally結構中try必須存在,其他兩者必須存在一個。
System.exit(1);強制退出Java虛擬機器。
多重catch處理異常時catch語句塊的排序必須是從子類到父類。
throws:用於宣告該方法內丟擲了異常,可繼續宣告,最後由Java虛擬機器處理。位於方法引數列表後。可宣告多個異常。
throw:用於程式設計師自行產生並丟擲異常。位於方法內部。丟擲一個異常物件且只能是一個。
自定義異常:
public class 自定義異常名 extends Exception{ }