天天看點

面向對象基礎(知識點的歸納)一、面向對象基本概念二、類與對象三、封裝性四、構造方法五、this關鍵字六、static關鍵字七、代碼塊八、單例設計模式

面向對象

  • 一、面向對象基本概念
    • 一、什麼是面向對象:
          • 1.介紹:
          • 2.三大思想:
          • 3.三大特征:
    • 二、建立面向對象思維方式:
    • 三、如何學習面向對象
  • 二、類與對象
    • 1、什麼是類?
    • 2、類與對象的關系
    • 3、類和對象的定義格式
    • 4、屬性與方法
    • 5、對象的定義和使用
    • 6、對象記憶體說明
  • 三、封裝性
        • 一、 封裝性的概念
        • 二、封裝的好處
        • 三、成員變量和局部變量
  • 四、構造方法
  • 五、this關鍵字
  • 六、static關鍵字
  • 七、代碼塊
  • 八、單例設計模式

一、面向對象基本概念

一、什麼是面向對象:

1.介紹:

1、面向對象是一種程式設計思想

2、面向對象是一種思考問題的思維方式

2.三大思想:

面向對象思想從概念上講分為以下三種:OOA、OOD、OOP

OOA:面向對象分析(O`ject Oriented Analysis)  
OOD:面向對象設計(ObjectOriented Design)  
OOP:面向對象程式(Object Oriented Programing)
           
3.三大特征:
封裝性:所有的内容對外部不可見=
繼承性:将其他所有功能繼承下來繼續發展
多态性:方法的重載本身就是一個多态性的展現
           

二、建立面向對象思維方式:

1、先整體、再局部

2、先抽象、再具體

3、能做什麼、再怎麼做

三、如何學習面向對象

1、掌握一門面向對象語言的文法

2、熟悉面向對象的設計原則

3、熟悉面向對象設計模式

面向過程:以步驟為機關、一步步完成具體事情

面向對象:以對象為機關,通過排程組合不同的對象來完成具體事情

二、類與對象

1、什麼是類?

1、類是:分類、類别。

2、通過分類、我們可以區分不同的事物種類。

3、類具有一種相同特性(屬性)與行為(方法)的事物集合。

2、類與對象的關系

1、類表示一個共性的産物:是一個綜合的特性,而對象是一個個性的産物,是一個個體的特征。

2、類由屬性和方法組成:

屬性:就相當于一個個特征。

方法:就相當于人的一個個的行為,例如:吃飯、唱歌、睡覺。

3、類和對象的定義格式

在Java語句中可以使用以下語句定義一個類:

class類名稱{
成員屬性
成員方法
}
           

4、屬性與方法

屬性定義格式:

資料類型 屬性名;

屬性定義并指派的格式:

資料類型 屬性名 = 初始化值;

方法定義格式:

權限修飾符 傳回值類型 方法名(形式參數清單){

//方法體

return 傳回值;

}

5、對象的定義和使用

一個類要想真正的進行操作,則必須依靠對象,對象的定義格式如下:

類名稱 對象名稱 =new 類名稱();

按照以上的格式就可以産生對象了

如果要想通路類中的屬性或方法(方法的定義)則可以依靠以下的文法形式:

通路類中的屬性:

對象 屬性;

調用類中的方法:

對象 方法;

在Java中對象聲明有兩種含義

聲明對象:Person person=null;

表示聲明了一個對象,但是此對象無法使用,person沒有具體的記憶體指向。

執行個體化對象:person=new Person

表示執行個體化了對象可以使用

通過對象調用方法: person.eat()

匿名對象調用方法: new Person().eat()

6、對象記憶體說明

1、new關鍵字表示建立一個對象

2、new關鍵字表示執行個體化一個對象

3、new關鍵字表示申請記憶體空間

注意:如果使用一個沒有申請記憶體空間的對象,會報空指針異常

java.lang.NuIPpinterException

這裡隻作文字說明,可以自己網上搜尋圖解更好了解

(1)new關鍵字:表示向記憶體申請空間,也表示執行個體化一個對象,建立一個對象。

(2)一個對象在記憶體中的大小,由該對象的所有屬性所占的記憶體大小的總和。引用類型變量在32位系統上占4個位元組,在64位系統上占8個位元組,加上而外的對象隐性資料所占的大小。

(3)相同的類型才可以指派、字元串是引用類型變量、不是基本資料類型變量。

(4)不同的引用,指向同一個對象,任何一個引用改變對象的值,其它引用都會反映出來。

(5)程式設計時要注意的問題,在确定不使用對象時,要盡早釋放對象:引用=null

(6)當一個堆中的對象沒有被任何一個引用變量所指向時,該對象會被JVM的GC認為是垃圾對象,進而被回收。

三、封裝性

一、 封裝性的概念

1、封裝性是面向對象思想的三大特征之一。

2、封裝就是隐藏實作細節,僅對外提供通路接口。

封裝有:屬性的封裝、方法的封裝、類的封裝、子產品化封裝、系統級封裝…

二、封裝的好處

1、子產品化

2、資訊隐藏

3、代碼重用

4、插件化易于調試

5、具有安全性

封裝缺點:

會影響執行效率

如果屬性沒有封裝、那麼在本類之外建立對象後,可以直接通路屬性

private關鍵字:通路權限修飾符,public表示公有的,private表示私有的,私有的屬性或方法 ,隻能在本類中通路,公有的屬性和方法,可以被類外部其它類通路,想要在類外部通路私有屬性,我們需要提供公有的方法來間接通路。

通常一個類中,屬性都私有化,并對外提供getter and setter方法。

三、成員變量和局部變量

1、在類中的位置不同

成員變量:在類中的定義

局部變量:在方法中定義或者方法的參數

2、在記憶體中的位置不同

成員變量:在堆記憶體(成員變量屬于對象,對象進堆記憶體)

局部變量:在棧記憶體(局部變量屬于方法,方法進棧記憶體)

3、生命周期不同

成員變量:随着對象的建立而存在,随着對象的銷毀而消失

局部變量:随着方法的調用而存在,随着方法的調用完畢而消失

4、初始化值不同

成員變量:有預設初始化值,引用類型預設null

局部變量:沒有預設初始化值,必須定義,指派,然後才能使用

注意:局部變量名稱可以和成員變量名稱一樣,在方法中使用的時候,采用的是就近原則。

四、構造方法

什麼是構造方法?

1、構造方法就是類構造對象時調用的方法,用于對象的初始化工作

2、構造方法是執行個體化一個類的對象時、也就是new的時候,最先調用的方法

構造方法的定義:

構造方法是在類中定義的,構造方法的格式:方法名稱與類名稱相同,無傳回值類型的聲明。

對象的執行個體化文法:

Dog dog = new Dog();

new Dog 後面有個括号,帶括号表示調用了方法,此時調用的方法就是構造方法。

構造方法的重載

無參構造方法:
public Dog(){}
           
帶一個參數的構造方法:

public Dog(String name){
     this.name = name;
}
           
帶多個參數的構造方法:

public Dog(String name,int age){
      this.name = name;
      this.age = age;

}
           

(1)構造方法名稱與類名稱相同,沒有傳回值聲明(包括void)

(2)構造方法用于初始化資料(屬性)

(3)每一個類中都會有一個預設的無參構造方法

(4)如果類中有顯示的構造方法,那麼預設構造方法将會無效

(5)如果有顯示的構造方法,還想保留預設構造方法,需要顯示的寫出來

(6)構造方法可以有多個但參數不一樣,稱之為構造方法重載

(7)在構造方法中調用另一個構造方法,使用this(…),該句代碼必須在第一句

(8)構造方法之間的調用,必須要有出口

(9)給對象初始化資料可以使用構造方法setter方法,通常情況下兩者都會保留

(10)一個好的程式設計習慣是保留預設構造方法(為了友善一些架構代碼使用反射來建立對象)

(11)private Dog(){},構造方法私有化,當我們的需求是為了保證該類隻有一個對象時。什麼時候一個類隻需要一個對象?比如,工具類(沒有屬性的類,隻有行為)并且該對象被頻繁使用,權衡隻有一個對象與産生多個對象的記憶體使用,來确定該類是否要定義為隻需要一個對象。

五、this關鍵字

在Java基礎中,this關鍵字是一個最重要的概念,使用this關鍵字可以完成以下操作:

調用類中的屬性

調用類中的方法和構造方法

表示目前對象this.類名來表示目前對象

在方法使用this調用類中的其它方法或屬性,this可以省略,this前面可以使用目前的類名.this
           

六、static關鍵字

static關鍵字的作用:

1、使用static關鍵字修飾一個屬性

聲明為static的變量實質上就是全局變量。

2、使用static關鍵字修飾一個方法

通常、在一個類中定義一個方法static,那就是說,無需本類的對象即可調用此方法。

3、使用static關鍵字修飾一個類(内部類)

(1)靜态變量或方法不屬于對象、依賴類。

(2)靜态變量是全局變量、生命周期從類被加載後一直到程式結束。

(3)靜态變量隻有存一份、在靜态方法區中存儲。

(4)靜态變量是本類所有對象共享一份靜态變量(全局變量)。

(5)建議不要使用對象名去調用靜态資料,直接使用類名調用。

(6)static修飾一個方法,那麼該方法屬于類、不屬于對象,直接用類名調用。

(7)靜态方法不能通路非靜态屬性和方法、隻能通路靜态。

七、代碼塊

1、普通代碼塊,在方法中寫的代碼塊。

直接寫在方法中的代碼塊就是普通代碼塊

public class Demo1{

public static void main(String [ ] arge){

//普通代碼塊
String info="局部變量-1";
System.out.println(info);

}

String info = "局部變量-2";
System.out.println(info);

}

}
           

2、構造塊,在類中定義的代碼塊,在建立對象時被調用,優于構造方法執行。

class Demo{
{   //構造塊
System.out.println("構造塊");

}

public Demo{
System.out.println("構造方法");
}

}
           

3、在類中使用static聲明的代碼塊稱為靜态代碼塊、在第一使用時被調用(建立對象)隻會執行一次,優于構造塊執行。在項目開發中,通常會使用靜态代碼塊來初始化隻調用一次資料

class Demo{
{
System.out.println("構造快");
}
static{
System.out.println("靜态代碼塊");
 }
public Demo{
System.out.println("構造方法");
}
}
           

重點使用順序:靜态代碼塊,普通代碼塊,同步代碼塊,構造代碼塊。

八、單例設計模式

保證一個類僅有一個執行個體,并提供一個通路它的全局通路點。

1、構造方法私有化

2、聲明一個本類對象

3、給外部提供一個靜态方法擷取對象執行個體

兩種實作方式:

1、餓漢式:在類被加載後,對象被建立,到程式結束後被釋放。

(占用記憶體時間長,提高效率)

2、懶漢式,在第一次調用getInstance方法時,對象被建立,到程式結束後被釋放。

(占用時間短,效率低(懶加載,延遲加載),在多線程通路時會有安全問題)

在項目中為什麼要使用單例,單例有什麼好處?

1、在設計一些工具類的時候(通常工具類、隻有功能方法,沒有屬性)。

2、工具類可能被頻繁調用(目的是為了節省重複建立對象所帶來的記憶體消耗,進而來提高效率)。