慕課網 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 統一建模語言/ 標準建模語言

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
















發佈了34 篇原創文章 · 獲贊 25 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章