1. 程式人生 > >慕課網 Java 入門 第二季 學習筆記

慕課網 Java 入門 第二季 學習筆記

1.1什麼是類和物件

類是模子,是不存在的,用來確定將會擁有的特徵(屬性)和行為(方法)。 類的特點:      類是物件的型別;      是具有相同屬性和方法的一組物件的組合; 物件的屬性: 物件擁有的各種屬性,每個物件的每個屬性都擁有特定值。 物件的方法: 物件執行的操作。 類是抽象的概念,如手機 物件是具體實體,如小米

1.2 定義類

類的重要性:所有Java程式都以類class為組織單元 定義一個類的步驟:
  1. 定義類名
  2. 編寫類的屬性
  3. 編寫類的方法

1.3如何使用Java中的物件

  1. 建立物件     : 類名 物件名  =  new 類名()
  2. 使用物件     :引用物件的屬性和方法: 物件名.屬性    物件名.方法

1.4 成員變數和區域性變數

作用域 初始值 其他
成員變數   類中定義,用來描述類有什麼 在整個類中都是可見的   Java會給成員變數一個初始值    不同方法中可以有同名的區域性變數
區域性變數 類的方法中定義,在方法中臨時儲存資料    僅限於定義它的方法      Java不會給成員變數一個初始值    區域性變數的優先順序比同名的成員變數高   

1.5 Java 中的構造方法

  1. 使用 new + 構造方法, 建立一個新的物件
  2. 構造的方法是定義在Java類中的一個用來初始化物件的方法
構造方法與類同名且沒有返回值 當沒有指定構造方法時,系統會自動新增無參的構造方法 當有指定構造方法時,即使只定義了有參的,系統也不會自動新增無參的構造方法 構造方法的過載: 方法名相同,但是引數不同的多個方法,呼叫時會根據不同的引數選擇相應的方法 構造方法不但可以給物件的屬性賦值,還可以保證給物件的屬性賦一個合理的值。

1.6 Java中static使用之靜態變數

Java中被static 修飾的成員稱為靜態成員或 類成員,它屬於整個類所有,而不是某個物件所有,即被所有的物件所共享。 靜態成員可以使用類名直接訪問,也可以使用物件進行訪問。推薦用類名訪問 使用static 可以修飾變數,方法和程式碼塊。 注意:靜態成員屬於整個類,當系統第一次使用該類時,就會為其分配記憶體空間,直到該類被解除安裝才會進行資源回收!

1.7 Java 中static 使用之靜態方法

與靜態變數一樣,我們也可以使用static修飾方法,稱為靜態方法或類方法。 之前我們一直寫的main函式方法就是靜態方法。
public static void main ( String[] args) {  }
注意:
  1. 靜態方法中可以直接呼叫同類中的靜態成員,但不能直接呼叫非靜態成員,可以在靜態方法中建立類的物件,通過物件來訪問非靜態變數;
  2. 在普通成員方法中,則可以直接訪問同類的靜態變數和非靜態變數;
  3. 靜態方法中不能直接呼叫非靜態方法,需要通過建立物件來訪問非靜態方法。

1.8 Java 中static 使用之靜態初始化塊

Java中可以通過初始化塊進行資料賦值:
public class Hello {
      String name;  //定義一個成員變數
      // 通過初始化塊為成員變數賦值
     {
           name = "愛慕課";
      }
}
        

在類的宣告中,可以包含多個初始化塊。 當建立類的例項時,就會依次執行這些程式碼塊。 如果使用 static 修飾初始化塊,就稱為靜態初始化快。 注意: 靜態初始化塊只在類載入時執行,且只會執行一次,同時靜態初始化塊只能給靜態變數賦值,不能初始化普通的成員變數
執行結果:
通過輸出結果,我們可以看到,程式執行時靜態初始化塊最先被執行,然後執行普通初始化塊,最後才執行構造方法。由於靜態初始化塊只在類載入時執行一次,所以當再次建立物件 hello2 時並未執行靜態初始化塊。

面向物件的三大特性: 封裝,繼承,多型

封裝

2.1 什麼是Java中的封裝

概念: 將類的某些資訊隱藏在類內部,不允許外部程式直接訪問,而是通過該類提供的方法來實現對隱藏資訊的操作和訪問。 好處:
  1. 只能通過規定的方法訪問資料
  2. 隱藏類的例項細節,方便修改和實現
封裝的實現步驟
  1. 修改屬性的可見性,設為private
  2. 建立getter/setter 方法,用於屬性的讀寫
  3. 在 getter/setter方法中加入屬性控制語句,對屬性值的合法性進行判斷

2.2 使用包 管理Java中的類

包的作用: 管理Java檔案,解決同名檔案衝突 定義包: package 包名 注意:必須放在Java源程式中的第一行,包名之間可以用點號”.“隔開 系統中的包: Java.(功能).(類) java.lang.(類)    包含Java語言基礎的類 java.util.(類)      包含java語言中各種工具類 java.io.(類)       包含輸入輸出相關功能的類 包的使用: 使用 import 關鍵字在某個檔案中使用其他資料夾中得類。 java中,包的命名規範是全小寫字母。 .* 可以把某個包下的所有檔案載入進來。

2.3 Java 中訪問修飾符

訪問修飾符: 可以修飾屬性和方法的訪問範圍。
訪問修飾符 本類 同包 子類 其他
private
預設
protected
public

2.4 Java 中的this關鍵字

this關鍵字代表當前的物件 this.屬性 this.方法 封裝物件的屬性時,經常會使用this關鍵字

2.5 Java中的內部類 Inner Class

內部類就是定義在另一個類裡面的類。 同理,包含內部類的類被稱為外部類。 內部類的作用:
  1. 內部類提供了更好的封裝,可以把內部的類隱藏在外部類之內,不允許同一個包中的其他類訪問該類。
  2. 內部類的方法可以直接訪問外部類的所有資料,包括私有的資料;
  3. 內部類所實現的功能,使用外部類同樣可以實現,只是有時使用內部累更方便
內部類有以下幾種:
  • 成員內部類
  • 靜態內部類
  • 方法內部類
  • 匿名內部類
/外部類HelloWorld
public class HelloWorld {
    
    // 內部類Inner,類Inner在類HelloWorld的內部
    public class Inner {
        
		// 內部類的方法
		public void show() {
			System.out.println("welcome to imooc!");
		}
	}
    
	public static void main(String[] args) {
        
        // 建立外部類物件
		HelloWorld hello = new HelloWorld();
        // 建立內部類物件
		Inner i = hello.new Inner();
        // 呼叫內部類物件的方法
		i.show();
	}
}


繼承

3.1 Java中的繼承

概念: 繼承是類與類的一種” is a“ 的關係 父類,基類  -------   子類,派生類 注意:Java中的繼承是單繼承的,只有一個父類。 繼承的好處: 子類擁有父類的所有屬性和方法,但 private修飾的除外; 實現程式碼複用 語法規則: class 子類 extends 父類 {  }

3.2 Java中的方法重寫:

什麼事方法的重寫: 如果子類對繼承父類的方法不滿意,是可以重寫父類繼承方法的,當呼叫方法時會優先呼叫子類的方法。 語法規則: 返回型別,方法名,引數 都要和父類繼承方法相同才可以。

3.3 Java中的繼承初始化順序

  1. 初始化父類,在初始化子類
  2. 同一個類中,先執行初始化物件中屬性,再執行構造方法中的初始化
也就是說: 父類屬性初始化 ==> 父類構造方法 ==> 子類物件屬性初始化 ==> 子類物件構造方法

3.4 Java中的fanal 關鍵字

final關鍵字作標識有”最終的“含義,也就是說不可修改,不可變化的。
  • final 修飾類,則該類不允許被繼承
  • final 修飾方法,則該方法不允許被覆蓋(重寫)
  • final 修飾屬性,則該類的屬性不會進行隱性的初始化(類的初始化必須有值),或是在構造方法中賦值,必須二者選其一。 也就是說要麼在屬性的宣告時賦初始值,要麼在建構函式裡面賦值。
  • final 修飾變數, 則該變數的值只能賦一次值,在宣告的時候初始化賦值,即變為常量。

3.5 Java中的super 關鍵字

super 關鍵字在物件的內部使用,可以代表父類的物件。 子類的構造過程中,必須呼叫父類的構造方法。 程式隱式的在子類的建構函式裡的第一行新增父類的構造方法,如super();   如果子類構造方法中既沒有顯式的呼叫父類的構造方法,而父類又沒有無參的的構造方法,則編譯出錯。

3.6 Java中的Object類

Object 類是所有類的父類,也就是Java世界中的老總。 如果一個類沒有使用 extends 關鍵字明確標識繼承另外一個類,那麼這個類預設基本Object類。 Object類中的方法,適合所有的子類。 Object類 常用方法:
  • toString()  方法,返回物件的雜湊code碼(物件地址字串);雜湊碼是用來唯一區分物件的字串。可以通過重寫toString() 方法表示出物件的屬性
  • equals() 方法 ,比較的是物件引用的是否指向同一塊記憶體地址,可以通過重寫equals() 方法使其比較兩個物件的值是否一致。 
new 類 : 得到的是 類的物件 物件呼叫 getClass() 方法 : 得到的是 類物件

多型

4.1 Java中的多型

多型: 物件的多種形態 注意: 繼承是多型實現的基礎。 1 引用多型     父類的引用可以指向本類的物件     父類的引用可以指向子類的物件 (注意:子類的引用不能指向父類的物件) 2 方法多型    建立本類的物件時,呼叫的方法是本類的方法    建立子類的物件時,呼叫的方法為子類重寫的方法或繼承的方法 如果子類具有獨有的方法,不是從父類繼承來的,那就不能通過父類的引用來呼叫子類獨有的方法。

4.2 多型中的引用型別轉型

1 向上型別轉換(隱式/自動型別轉換),是小型別到大型別的轉換: 無風險 2 向下型別轉換(強制型別轉換),是大型別到小型別的轉換 : 有風險,可能溢位  可以運用運算子 instanceof 來解決引用物件的型別,避免型別轉換的安全性問題。

4.3 Java中的抽象類

 語法定義: 抽象類前使用abstract 關鍵字修飾,則該類為抽象類。 應用場景: 
  • 某些情況下,某個父類只是知道其子類應該包含怎樣的方法,但是無法準確知道這些子類如何實現這些方法;(約束子類必須有哪些方法,但不約束其具體實現)
  • 從多個具有相同特徵的類中抽象出一個抽象類,以這個抽象類作為子類的模板,從而避免子類設計的隨意性。
作用:  限制規定子類必須實現某些方法,但不關注實現細節。 使用規則:
  1. abstract 定義抽象類
  2. abstract 定義抽象方法,只有宣告,不需要實現
  3. 包含抽象方法的類必須是抽象類
  4. 抽象類中可以包含普通的方法,也可以沒有抽象方法
  5. 抽象類不能直接建立,可以定義引用變數
抽象方法 沒有方法體則以分號結束。

4.4 Java中的介面

概念: 介面可以理解為一種特殊的類,由全域性變數和公共的抽象方法所組成。 如果說類是一種具體實現體,而介面定義了某一批類所需要遵循的規範,介面不需要關心這些類的內部資料,也不關心這些類裡方法的實現細節,它只規定這些類裡必須提供的某些方法。 和定義類不同,定義介面不再使用 class 關鍵字,而是使用interface 關鍵字 基本語法:  [修飾符] interface 介面名 [extends 父介面1, 父介面2 ... ]  { 零到多個常量定義 。。。 零到多個抽象方法定義。。。 } 注意: interface 前一定有 abstract,自己沒顯式地新增時,系統也會自動新增 可以有多個父介面, 而Java類最多隻有一個父類。 介面定義
  • 常量: 介面中的屬性是常量,即使定義時不新增 public static final 修飾符,系統也會自動加上;
  •  方法: 介面中的方法只能是抽象方法,總是使用;即使定義時沒有新增 public abstract修飾符, 系統也會自動加上;

介面中方法不能有方法體,同時方法的訪問修飾符不能是 private 和 protected

使用介面: 一個類可以實現一個或多個介面,實現介面使用 implements 關鍵字。 Java中的一個類只能繼承一個父類,是不夠靈活的,通過實現多個介面可以做補充。 繼承父類實現介面的語法: [修飾符] class 類名 extends 父類 implements 介面1, 介面2 ..  { 類體部分 ; // 如果繼承了抽象類,需要實現繼承的抽象方法; // 也要實現介面中的抽象方法 //如果要繼承父類,繼承父類必須在實現介面之前 }  通過介面可以描述兩個不同的型別之間相同的特徵。 使用介面: 介面類物件引用指向實現類的物件:  


另外一種使用介面的方式: 介面在使用的過程當中,還經常與匿名內部類配合使用 匿名內部類就是沒有名字的內部類,多用於關注實現而不關注類的名稱

4.7 UML 簡介

Unified Modeing Language 統一建模語言/ 標準建模語言

是一個支援模型化和軟體系統開發的圖形化語言