JavaSE學習筆記(2)---面向對象基礎

JavaSE學習筆記(2)---面向對象基礎

 1.面向對象具備三大特徵:封裝性、繼承性和多態性,而面向過程沒有繼承性和多態性,而且面向過程的封裝只是封裝功能,而面向對象能夠封裝數據和功能。因此面向對象優點更明顯。java

 2.一個經典的比喻:面向對象是蓋澆飯、面向過程是蛋炒飯。蓋澆飯的好處就是「菜」「飯」分離,從而提升了製做蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業術語就是「可維護性」比較好,「飯」 和「菜」的耦合度比較低。程序員

​ 3.類的定義數組

// 每個源文件必須有且只有一個public class,而且類名和文件名保持一致!
public class Car { 
}
class Tyre { // 一個Java文件能夠同時定義多個class
}
class Engine {
}
class Seat {
}

​ 4.屬性用於定義該類或該類對象包含的數據或者說靜態特徵。屬性做用範圍是整個類體。在定義成員變量時能夠對其初始化,若是不對其初始化,Java使用默認的值對其初始化。網絡

成員變量的默認值
數據類型 默認值
整型 0
浮點型 0.0
字符型 '\u0000'
布爾型 false
全部引用類型 null

​ 5.方法用於定義該類或該類實例的行爲特徵和功能實現。方法是類和對象行爲特徵的抽象。方法很相似於面向過程當中的函數。面向過程當中,函數是最基本單位,整個程序由一個個函數調用組成。面向對象中,整個程序的基本單位是類,方法是從屬於類和對象的。函數

方法定義格式: 工具

[修飾符] 方法返回值類型 方法名(形參列表) {``  ``// n條語句``}
//例如   
 public void carinfo(){
    System.out.println("輸出汽車的信息")
}

​ 6.JVM的內存分析學習

​ Java虛擬機的內存能夠分爲三個區域:棧stack、堆heap、方法區method area。this

棧的特色以下:.net

  • 棧描述的是方法執行的內存模型。每一個方法被調用都會建立一個棧幀(存儲局部變量、操做數、方法出口等)線程

  • JVM爲每一個線程建立一個棧,用於存放該線程執行方法的信息(實際參數、局部變量等)
  • 棧屬於線程私有,不能實現線程間的共享!
  • 棧的存儲特性是「先進後出,後進先出」
  • 棧是由系統自動分配,速度快!棧是一個連續的內存空間!

堆的特色以下:

  • 堆用於存儲建立好的對象和數組(數組也是對象)
  • JVM只有一個堆,被全部線程共享
  • 堆是一個不連續的內存空間,分配靈活,速度慢!

方法區(又叫靜態區)特色以下:

  • JVM只有一個方法區,被全部線程共享!
  • 方法區實際也是堆,只是用於存儲類、常量相關的信息!
  • 用來存放程序中永遠是不變或惟一的內容。(類信息【Class對象】、靜態變量、字符串常量等)

1.png

​ 7.構造器也叫構造方法(constructor),用於對象的初始化。構造器是一個建立對象時被自動調用的特殊方法,目的是對象的初始化。構造器的名稱應與類的名稱一致。Java經過new關鍵字來調用構造器,從而返回該類的實例,是一種特殊的方法。

  • 經過new關鍵字調用
  • 構造器雖然有返回值,可是不能定義返回值類型(返回值的類型確定是本類),不能在構造器裏使用return返回某個值。
  • 若是咱們沒有定義構造器,則編譯器會自動定義一個無參的構造函數。若是已定義則編譯器不會自動添加
  • 構造器的方法名必須和類名一致
  • 構造方法也能夠重載

​ 8.Java引入了垃圾回收機制,令C++程序員最頭疼的內存管理問題迎刃而解。Java程序員能夠將更多的精力放到業務邏輯上而不是內存管理工做上,大大的提升了開發效率。

​ 9.對象建立的過程和this的本質

  構造方法是建立Java對象的重要途徑,經過new關鍵字調用構造器時,構造器也確實返回該類的對象,但這個對象並非徹底由構造器負責建立。建立一個對象分爲以下四步:

  • 分配對象空間,並將對象成員變量初始化爲0或空
  • 執行屬性值的顯示初始化
  • 執行構造方法
  • 返回對象的地址給相關的變量

  因此,this的本質就是「建立好的對象的地址」! 因爲在構造方法調用前,對象已經建立。所以,在構造方法中也可使用this表明「當前對象」 。

this注意事項:

  • 在程序中產生二義性之處,應使用this來指明當前對象;普通方法中,this老是指向調用該方法的對象。構造方法中,this老是指向正要初始化的對象。
  • 使用this關鍵字調用重載的構造方法,避免相同的初始化代碼。但只能在構造方法中用,而且必須位於構造方法的第一句。
  • this不能用於static方法中。

​ 10.在類中,用static聲明的成員變量爲靜態成員變量,也稱爲類變量。 類變量的生命週期和類相同,在整個應用程序執行期間都有效。它有以下特色:

  • 爲該類的公用變量,屬於類,被該類的全部實例共享,在類被載入時被顯式初始化。
  • 對於該類的全部對象來講,static成員變量只有一份。被該類的全部對象共享
  • 通常用「類名.類屬性/方法」來調用。(也能夠經過對象引用或類名(不須要實例化)訪問靜態成員。)
  • 在static方法中不可直接訪問非static的成員。

核心要點:

static修飾的成員變量和方法,從屬於類。

普通變量和方法從屬於對象的。

​ 11.構造方法用於對象的初始化!靜態初始化塊,用於類的初始化操做!在靜態初始化塊中不能直接訪問非static成員。

靜態初始化塊執行順序:

  • 上溯到Object類,先執行Object的靜態初始化塊,再向下執行子類的靜態初始化塊,直到咱們的類的靜態初始化塊爲止。
  • 構造方法執行順序和上面順序同樣!!

12.Java中,方法中全部參數都是「值傳遞」,也就是「傳遞的是值的副本」。 也就是說,咱們獲得的是「原參數的複印件,而不是原件」。所以,複印件改變不會影響原件。

· 基本數據類型參數的傳值

  傳遞的是值的副本。 副本改變不會影響原件。

· 引用類型參數的傳值

  傳遞的是值的副本。可是引用類型指的是「對象的地址」。所以,副本和原參數都指向了同一個「地址」,改變「副本指向地址對象的值,也意味着原參數指向對象的值也發生了改變」。

Java中的經常使用包 說明
java.lang 包含一些Java語言的核心類,如String、Math、Integer、System和Thread,提供經常使用功能。
java.awt 包含了構成抽象窗口工具集(abstract window toolkits)的多個類,這些類被用來構建和管理應用程序的圖形用戶界面(GUI)。
java.net 包含執行與網絡相關的操做的類。
java.io 包含能提供多種輸入/輸出功能的類。
java.util 包含一些實用工具類,如定義系統特性、使用與日期日曆相關的函數。
相關文章
相關標籤/搜索