Java(面向對象)基礎

Java面向對象


**面向對象三大特徵:**
繼承
封裝
多態
 

OOA(面向對象的分析)
OOD(面向對象的設計)
OOP(面向對象的編程)

類==屬性+方法
屬性來源於類的狀態,方法來源於動作
**類的定義**
public class Student{
int id;            //成員變量
// id是對象級別的,必須先有對象才能訪問;不能直接使用類訪問
String name;
boolean sex;
String adress;
}
創建對象
java中所有new出來的數據統一被儲存在堆中,程序猿無法對堆區數據直接操作,只能通過內存地址間接操作
成員變量在堆中的對象中存儲

/*
關於系統默認值
基本數據類型
byte,short,int , long     0
float , double     0.0
boolean false
char  \u0000
引用數據類型:null
*/
 面向對象的封裝性指的是:
1.屬性私有化
2.對外提供公開的setter    getter
set get 方法的方法名必須應該遵循規範

 

**構造函數(構造方法,構造器,Constructor)**


1.構造方法語句:
【修飾符列表】構造方法名(形式參數列表){
方法體;
}
2.構造方法的方法名必須和類名一致
3.構造方法的作用?
第一,創建對象
第二,給成員變量賦值(初始化成員變量)

4.構造方法應該如何調用?
new  構造方法名(實參);在堆中開闢空間儲存對象
5.如果一個類沒有提供任何構造方法,系統默認提供無參數構造方法
如果一個類已經手動的提供了構造方法,那麼系統不會再提供任何構造方法
6.成員變量到底什麼時候賦值?
只有在調用構造方法的時候,纔給成員變量賦值

構造方法和普通方法一樣可以重載,構造方法不具有任何返回值類型,即沒有返回值,不能有void
對象沒有更多的引用指向,則變成垃圾

**this關鍵字**
1.this是什麼?
this是一個引用類型
在堆中的每一個java對象上都有this
this保存內存地址指向自身
2.this能用在哪些地方?
第一,this可以用在成員方法中
第二,this可以用在構造方法中
語法:this(實參);
通過一個構造方法去調用另一個構造方法
目的:代碼重用;
this(實參);必須出現在構造方法中的第一行
this可以區分成員變量和局部變量
this不能用在靜態方法中
靜態方法的執行根本不需要Java對象的存在,直接使用類名.的方式訪問
而this代表的是當前對象,所以靜態方法中根本沒有this
**static關鍵字**
1.static修飾的變量叫“靜態變量”
2.static修飾的方法叫“靜態方法”
3.static還可以定義靜態語句塊
static定義的靜態語句塊在類加載階段執行,並且只執行一次,是自上而下的順序的執行
關於實例語句塊
每一次調用構造方法之前會執行一次
實例語句塊執行順序也是自上而下
   
一般情況下工具類中的方法大部分都是靜態方法
靜態方法不用創建對象也能直接訪問該方法 
空的引用去訪問成員的時候會出現空指針異常
靜態方法可以使用“類名.”方式調

用,也可以使用“引用.”,即使用的是“引用.”,底層還是用的“類名.”


**什麼時候變量聲明成靜態變量?**
如果這個屬性所有的對象都有,並且這個屬性的值是相同的,則該屬性聲明成靜態的屬性
靜態變量:在類的加載階段賦值,並且只賦值一次
成員變量:在創建對象的時候復賦值 

**單利模式要領:**
1.構造方法私有化
2.對外提供一個公開的靜態的獲取當前類型對象方法
3.提供一個當前類型的靜態變量  

**類的繼承**
引用類的最基本的作用的是:代碼重用
語法:
【修飾符列表】class子類名 extends  父類名{
類體
}
Java中,;類於類只能單繼承
一個類如果沒有顯示繼承其他類,則類默認繼承Object,
Object是Java中的根類

Java語言中子類繼承父類,會將父類中所有的數據全部繼承,包括私有的,
但是在子類中無法直接訪問父類中的私有的數據,但可以間接訪問
注意:構造方法無法被子類繼承

**方法的覆蓋**
1.什麼時侯方法需要重寫?
      如果父類中的方法已經無法滿足當前子類的業務的需求,需要將父類中的方法進行重寫
2.子類如果重寫父類中的方法之後,子類對象一定調用的是重寫之後的方法
3.發生方法覆蓋的條件:
第一;發生在具有繼承關係的兩個類之間
第二;必須具有相同的方法名;相同的返回值類型;相同的參數列表
第三;重寫的方法不能比被重寫的方法擁有更低的訪問權限 
第四;重寫的方法不能比被重寫的方法拋出更寬泛的異常(異常機制)
第五;私有的方法不能被覆蓋
第六;構造方法無法被覆蓋,因爲構造方法不能被繼承
第七;靜態的方法不存在覆蓋
第八;覆蓋指的是成員方法,和成員變量無關
4.繼承最基本的作用:代碼重寫;
   繼承最重要的作用:方法可以重寫

 **多態**
Java中向上轉型和向下轉型
1.向上轉型(upcasting);子---------》父、
2.向下轉型(downcasting);父-------》子;
注意:無論是向上轉型還是向下轉型,兩個類之間必須要有繼承關係
多態的作用:
1.使用多態可以使代碼的耦合度降低
2.項目的擴展能力增強


super關鍵字
1.super不是引用類型,super中儲存的不是內存地址,super指向的不是父類對象
2.super代表的是當前子類對象中的父類型特徵
3.什麼時候使用super?
子類和父類中都有某個數據,如果要在子類中訪問父類中的屬性,需要使用super
4.super可以用在什麼地方?
第一;super可以用在成員方法中,不能用在靜態方法中
第二;super可以用在構造方法中

super在構造方法中;
語法;super(實參);
作用;通過子類的構造方法去調用父類的構造方法;
語法規則;一個構造方法第一行如果沒有this();也沒有顯示的去調用super();
系統會默認調用super();
super的調用只能放在構造方法的第一行;不能和this共存
super()調用了父類中的構造方法,但是不會創建父類對象

單例模式缺點:無法被繼承
1.構造方法私有化
final關鍵字  
1.final修飾的類無法被繼承
2.                 方法
 3.final修飾的局部變量,一旦被賦值,不可被改變
4.final修飾的成員變量必須手動初始化
5.final 修飾的成員變量一般和static聯用

**抽象類**
1. 如何定義抽象類?
class關鍵字前加abstract
2.抽象類無法被實例化
抽象類無法創建對象
3.雖然抽象類沒有辦法實例化,但是抽象類也有構造方法,該構造方法是給子類創建對象用的
4.抽象類中可以定義抽象方法
抽象方法的語法:在方法的修飾符列表中添加abstract關鍵字,並且抽象方法應該以 “ ; ”結束,不能帶有“{  }”
例如;public abstract void  m1();
5.抽象類中不一定有抽象方法,但是抽象方法必須出現在抽象類中;
6.一個非抽象的類繼承抽象類,必須將抽象類中的抽象方法覆蓋,實現,重寫
抽象類不能被final修飾
抽象方法不能被final修飾

final修飾的引用類型,該引用不可再重新指向其他的Java對象
但是final修飾的引用,該引用指向的對象的屬性是可以修改的
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章