第三週 (2.17-2.23)
Day11
二維數組的補充
-
二維數組的創建語法
-
先聲明,再分配空間
- 數據類型[][] 數組名;數組名 =new 數據類型[高維長度][低維長度] ;
-
先聲明並分配空間
- 數據類型[][] 數組名 = new 數據類型[高維長度][低維長度];
-
聲明並賦值(繁)
- 數據類型[][] 數組名 = new 數據類型[高維長度][] ;//不規則數組,自行new 低維數組
-
聲明並賦值(簡)
- 數據類型[] 數組名 = {{v1,v2,v3},{v4,v5},{v6,v7,v8,v9}};//顯示初始化
-
對象
-
概念:一切客觀存在的事物都是對象,萬物皆對象
- 特徵:稱爲屬性,一般爲名詞,代表對象有什麼
- 行爲:稱爲方法,一般爲動詞,代表對象能做什麼
-
一切客觀存在的事物都是對象,萬物皆對象
-
任何對象,一定具有自己的特徵和行爲
-
程序中,必須具有和現實中相同的對象,用以模擬現實世界
- 使用程序中的對象代表現實中的對象,並執行操作,進而解決現實問題
-
對象的創建 :
public class TestCreateObject{
public static void main(String[] args){Dog myDog = new Dog();
myDog.breed =“莎魔”;
myDog.age=2;
myDog.sex=“公”;
myDog.fuColor=“白色”;
System.out.println(myDog.breed+"\t"+myDog.age+"\t"+myDog.sex+"\t"+myDog.fuColor);myDog.eat();
myDog.sleep();}
}
-
對象的創建過程
- 內存中開闢對象空間
- 爲各個屬性賦予初始值
- 執行構造方法中的代碼
- 將對象的地址賦值給變量
-
類:
-
概念:定義了對象應具有的特徵和行爲,類是對象的模板
-
類的定義:
例子
public class Dog{
String breed ;//品牌
int age ;//年齡
String sex;//性別
String furColor;//毛色public void eat(){
System.outy.println(“Eating …”);
}
public void sleep(){System.out.println(“Sleeping…”);
}}
-
屬性的定義
- 屬性:通過變量表示,又稱實例變量
- 語法: 數據類型 屬性名;
- 位置:類的內部,方法的外部
-
方法的定義
- 方法:通過函數表示,又稱實例方法
- 語法: public 返回值類型 方法名(形參){//方法的主體}
- 不再書寫static
-
類和對象的聯繫
- 類:定義了對象應具有的 特徵和行爲,類是對象的模板
- 對象:擁有多個特徵和行爲的實體,對象是類的實例
實例變量和局部變量的區別
-
局部變量
- 定義位置:方法或方法內的結構當中
- 默認值:無默認值
- 使用範圍:從定義到包含其結構結束
- 命名衝突:不允許重名
-
成員變量
- 類的內部,方法的外部
- 默認值:字面值(與數組相同)
- 使用範圍:本類有效
- 命名衝突:可與局部變量重名,局部變量優先
實例方法:對象的實例方法包含兩部分:方法的聲明和方法的實現
-
方法的聲明:代表對象能做什麼
- 組成: 修飾符 返回值類型 方法名(形參列表)
-
方法的實現:代表對象怎麼做:即如何實現對象對應的功能
- 組成 : []
方法的重載:對象的 同一種行爲可能存在多種實現的過程
- 重載:一個類中定義多個相同的名稱的方法
- 要求:方法名稱相同 參數列表不同(類型、個數、順序) 與返回修飾符,返回值類型無關
- 調用帶有重載方法時,需要根據傳入的實參方法去找到與之匹配的方法
- 好處:屏蔽使用差異,靈活、方便
代碼調錯
- 兩個方法的方法名稱和參數列表都相同,只是參數名稱不一樣,編譯報錯
- 注意:只是參數名稱不同,並不能構成方法的重載
構造方法:類的特殊方法,主要用於創建對象
-
特點
- 名稱和類名完全相同
- 沒有返回值類型
- 創建對象時。能觸發構造方法的調用,不可通過句點手動調用
-
注意:如果沒有在類中顯示定義構造方法,則編譯器默認提供無參構造方法
構造方法的重載:構造方法也可以重載,遵循重載規則
構造方法爲屬性賦值:
- 創建對象的同時,將值傳入構造方法
Day12
關鍵字
-
this
-
類是模板,可服務於此類的所有對象 this 是類中的默認引用,代表當前實例;當類服務於某個對象時,this 則指向這個對象
-
用法一: this 第一種用法:調用實例屬性、實例方法。如 this.name 、this.sayHi()
-
當實例變量和局部變量重名時,優先訪問局部變量;此時,如需訪問實例變量,需要增加this.前綴 不存在重名時,則可省略this
-
用法二:this 第二種用法 :調用本類中的其他的構造方法。如 this() this (實參)
- 在構造方法中,調用本類的其他構造方法,即可複用構造方法中的邏輯代碼
- 注意:this() :調用無參構造 this(實參):調用有參構造法:必須在構造方法的首行
- 有參構造將接收到的實參直接傳遞給 有參構造進行賦值
-
-
super關鍵字
-
在子類中,可直接訪問從父類繼承到的屬性和方法,但如果父類的屬性或方法存在重名(屬性遮蔽、方法覆蓋)時,需要加以區分,纔可專項訪問
-
用法:使用 super. 的形式訪問父類的方法 進而完成在子類中的複用 ,再疊加額外的功能代碼,組成新的功能
-
super的訪問屬性 :父子類的同名屬性不存在覆蓋關係,兩個空間同時存在(子類遮蔽父類屬性)需使用不同前綴進行訪問
-
super調用父類無參構造
- super()表示調用父類無參構造方法。如果沒有顯示書寫。 隱式存在於子類構造方法的首行
-
注意:如果子類構造方法中,沒有顯示定義super() 或super(實參) 則默認提供super() 同一個子類構造方法中,super() this () 不可同時存在
-
-
instanceof 關鍵字
- 向下轉型前,應判斷引用中的對象真實類型,保證類型轉換的正確性
- 語法:引用 instanceof ;類型 // 返回boolean 類型的結果
三 大特性
-
封裝
- 在對象的外部,爲對象的屬性賦值,可能存在非法數據的錄入
- 概念:儘可能隱藏對象的內部實現細節,控制對象的修改及訪問的權限
- 訪問修飾符:private (可將屬性修飾爲私有,僅本類可見)
-
公共訪問方法
-
提供公共訪問方法,以保證數據的正常錄入
-
命名規範
命名規範:
賦值 setXXX()//使用方法參數實現賦值
取值: getXXX() // 使用方法返回值實現取值
-
-
-
繼承
-
類與類之間特性和行爲的一種贈與或獲得
-
父類的抽象:在一組相同或類似的類中,抽取出共性的特徵和行爲,定義在父類中,實現重用
-
語法: class 子類 extends 父類{} //定義子類時,顯示繼承父類
-
應用:產生繼承關之後,子類可以使用父類中的屬性和方法,也可以定義子類特有的屬性和方法
-
繼承中的創建:
-
在具有繼續關係的對象的創建中,構建子類對象會先構建父類對象
-
由父類的共性內容,疊加子類的獨有內容吧,組合成完整的子類對象
-
創建過程
- 構建子類對象時,先構建父類對象
- 1、分配空間 2、構建父類對象 3、初始化屬性 4、執行構造方法代碼
-
-
好處:既提高代碼的複用性,又提高代碼的可擴展性
-
注意:java爲單繼承,一個類只能有一個直接父類,但可以有多級繼承,屬性和方法逐級疊加
-
不可繼承
- 構造方法:類中的構造方法,只負責創建本類對象,不可繼承
- private修飾的屬性和方法:訪問修飾符的一種,僅本類可見
- 父子類不在同一個package 中時,default 修飾的屬性和方法:訪問修飾符的一種,僅同包可見
-
-
訪問修飾符
-
private
- 本類可訪問。同包。非同包子類,其他都不可以訪問
-
default
- 本類,同包可以訪問。非同包子類,其他不可以訪問
-
protected
- 本類,同包,非同包子類可以訪問。其他不可以訪問
-
public
- 本類、同包、非同包子類、其他都可以訪問
-
-
方法的覆蓋
-
方法覆蓋原則
- 方法名稱、參數列表、返回值類型必須與父類相同
- 訪問修飾符可與父類相同或是比父類更寬泛
-
方法覆蓋的執行
- 子類覆蓋父類方法後,調用時優先執行子類覆蓋後的方法
-
-
多態
例子:
父類引用
(引用類型) Animal a = new Dog(); 子類對象(對象類型)-
概念:
- 父類指向子類對象,從而產生多種形態
-
二者具有直接或間接的繼承關係時,父類引用可指向子類對象,即形成多態
-
父類引用僅可調用父類所聲明的屬性和方法,不可調用子類獨有的屬性和方法
-
多態的應用
- 方法的重載可以解決接收不同對象參數的問題,但其缺點也比較明顯
- 場景一:使用父類作爲方法形參實現多態,使方法參數的類型更爲寬泛
- 場景二:使用父類作爲方法返回值實現多態,使方法可以返回不同子類對象
-
向上轉型(裝箱
- 父類引用中保存真實子類對象,稱爲向上轉型(即多態核心概念)
- 注意:僅可調用 Animal 中所聲明的屬性和方法
-
向下轉型(拆箱)
- 將父類引用中的真實子類對象強轉回子類本身類型,稱爲向下轉型
- 注意:只有轉換回子類真實類型,纔可調用子類獨有的屬性和方法
-
類型轉換異常
- 向下轉型時,如果父類引用中的子類對象類型和目標類型不匹配,則會發生類型轉換異常
-
Day13
三個修飾符
-
抽象類 應用 : abstract 修飾類,此類不能new 對象
-
被abstract 修飾的類,稱爲抽象類。抽象類意爲不完整的類、不夠具體的類,抽象類對象無法獨立存在,即不能new 對象
-
作用:
- 可被子類繼承,提供共性屬性和方法
- 可聲明爲引用,強制使用多態
-
經驗:抽象父類,可作爲子類的組成部分,依附與子類對象的存在,由父類共性+子類獨有組成完整的子類對象
-
抽象方法:被abstract修改的方法,稱爲抽象方法,只有方法聲明,沒有方法實現({} 的部分)意爲不完整的方法,必須包含在抽象類中
-
產生繼承關係後,子類必須覆蓋父類中所有的抽象方法,否則子類還是抽象類
-
總結
abstract 修飾類,不能new對象 ,但可以聲明引用
abstract 修飾方法:只有方法聲明,沒有方法實現。(需包含在抽象類中)
抽象類中不一定有抽象方法,但有抽象方法的類一定是抽象類
子類繼承抽象類後,必須覆蓋父類所有的抽象方法,否則子類還是抽象類
-
-
static
-
實例屬性:實例屬性是每個對象各自持有的獨立空間(多份),對象單方面修改,不會影響其他對象
-
靜態屬性:靜態屬性是整個類共同持有的共享空間(一份),任何對象修改,都會影響其他對象
-
靜態
- 靜態可以修飾屬性和方法
- 稱爲靜態屬性(類屬性)、靜態方法(類方法)
- 靜態成員是全類所有對象共享的成員
- 在全類中只有一份,不因創建多個對象而產生多份
- 不必創建對象,可直接通過類名訪問
-
靜態方法
-
已知靜態方法
- Arrays.copyOf()
- Arrays.sort()
- Math.random()
- Math.sqrt();
- 均使用類名直接調用
-
-
靜態的特點
- 靜態方法允許直接訪問靜態成員
- 靜態方法不能直接訪問非靜態成員
- 靜態方法中不允許使用this 或是 super關鍵字
- 靜態方法可以繼續,不能重寫,沒有多態
-
靜態代碼塊
public class TestStaticBlock(){
public static void main(Stirng[] args){MyClass.method();
}
]
class MyClass{static String sField ="靜態屬性“;
static {
System.out.println(sField);
System.out.println("靜態代碼塊“);]
public static void method(){
}
}
- 類加載時,觸發靜態代碼塊的執行(僅一次)。執行地位:靜態屬性初始化之後。 作用: 可爲靜態屬性賦值,或必要的初始化行爲
-
總結
-
-
final
-
概念:最後的,不可更改的
-
final可修飾的內容:
-
類(最終類)
- final修飾類,此類不能被繼承
- 注: String 、Math、System均爲final修飾的類,不能被繼承
-
方法(最終方法)
- final修飾方法:此方法不能被覆蓋
- 意爲最終方法,不支持子類以覆蓋的形式修改
-
變量(最終變量)
- final修飾變量:此變量值不能被改變(常量)
- 實例常量不再提供默認值,必須手動賦值初始值。賦值時機:顯示初始化、動態代碼塊、構造方法
- 注意:如果在構造方法中爲實例常量賦值。必須保證所有的構造方法都能對其正確賦值
-
靜態常量
- 靜態常量不再提供默認值,必須手動賦予初始值。賦值時機:顯示初始化、靜態代碼塊
-
對象常量
- final 修飾基本類型:值不可變
- final 修飾引用類型:地址不可變
-
總結
-
-