【java基礎】java基礎-note

java基礎-note

1.面向對象

子類的構造方法調用父類的構造方法

1.子類的構造方法執行體第一行代碼使用了super顯示調用父類構造方法

系統將根據super調用裏傳入的的實參列表,調用父類的構造方法

2.子類的構造方法執行體的第一行代碼使用this顯示調用本類中重載的方法

系統將根據this調用傳入的實參列表,調用本類中另一個構造方法 執行本類中

另一個構造方法 既會調用父類的構造方法

3.子類構造方法執體 既沒有this 也沒有super 系統會調用super()

父類的無參構造方法

構造方法和普通方法

構造方法只有在當JVM在創建類的實例時,纔會執行構造方法

構造方法:構造對象時調用的函數,作用是:可以給對象進行初始化

創建對象都必須通過構造方法初始化

一般函數和構造函數的區別

構造函數在對象創建時,就會調用與與之對應的構造函數,對對象進行初始化

一般函數 對象創建後,需要函數功能纔可以調用

構造函數 創建對象時,只會調用一次。

一般函數 對象創建後,可以調用多次

this 代表一個本類對象的引用

super 代表一個父類的空間

Object - toString() 類名@hash值

    - equals()判斷兩個對象是否指向同一塊區域  instanceof 判斷是否值指定類型的對象

    -  hashCode() 返回給該對象的哈希值

    -  getClass()  

多態的體現:父類或接口的引用 指向其子類的對象

成員變量和靜態變量的區別

1.兩個變量的聲明週期不同

成員變量隨着對象的創建而存在 隨着對象的被回收而消失

靜態變量隨着類的加載而存在,隨着類的消失而消失

2.調用方式不同

成員變量只能被對象調用

靜態變量可以被類名調用,還可以被對象調用

3.別名不同

成員變量也叫實例變量

靜態變量也叫類變量

4.數據存儲位置不同

成員變量存儲在堆內存的對象中,也叫對象的特有數據

靜態變量存錯在方法區中 也叫對象的共有數據

static的特點

1.static是一個修飾符,用於修飾成員

2.static 修飾的成員被所有對象所共享

3.static 優先於對象的存在,因爲static的成員,隨着類的加載而存在

4.static 修飾的成員多了一種調用方式,就是可以直接被類名所調用

5.static 修飾的是共有數據 對象中的存儲的是特有數據

使用靜態的注意事項

1.靜態方法只能訪問靜態成員 (非靜態方法可以訪問靜態成員,也可以訪問靜態)

2.靜態方法中不可以用this或super關鍵字

3.主方法是靜態的

多態時 成員的特點

1.成員變量

編譯時,參考引用類型的變量所屬的類中是否有相同的成員變量

      有 編譯通過,否則 編譯失敗

運行時,參考引用類型的變量所屬的類中是否有相同的成員變量

     有 編譯通過  否則 編譯失敗

     簡單的說,編譯和運行看左邊

2.成員方法

編譯時,參考引用類型的變量所屬的類中是否有相同的函數

     有  編譯通過  否則 編譯失敗

運行時,參考對象所屬的類中是否有調用的函數

      有 成功  否則 失敗

      簡單說 編譯看左邊  運行看右邊

3.靜態方法

 簡單說 編譯和運行都看左邊

 其實 對於靜態方法 是不需要對象的  直接類名調用即可

靜態代碼塊 構造代碼塊 構造函數

主函數特殊之處

1.格式是固定的

2.被jvm所識別和調用

public :權限最大

static 不需要對象的,直接用主函數所屬類名調用

void 主函數沒有具體返回值類型

main 函數名 不是關鍵字 只是一個jvm識別固定的名字

String () args 這是主函數的參數列表 是一個數組類型的參數

而且元素類型是字符串類型的

繼承和多態

1.查看該體系中的頂層類,瞭解該體系的基本功能 看頂層,用底層

2.創建體系中的最子類對象,完成功能的使用

什麼時候使用繼承

類與類之間存在所屬關係的時候,就定義繼承

1,本類的成員和具局部變量同名時,用this區分

2,當子父類中的成員變量同名時 用super區分父類

this:代表一個本類對象的引用

super:代表一個父類空間

當子父類中出現成員函數一模一樣的情況,運行子類的函數

這種現象稱爲覆蓋操作

方法的重載

定義:在一個類中可以定義有相同的方法名但參數列表不同(參數類型,參數個數,參數順序) 方法的

返回值類型可以不同

方法的重寫

定義:子類和父類具有相同的名稱 返回值類型和形參列表

三同一小一大

同:相同的名詞 返回值類型 形參列表

小:子類拋出的異常必須小於或者等於父類拋出的異常

大:子類的方法權限必須是大於父類的權限

靜態時多態的表現形式是方法重載 overloading

動態時多態的表現形式是方法重寫 overriding

子父類中的構造函數的特點

子類的實例化過程

在子類構造對象時,發現 訪問子類構造函數時,父類也運行了

原因是:在子類的構造函數第一行有一個默認的隱士語句 super()

爲什麼子類實例化的時候要訪問父類中的構造函數呢

因爲子類繼承了父類,獲取到了父類中內容(屬性)

所以在使用父類內容之前,要先看父類是如何對自己內容進行初始化的

如果父類中沒有定義空參數函數,那麼子類的構造函數 必須用super明確要調用父類中的哪一個函數

同時 子類構造函數中如果用this調用了本類中構造函數時,

那麼super就沒有了,因爲super和this都只能定義在第一行,只能有一個

但是可以保證的是子類中,肯定會有其他的構造函數去訪問父類的構造函數

繼承的優點

1.提高了代碼的複用性

2.類與類之間的關係

3.爲第三方的多態提供了基礎

實例變量

1.聲明的時候賦值

2.在構造方法的時候初始化

3.普通代碼塊

類變量

1.聲明的時候賦值

2.靜態初始化塊

單例設計模式

如何保證對象的唯一性

1.不允許其他程序用new 創建類 對象

2.在該類創建一個本類實例

3.對外提供一個方法讓其程序可以獲取對象

步驟 1私有化該類構造函數

2.通過new在本類中創建一個本類的對象

抽象的特點

1.方法只有聲明沒有實現,該方法就是抽象方法

需要被abstract修飾,抽象方法必須定義在抽象類中,該類也必須被abstract修飾

2.抽象類不能實例化 爲什麼

因爲調用抽象方法沒有意義

3.抽象類必須有其子類覆蓋了所有的抽象方法 該子類纔可以實例化

否則 該類必須定義爲抽象類

1.抽象方法中有構造函數嗎

有 用於給子類進行初始化

2.抽象方法可以不定義抽象方法嗎

可以 但是很少見 目的就是不讓該類創建對象

AWT的適配器 對象就是這個類

3.抽象類關鍵字不可以和哪些關鍵字共存

private 不行 子類會覆蓋父類

static 不行 會隨着類的加載而加載

final 表示只能有一個類

抽象類和普通類的區別

不同1.一般類有足夠的信息描述事物

     抽象類描述事物的信息不足

   2.一般類中不能定義抽象方法,只能定義非抽象方法

     抽象類中可以定義抽象方法和非抽象方法

   3.一般類可以實例化

     抽象類不能被實例化

–接口

當一個抽閒類中的方法都是抽象方法的時候,這時候可以將該抽象類用另一種形式定義和表示 這就是接口

對於接口當中常見的成員 而且這些成員都有固定的修飾符

全局變量 public static final

抽象方法 public abstract

接口中的成員都是公共權限

接口是對外暴露的規則

接口是程序的功能拓展

接口的出現降低的了耦合性

在java中不直接支持多繼承

改良之後 稱爲多實現

一個類可以實現多個接口

接口與接口之間是繼承關係 而且接口可以多繼承   

抽閒類和接口的異同點

相同點和不同點

相同點----

都是不斷向上抽取而來的 不能實例化

不同點----

1.抽象類需要被繼承,而且只能單繼承

 接口需要被實現,而且可以多實現

2.抽象類中可以定義抽象方法和非抽象方法

子類繼承後,可以直接使用非抽象方法

接口只能定義抽象方法,必須有子類去實現

3.抽象類的繼承是is a 關係 在定義該體系的基本內容

 接口的實現是like a 關係  在定義體系的額外功能 

2.集合類

集合總結

集合的由來

對象用於封裝特有數據,對象多了需要存儲,如果對象的個數不確定,就可以使用集合容器存儲對象

集合的特點

1.用於存儲對象的容器

2.集合的長度是可變的

3.集合不可以存儲基本數據類型

集合框架

集合容器因爲內部的數據結構不同,有多種具體容器 不斷的向上抽取就形成了集合框架

collection

set存放的是無序的 不可重複的元素

list存放的是有序的 可以重複的元素

迭代器 Iterator

取出元素的方式 迭代器 該對象必須依賴具體的容器 因爲每個容器的數據結構都不同

所以該迭代器對象是在容器內部實現的



在迭代器過程中,不要使用集合操作元素,容易出現異常,可以使用Iterator接口的子接口

ListIterator來完成 在迭代器中對元素進行更多操作 集合和迭代器同時操作有問題

注意,只有list的集合具備該迭代器迭代功能。



Iterator 接口就是對所有的Collection容器進行元素取出的公共接口

set 無序的 不可重複元素

HashSet 特點 不保證元素的加入順序 根據元素的哈希碼進行存放

linkedHaseSet 特點 根據元素的哈希值進行存放 用鏈表記錄元素的添加順序

TreeSet 特點 自然排序

List 有序的 可重複的元素

ArrayList 特點 內部是數組結構  查詢速度快

LinkedList 特點  內部是鏈表結構 不同步  刪除和添加速度快 可以對首部和尾部元素操作

Vector 特點 線程同步其他和ArrayList一樣

Stack 特點 先進後出 

   				empty()  查看是否爲空 

   				peek()  查看棧頂對象 不刪除 

   				pop()  移除棧頂對象 並顯示該對象

   				push()  把項壓入棧頂

   				search()   返回對象在棧中的位置

Map接口 (鍵值對)

HashMap  linkedHashMap  TreeMap 

java集合和數組的區別

在創建java數組時,必須明確指定的數組的長度 數組一旦創建 其長度就不能改變 爲了是程序能方便的存儲

檢索 和操作數目不固定的一組數據

棧 先進後出

隊列 先進先出

3.內部類

內部類訪問特點

1.內部類可以直接訪問外部類中的成員

2.外部類要訪問內部類,必須建立內部類的對象

內部類的使用

分析事物時,發現該事物描述中還有事物,而且這個事物還是訪問被描述事物的內容,這時,就是還有的事物

定義成內部類來描述。

爲什麼內部類能直接訪問外部類中成員

那是因爲內部類持有了外部類的引用

格式:外部類.this

成員內部類

聲明格式: 外部類.內部類 名字 = new 外部類().new 內部類()

如果內部類中定義了靜態成員,那麼此類就必須爲靜態類

靜態內部類

由於靜態內部類比較特殊,它的對象創建並不需要外部類對象

匿名內部類

匿名內部類就是內部類的簡寫格式.

必須有前提:內部類必須繼承或者實現一個接口或者外部類

在object中equals和==比較的都是兩個引用是否指向同一個對象,既比較的是地址值是否相等

在子類中重寫了object中的equals和==

子類中的equals比較的是兩個對象的內容是否相等

==比較的是兩個引用是否指向同一個對象

4.異常

異常和錯誤

語法錯誤石油編譯器發現的

異常是執行過程中發生的錯誤

異常:就是在運行時期發生的不正常情況。

異常就是java通過面對對象的思想,將問題封裝成對象

Throwable是異常和錯誤的超類

該體系的特點是:子類的後綴名都是其父類名做後綴,閱讀性比較強

常見的異常

Exception 異常的根類

RuntimeException – 異常的基類

ArithmeticException 算術異常

IIIegalArgumentException 非法的參數

ArrayIndexOutofBoundsException 數組越界

NullPointerException 空指針

ClassCastException 類型轉換異常

ClassNotFoundException 不能加載所需的類

NumberFormatException 數字轉換異常

IOException io異常

FileNotFoundExceotion 文件找不到異常

EOFexception 文件結束

InterruptedException 線程中斷

異常處理的原則

1.函數內容如果拋出需要被檢測異常,那麼函數上必須要聲明

否則,必須在函數內用try catch 捕捉,否則編譯失敗

2.如果函數調用到了聲明異常的函數,要麼try catch 要麼throws 否則編譯失敗

3.什麼時候使用catch 什麼時候使用throws

功能內容 可以解決的用catch

解決不了的用throws告訴調用者,有調用者來解決

4.一個功能如果拋出多個異常,那麼調用時,必須有對應的catch進行針對性處理

內部有幾個需要檢測的異常 就拋出幾個異常 拋出幾個 就有幾個catch塊

異常的注意事項

1.子類在覆蓋父類的方法時,父類的方法如果拋出了異常,子類的方法只能拋出父類的異常或該異常的子類

2.如果父類拋出多個異常,那麼子類只能拋出父類異常的子集

簡單說:子類覆蓋父類只能拋出父類的異常或者子類的子集

注意:如果父類的方法沒有拋出異常,那麼子類覆蓋是絕對不能拋出異常

只能 try catch

如果讓一個類稱爲異常類,那麼必須繼承異常體系,因爲只有稱爲異常體系的子類 纔有資格具備可執行性

才能被兩個關鍵字所操作。

throws和throw的區別

1.throws 使用在函數上

throw 使用在函數內

2.throws拋出的是異常類,可以拋出多個,之間用逗號隔開

throw拋出的是異常對象

finally 關閉數據庫的時候,可以將關閉數據庫的方法發到finally語句塊中

try catch finally 組合

1.try catch finally

2.try catch (多個catch)

不使用finally

3.try finally

沒有處理,必須聲明 異常無法直接catch處理,但是資源必須關閉

不管什麼情況finally塊總會執行到的

除了虛擬機關閉之後,finally不會執行到

受檢異常()

1.編譯時被檢測異常–受檢異常—checked

只要是Exception和其子類,除了RuntimeException 這種問題一旦出現,希望在編譯時就可以

檢測,讓這種問題有對應的處理方式

2編譯是不檢測異常(運行時異常)—非受檢異常—unchecked

就是Exception中的RuntimeException和其子類

直接編譯通過,運行時,調用者調用程序強制停止,讓調用者對代碼進行修正

5.多線程

多線程複習

什麼是多線程

進程:正在進行的程序

線程:就是進程中一個負責程序執行的控制單元

一個進程中可以有多執行路徑,稱之爲多線程

一個進程至少有一個線程

開啓多個線程是爲了同時運行多部分代碼

每一個線程都有自己的內容 這個內容可以稱之爲線程要執行的任務

線程和進程的區別:

同時運行多個任務程序–進程

同一個應用程序有多條執行路徑併發執行–多線程

多線程的好處:解決了多部分同時運行的問題

多線程的弊端:線程太多,效率的降低

創建線程目的是爲了開啓一條執行路徑,與執行指定的代碼和其他代碼實現同時運行,而運行的指定代碼就是

執行任務的路徑

JVM創建的主線程的任務都定義在了主函數中

自定義的線程它的任務在哪

Thread類用於描述線程 線程是需要任務的 所以Thread類也是對任務的描述

這個任務就是通過Thread類中的run方法來實現的 run()就是封裝自定義線程

run()方法中定義的就是線程需要運行的任務代碼

開啓線程就是爲了運行指定代碼,所以只有繼承Thread類,並複寫run方法

JVM啓動就會執行多個線程

1.執行mian函數的線程-

2.負責垃圾回收機制的線程

如果創建一個線程

1.創建線程的方式 繼承Thread類

步驟 1.定義一個類繼承Thread類

      2.覆蓋Thread類中的方法 run();

      3.直接創建Thread的子類對象創建線程

      4.調用start方法開啓線程並調用線程的任務run方法執行

2.創建線程的第二種方式 實現Runnable接口

步驟 1.定義類實現runnable接口

     2.覆蓋接口中的run方法 將線程的代碼封裝到run方法中

   3.通過Thread類創建線程對象,並將Runnabel接口中的子類對象作爲

   Therad類的構造函數 參數進行傳遞

   

   原因:因爲線程的任務都封裝在Runnabel接口中的子類run()方法中的 所以要在線程對象創建時,

   就要明確要運行的任務。

   4.調用線程的start()方法開啓線程

實現接口的好處

1.將線程的任務從線程的子類中分離出來,進行單獨的封裝 按照面向對象的思想將任務封裝成了對象

2.避免了java單繼承的侷限性

Runnabel接口的出現僅僅是將線程的任務進行了對象的封裝

start:作用是啓動一個新線程會相繼調用run方法

run:和普通方法一樣 單獨調用會在當前線程執行run() 不會啓動新線程

停止線程的

1.stop方法

2.run方法結束

怎麼控制線程的任務結束

任務中會有循環結構,只要控制循環結構 就可以結束任務

控制循環通常使用標記來實現

cpu的執行資格:可以被cpu處理 在處理的隊列排隊

cpu的執行權:正在被cpu處理

線程的五種狀態

被創建start()

線程運行–具備執行權和執行資格

臨時堵塞狀態–具備執行資格,但不具備執行權,正在等待執行權

凍結狀態----釋放執行權的同時,釋放執行資格

消亡狀態—run方法的結束 線程的任務結束

wait可以指定時間也可以不指定時間

sleep 必須指定時間

在同步時,對cpu的執行權和鎖的處理不同

wait 釋放執行權 釋放鎖

sleep 釋放執行權 不釋放鎖

守護線程和用戶線程

用戶線程 java虛擬機在它所有分守護線程都離開後自動離開

守護線程 守護線程是用來服務用戶線程的

setDaemon()

多線程安全問題的產生的原因

1.多個線程在操作共享的數據

2.操作共享數據的線程的代碼有多條 當一個線程在執行操作共享數據的多條數據代碼過程找中

其他線程參與了運算,就會導致線程的安全問題的發生

同步的好處:解決了線程的安全問題

弊端:相對降低了效率 因爲同步外的線程都會判斷同步鎖

同步的前提是:同步中必須有多個線程並使用同一個鎖sybchroized

同步函數的鎖是this

同步代碼塊的鎖是任意的(同步代碼塊對於鎖的操作是隱士的)

jdk1.5後將同步和鎖封裝成了對象

並將操作鎖的隱式方式封裝成了對象,將隱式動作變成了顯示動作

lock接口 出現替代了同步代碼塊或同步函數 將同步的隱式鎖 操作變成了

顯示操作 同時更爲靈活 可以一個鎖加上多組監聽器

wait 讓線程處於一個凍結狀態 被wait的線程會被存儲到線程池中

notify 喚醒線程池中一個線程(任意)

notifyAll喚醒線程池中的所有線程

這些方法必須定義在同步中

因爲這些方法是用於操作線程狀態的方法

必須要明確到底操作的是哪個鎖上的線程

if判斷只有一次

會導致不該運行的程序運行了 出現了數據錯誤的情況

while判斷標記解決了線程獲取執行權後是否運行

notify只能喚醒一個線程 如果本方喚醒本方 沒有意義

而while判斷標記 notify會導致死鎖

nitifyAll解決了本方線程一定喚醒本方線程的問題

6.I/O

io 流

轉換流

InputStreamReader 字節流—字符流 解碼

OutputStreamWriter 字符流----字節流 編碼

流的操作規律

之所以弄清楚這個規律,是因爲流對象太多,開發時不知道

要使用哪一個

要弄清楚開發時,使用哪一個就需要明確

1.明確源和目的(匯)

  源: InputStream   Reader

  目的:  OutputStream  Writer

2.明確數據是否是文本數據

  源:是文本格式  Reader 

     不是的話  InputStream

  目的  是  Writer

     不是的話  OutputStream

注意:到這裏就可以明確要是用哪一個體系

3.明確具體的設備

  源設備:

     硬盤:File

     鍵盤:System.in

     內存:數組(其實就是緩衝區)

     網絡:Socket流

  目的設備

     硬盤:File

     控制檯:System.out

     內存:數組(其實就是緩衝區)

     網絡:Socket流

4.是否需要其他額外功能

  1.是否需要高效

     是,就是用緩衝區

      Buffer

  2.是否需要轉換

需求1:複製一個文本文件

    1.明確源和目的

      源:InputStream  Reader

      目的:OutputStream  Writer

    2.明確是否是文本文件

         源文件是   Reader

        不是   InputStream 

        目的文件是文本文件

        Writer

   3.明確設備

        源設備  硬盤 File

        目的設備  硬盤  File

  FileReader fr  =  new FileReader("a.txt");

  FileWriter  fw = new FilWriter("b.txt");

  4.是否需要額外功能

   需要高效

   Buffer

   

   BufferedReader bfr = new BufferedReader(new FileReader("a.txt"));

   BufferedWriter  bfw = new BufferedWriter(new FileWriter("b.txt"));

需求2:讀取鍵盤錄入信息,並寫入到一個文件中

  1.明確源和目的

     源: InputStream Reader

     目的:  OutputStream  Writer

  2.明確是否是文本文件

     源文件是文本文件  Reader

     

     目的文件  是文本文件  Writer

  3.明確設備

     源文件設備  

      鍵盤 System.in

      目的文件設備

      硬盤  File

      

      InputStream in = System.in;

      FileWriter fw = new FileWriter("t.txt");

     現在需要思考的問題是從鍵盤上獲取的是字節流,

     而在文本中輸入的是字符流,所以需要將鍵盤上獲取的字節流轉換成字符流

  4.是否需要額外功能

    需要轉換

    字節流轉換字符流

     InputStreamReader Isr = new InputStreamReader(new InputStream(System.in));

         FileWriter  fw = new FileWriter("t.txt");

     

    還需要其他額外功能嗎

     需要高效

      BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in))

      BufferedWriter bfw = new BufferedWriter(new FileWriter("t.txt));

需求3:將一個文本文件數據顯示在控制檯上

  1,確定源和目標

     源  Inputstream  Reader

     目的  OutputStream Writer

  2.是否是文本文件

     源  是文本文件  Reader

     目的  是文本文件  Writer

  3.明確設備

     源設備  硬盤  File

     目的  System.out;

   

   FileReader fr = new FileReader("a.txt");

   OutputStream out = System.out;

  4,是否需要額外功能

     注意:現在需要思考一個問題就是從文本中讀取之後在控制檯上輸出來是是需要轉換成字符流

     字符流轉換成字節流

     FileReader fr = new FileReader("a.txt");

     OutputStreamWriter  osw = new OutputStreamWriter(new OutputStrem(System.out));

     

     是否需要高效

     需要  使用Buffered

     BufferedReader bfr = new BufferedReader(new FileReader("a.txt"));

     BufferedWriter  bfw = new BufferedWriter(new OutputStreamWriter(new OutputStream(System.out)))

需求4:讀取鍵盤錄入數據,顯示在控制檯上

  1.明確源和目的

     源  InputStrem Reader

     目的  OutputStrem Writer

  2.明確是否是文本文件

     源 不是文本文件

        InputStrem 

     目的 不是文本文件

  3.明確設備

     源設備

     System.in

     目的設備

     System.out.

  

  InputStream in = System.in;

  OutputStream  out = System.out;

  4.是否需要額外功能

     注意現在需要思考的是,從鍵盤上獲取的文件是字節流,爲了操作方便需要將其轉換成字符流文件

     InputStremReader  isr = new InputStreamReader(System.in)

     

     注意現在獲取到的是字符流 需要將其轉換成字節流

     OutputStreamWriter osw = new OutputStreamWriter(System.out);

     

     是否還需要其他功能

     需要高效

     BufferedReader bfr = new BufferedReader(new InputStremReader(System.in))

     BufferedWriter bfw = new BufferedWriter(new OutputStremWriter(System.out));          

5.將一箇中文字符串按照指定的編碼表寫入到一個文件中

         1.目的 OutputStream Writer

         2.是存文本嗎  Writer

         3.設備 硬盤File

         FileWriter fw = new FileWriter("a.txt");

         注意:既然需求中已經明確了指定的編碼表的動作

         那就不可以使用FileWriter 因爲FileWriter內部是使用了默認的

         本地編碼表

         只能使用其父類 OutputStreamWriter 

         OutputStreamWriter 接收一個字節輸出流對象 

         既然是操作文件,那麼該對象應該是FileOutputStream

         

         OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt").utf-8);

     是否需要高效

     需要

     BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(("a.txt"),utf-8)))

    gbk  utf-8  unicode 編碼表    

9. 一個對象的實例化過程

一個對象的實例化過程

Person p = new Person();

1.jvm會讀取指定的路徑下的peron.class文件 並且加載進內存

並會先加載person的父類(如果有直接父類的情況的話,默認爲object)

2.在堆內存中開闢空間分配地址

3.並在對象空間中對對象中的屬性進行默認初始化

4.調用對應的構造函數初始化

5.在構造函數中,第一行會先調用父類中的構造函數進行初始化

6.父類初始化完畢後,在對子類的屬性進行顯示初始化

7.在進行子類構造方法的特定初始化

8.初始化完畢後,將地址值賦值給引用變量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章