Java語法的學習筆記
?下面放復習的文檔鏈接,如果有需要可以前往下載獲取,這個倉庫還有關于mysql、hadoop、python等的復習部分,并且每個文檔有著對應的代碼部分。文章作為復習使用,更多代碼內容見鏈接如下:
https://gitee.com/zhang-huile/LearnForJob
目錄
第二階段:基礎加強階段總體介紹
一、static
????????一)static修飾成員變量
????????1.static是什么?
? ? ? ? 2.static修飾的成員變量叫什么?怎么使用?有啥特點?
? ? ? ? 3.無static修飾的成員變量叫什么?怎么使用?有啥特點?
? ? 二)類變量應用場景
????????1.類變量的應用場景
? ? ? ? 2.案例導學
? ? ? ? 3.成員變量有幾種?各自在什么情況下被定義?
? ? ? ? 4.訪問自己類中的類變量,是否可以省略類名不寫?
? ? 三)static修飾成員方法
? ? ? ? 1.static修飾成員方法叫什么?如何使用?
? ? ? ? 2.無static修飾成員方法叫什么?如何使用?
? ? 四)static修飾成員方法的應用場景
????????1.類方法的應用場景:
? ? ? ? 2.工具類是什么?
? ? ? ? 3.使用工具類來設計工具類有啥好處?
? ? ? ? 4.案例導學 ? ? ?(util3)
? ? ? ? 5.為什么工具類的方法要用類方法,而不能用實例方法?
? ? ? ? 6.工具類定義時有什么要求?
? ? 五)static的注意事項
? ? 六)static的應用知識 ? (block5)
?1.代碼塊
? ? ? ? 2.單例設計模式
二、繼承
????1.什么是繼承?繼承后有啥特點
? ? 2.帶繼承關系的類,java會怎么創建它的對象?對象創建出來后,可以直接訪問哪些成員?
? ? 3.使用繼承有啥好處?
一)繼承的相關注意事項
? ? 1.權限修飾符 ? (modifer)
? ? 2.單繼承、Object類 ? (extendsfeature ?繼承的特點)
? ? 3.方法重寫 ? (override)
? ? 4.方法重寫是什么?
? ? 5.重寫方法有哪些注意事項?
? ? 6.子類訪問其他成員(成員變量、成員方法)的特點 ? (access 就近原則 ?誰近訪問誰)
? ? 7.子類構造器的特點 ? (constructor)
? ? 8.補充知識:this()調用兄弟構造器 ? (this)
? ? 9.super(...)調用父類構造器的常見應用場景是什么?
? ? 10.this(...)的作用是什么?
? ? 11.this(...)和super(...)的使用時需要注意什么?
第二階段:基礎加強階段總體介紹
一、static
學習內容:
? ? ? ? static ?、 ?設計模式:單例 ? 、繼承
????????一)static修飾成員變量
????????1.static是什么?
????????????????叫靜態,可以修飾成員變量、成員方法
? ? ? ? ? ? ????????成員變量按照有無static修飾,分為兩種:
? ? ? ? ? ? ? ? 1).類變量 ? : 有static修飾,屬于類所有,在計算機中只有一份,會被類的全部對象共享
? ? ? ? ? ? ? ? 2).實例變量(對象的變量) : 沒有static修飾,屬于對象所有,每個對象都有一份,互不影響
? ? ? ? ? ? ? ? ? ? 推薦通過使用 類名.類變量 進行訪問類變量
? ? ? ? 2.static修飾的成員變量叫什么?怎么使用?有啥特點?
? ? ? ? ? ? 類變量(靜態成員變量)
? ? ? ? ? ? 類名.類變量名 訪問類變量(推薦)
? ? ? ? ? ? 對象名.實例變量名 訪問實例變量(不推薦)
? ? ? ? ? ? 屬于類,與類一起加載一次,在內存中只有一份,會被類的所有對象共享
? ? ? ? 3.無static修飾的成員變量叫什么?怎么使用?有啥特點?
????????????實例變量(非靜態成員變量)
? ? ? ? ? ? 對象名.實例變量名
? ? ? ? ? ? 屬于對象,每個對象都有一份,互不影響
? ? 二)類變量應用場景
????????1.類變量的應用場景
????????在開發中,如果某個數據只需要一份,且希望能夠被共享(訪問、修改),則該數據可以定義成類變量來記住。
? ? ? ? 2.案例導學
????????例如:系統啟動后,要求用戶類可以記住自己創建了多少個用戶對象。
? ? ? ? 3.成員變量有幾種?各自在什么情況下被定義?
????????????類變量:數據有需要一份,且需要被共享(訪問,修改)
? ? ? ? ? ? 實例變量:每個對象都要有一份,數據各不同(如:name、score、age等)
? ? ? ? 4.訪問自己類中的類變量,是否可以省略類名不寫?
????????????????可以的
? ? ? ? ? ? 注意:在某個類中訪問其他類里的類變量,必須帶類名訪問。
? ? 三)static修飾成員方法
???????? 成員方法的分類:
? ? ? ? ? ? 類方法:有static修飾的成員方法,屬于類
? ? ? ? ? ? ? ? 類名.類方法名()(推薦)
? ? ? ? ? ? ? ? 對象名.類方法名()(不推薦)
? ? ? ? ? ? 實例方法:
? ? ? ? ? ? ? ? 沒有static修飾的成員方法,屬于對象
? ? ? ? ? ? ? ? 對象名.實例方法名()
? ? ? ? 1.static修飾成員方法叫什么?如何使用?
????????????類方法(靜態方法)
? ? ? ? ? ? 屬于類,可以直接用類名訪問,也可以用對象訪問
? ? ? ? ? ? 類名.類方法名()
? ? ? ? ? ? 對象名.類方法名()(不推薦)
? ? ? ? 2.無static修飾成員方法叫什么?如何使用?
? ? ? ? ? ? 實例方法(非靜態方法)
? ? ? ? ? ? 屬于對象,只能用對象名訪問
? ? ? ? ? ? 對象名.實例方法名()
? ? 補充知識:搞懂main()方法
? ? ? ? 是一個類方法
?
? ? ? ? public class hello {public static void main(String[] args) {for(int i=0;i<args.length;i++){System.out.println(args[i]);}}}
? ? 四)static修飾成員方法的應用場景
????????1.類方法的應用場景:
? ? ? ? ? ???類方法最常見的應用場景是做工具類。
? ? ? ? 2.工具類是什么?
????????????工具類中的方法就是一些類方法,每個方法都是用來完成一個功能的,工具類就是給開發人員共同使用的。
? ? ? ? 3.使用工具類來設計工具類有啥好處?
? ? ? ? ? ? 提高了代碼的復用性;調用方便,提高了開發效率。
? ? ? ? 4.案例導學 ? ? ?(util3)
? ? ? ? 5.為什么工具類的方法要用類方法,而不能用實例方法?
????????????因為類方法可以直接用類名訪問,而實例方法只能用對象名訪問。
? ? ? ? ? ? 實例方法需要創建對象來調用,此時對象只是為了調用方法,對象占內存,這樣會浪費內容。
? ? ? ? ? ? 即實例方法需要創建對象來調用,會浪費內存。
? ? ? ? 多學一招:因為工具類沒有創建對象的需求,建議將工具類的構造進行私有。則不能實例化對象,只能通過類名調用方法。
? ? ? ? 6.工具類定義時有什么要求?
????????????????工具類不需要創建對象,建議將工具類的構造器私有化。
? ? 五)static的注意事項
????????????使用類方法、實例方法的幾點注意事項
? ? ? ? ? ? 類方法中可以直接訪問類的成員,不可以直接訪問實例成員
? ? ? ? ? ? 實例方法中既可以訪問類成員,也可以直接訪問實例成員。
? ? ? ? ? ? 實例方法中可以出現this關鍵字,類方法中不可以出現this關鍵字。
? ? 六)static的應用知識 ? (block5)
?1.代碼塊
????????代碼塊是類的五大成分之一(成員變量、構造器、方法、內部類、代碼塊)
? ? ? ? ? ? 代碼塊按照有無static修飾,分為兩種:
? ? ? ? ? ? ? ? 1)靜態代碼塊:格式
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? static{}
? ? ? ? ? ? ? ? ? ? 特點:;類加載時自動執行,由于類只會加載一次,所以靜態代碼塊也只會執行一次。
? ? ? ? ? ? ? ? ? ? 作用:完成類的初始化,例如:對類變量的初始化賦值。
? ? ? ? ? ? ? ? ? ?靜態代碼塊在類加載時執行,且只執行一次;構造器在創建對象時執行,每創建一個對象就執行一次。
? ? ? ? ? ? ? ? 2)非靜態代碼塊:格式
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {}
? ? ? ? ? ? ? ? ? ? ?特點:每次創建對象時,執行實例代碼塊,并在構造器前執行。
? ? ? ? ? ? ? ? ? ? ?作用:和構造器一樣,都是用來完成對象的初始化的,例如:對實例變量進行初始化賦值。
? ? ? ? 2.單例設計模式
????????????????什么是設計模式?
? ? ? ? ? ? ? ? 一個問題通常有n種解法,其中肯定有一種解法是最優的,這個最優的解法被人總結出來了,稱之為設計模式。
? ? ? ? ? ? ? ? 設計模式有20多種,對于20多種軟件開發種會遇到的問題。
? ? ? ? ? ? 關于設計模式主要學什么?
? ? ? ? ? ? ? ? 1)解決什么問題?
? ? ? ? ? ? ? ? 2)怎么寫?
? ? ? ? ? ? 單例設計模式
? ? ? ? ? ? ? ? 確保一個類只有一個對象。
? ? ? ? ? ? ? ? 寫法:
? ? ? ? ? ? ? ? ? ? 把類的構造器私有
? ? ? ? ? ? ? ? ? ? 定義一個變量記住類的每一個對象。
? ? ? ? ? ? ? ? ? ? 定義一個類方法,返回對象。
? ? ? ? ? ? ? ? ? ? ? ? ? ? 餓漢式單例:拿對象時,對象早就創建好了。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public class A {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //2.定義一個類變量,記住類的一個對象
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? private static A a = new A();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //1.私有類的構造器
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? private A(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //3.定義一個方法,返回類的對象
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public static A getObject(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return a;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? 單例模式的應用場景、有啥好處?
? ? ? ? ? ? ? ? 任務管理器、獲取運行時對象
? ? ? ? ? ? ? ? 在這些業務場景下,使用單例模式,可以避免浪費內存。
? ? ? ? ? ? ? ? ? ? ? ? ? ? 懶漢式單例:拿對象時,才開始創建對象。。
? ? ? ? ? ? ? ? ? ? ? ? ? ? 寫法:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 把類的構造器私有
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 定義一個類變量用于存儲對象。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 提供一個類方法,保證返回的是同一個對象。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public class B {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //2.定義一個類變量,用于存儲這個類的一個對象
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? private static B b;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //1.把類的構造器私
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? private B() {{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //定義一個類方法,這個方法要保證第一次創建一個對象,后面調用時都會返回這個對象。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public static B getInstance() {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (b == null) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("第一次創建對象!");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? b = new B();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return b;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? 單例:對于經常使用的寫餓漢式,不經常用的懶漢式。
二、繼承
????1.什么是繼承?繼承后有啥特點
? ? ? ? 繼承就是使用extends關鍵字,讓一個類和另一個類建立起的一種父子關系。
? ? ? ? 字類可以繼承父類的非私有的成員。
? ? 2.帶繼承關系的類,java會怎么創建它的對象?對象創建出來后,可以直接訪問哪些成員?
?????????帶繼承關系的類,Java會用類和其父類,這多張設計圖一起創建類的對象。
? ? ? ? 對象能直接訪問什么成員,是由子父類這多張設計圖共同決定的,這張設計圖對外暴露了什么成員,對象就可以訪問什么成員。
? ? 3.使用繼承有啥好處?
????????減少了重復代碼的編寫,提高了代碼的復用性。
一)繼承的相關注意事項
????1)權限修飾符
? ? 2)單繼承、Object類
? ? 3)方法重寫
? ? 4)子類中訪問其他成員的特點
? ? 5)子類構造器的特點
? ? 6)注意事項小結
? ? 1.權限修飾符 ? (modifer)
????????就是用來限制類中的成員(成員變量、成員方法、構造器、代碼塊....)能夠訪問的范圍
? ? ? ? private 、 protected 、 public 、缺省...
? ? 2.單繼承、Object類 ? (extendsfeature ?繼承的特點)
????????繼承的兩個注意事項:
? ? ? ? ? ? java是單繼承的,Java中的類不支持多繼承,但是支持多層繼承。
? ? ? ? ? ? Object類是所有類的父類(祖宗),所有類都繼承了Object類。
? ? 3.方法重寫 ? (override)
????????當子類覺得父類的方法不好用,或無法滿足自己的需求時,子類可以重寫一個方法名稱、參數列表一樣的方法,去覆蓋
? ? ? ? 父類的這個方法,這個就是方法重寫。
? ? ? ? ? ? 注意:重寫后,方法的訪問,java會遵循就近原則。
? ? 4.方法重寫是什么?
????????子類寫了一個方法名稱,形參列表與父類某個方法一樣的方法會去覆蓋父類的該方法
? ? 5.重寫方法有哪些注意事項?
????????建議加上@Override注解,可以校驗重寫是否正確,同時可讀性好。
? ? ? ? 子類重寫父類方法時,訪問權限必須大于或者等于父類被重寫的方法的權限。
? ? ? ? 重寫的方法返回值類型,必須與被重寫方法的返回值一樣,或者范圍更小。
? ? ? ? 私有方法、靜態方法不能被重寫
? ? 6.子類訪問其他成員(成員變量、成員方法)的特點 ? (access 就近原則 ?誰近訪問誰)
?????????成員變量:
? ? ? ? 當父類、子類、子類中方法都有同名的成員(eg:都叫name)時,子類訪問成員的優先級是:
? ? ? ? ? ? 按照就近原則,在方法中,優先訪問自己方法中的,如果想訪問子類的成員,需要使用this.name。
? ? ? ? ? ? 如果想訪問父類的成員,需要使用super.name。
? ? ? ? 成員方法:
? ? ? ? 當子類和父類都有同名的成員方法(eg:都叫getName())時,子類訪問方法的優先級是:
? ? ? ? ? ? 按照就近原則,在方法中,優先訪問自己方法中的,如果想訪問父類的成員方法,需要使用super.getName()。
? ? 7.子類構造器的特點 ? (constructor)
????????子類構造器的特點:
? ? ? ? ? ? 子類的全部構造器,都會先調用父類的構造器,再執行自己。
? ? ? ? 子類構造器是如何實現調用父類構造器的?
? ? ? ? ? ? 默認情況下,子類的全部構造器的第一行代碼都是super(),它會調用父類的無參構造器。
? ? ? ? ? ? 如果父類沒有無參構造器,則我們必須再子類構造器的第一行手寫super(),調用父類的有參構造器。
? ? 8.補充知識:this()調用兄弟構造器 ? (this)
在任意類的構造器中,是可以通過this(..)去調用該類的其他構造器。
? ? ? ? 在一個構造器中,this()和super()不能同時出現。
? ? 9.super(...)調用父類構造器的常見應用場景是什么?
為對象中包含父類這部分的成員變量進行賦值。
? ? 10.this(...)的作用是什么?
?在構造器中調用本類的其他構造器
? ? 11.this(...)和super(...)的使用時需要注意什么?
都必須放在構造器的第一行。
?