oop_promax_static

qing集發表於2024-03-29

static

/*
static:靜態,可以修飾成員變數和方法。
成員變數按照有無static修飾,分為兩種:
1.類變數:有static修飾,屬於類,在計算機裡只有一份,會被類的全部物件共享。   訪問:類名.類變數(位於堆記憶體)
2.例項變數:(物件的變數):無static修飾,屬於每個物件的。                  訪問:物件.例項變數
!!!成員變數有幾種?各自在什麼情況下定義?
      類變數:資料只需要一份,且需要被共享時(訪問,修改)
      例項變數:每個物件都要有一份,資料各不同(如:name、score、age)
!!!訪問自己類中的類變數,是否可以省略類名不寫?
      可以。
      注意:在某個類中訪問其他類裡的類變數,必須帶類名訪問。

成員方法按照有無static修飾,分為兩種:
1.類方法:有static修飾,屬於類,在計算機中只有一份,會被類的全部物件共享。     訪問:類名.類變數(位於堆記憶體)
2.例項方法:(物件的方法):無static修飾,屬於每個物件的。                   訪問:物件.例項方法
!!!main方法也是類方法
!!!類方法的常見應用場景:
      類方法最常見的應用場景是做工具類。
!!!工具類是什麼?
      工具類中的方法都是一些類方法,每個方法都是用來完成一個功能的,工具類是個開發人員共同使用的。
!!!使用類方法來設計工具類有啥好處?
      提高了程式碼複用;呼叫方便,提高了開發效率。

static的注意事項:
1.類方法中可以直接訪問類的成員,不可以訪問例項成員。(因為此時可以找到類地址,但是找不到物件地址)
2.例項方法中既可以直接訪問類成員,也可以訪問例項成員。(因為此時既可以找到類地址,也可以找到物件地址)
3.例項方法中可以出現this關鍵字,類方法中不可以出現this關鍵字。
!!!this是什麼?
      this就是一個變數,可以在方法中,來拿到當前物件地址。
!!!this有啥應用場景?
      this主要用來解決:變數名稱衝突問題。
*/

code-block

/*
程式碼塊概述:
程式碼塊是類的5大成分之一(成員變數、構造器、方法、程式碼塊、內部類)

程式碼塊分為兩種:
1.靜態程式碼塊:
    格式:static{}
    特點:類載入時自動執行、由於類只會載入一次,所以靜態程式碼塊也會只執行一次(!!!)。
    作用:完成類的初始化,例如:對類變數(!!!)的初始化賦值。

2.例項程式碼塊:
    格式:{}
    特點:每次建立物件時,執行例項程式碼塊,並在構造器前執行。
    作用:和構造器一樣,都是用來完成物件的初始化的,例如:對例項變數進行初始化賦值。
    應用常見:可以將構造器裡重複的程式碼放入例項程式碼塊內,提高開發效率。
*/

design-pattern

/*
!!!什麼是設計模式?設計模式主要學什麼?單例模式解決了什麼問題?
    1.設計模式就是具體問題的最優解決方法。
    2.解決了什麼問題?怎麼寫?
    3.確保一個類只有一個物件。

!!!單例設計模式:

     //餓漢式單例(拿物件時,已建立物件):
     寫法:
          1.把類的構造器私有。
          2.定義一個類變數記住類的一個物件。
          3.定義一個類方法,返回物件。
     public class A{
          1.私有構造器
          private A(){
          }
          2.定義一個類變數記住類的一個物件-類變數a隨類A只載入一次
          private static A a = new A();
          3.定義一個類方法,返回物件
          public static A getObject(){
          return a;
         }
     }

     應用場景和有啥好處:
     1.工作管理員、Runtime
     2.在這些業務場景下,使用單例設計模式,可以避免浪費記憶體。

!!!懶漢式單例(拿物件時,才開始建立物件)
     寫法:
          1.把類的構造器私有。
          2.定義一個類變數用於儲存類的一個物件。
          3.提供一個類方法,保證返回的是同一個物件。
     public class B{
          1.私有構造器
          private B(){
          }
          2.定義一個類變數用於儲存類的一個物件
          private static B b;
          3.定義一個類方法,返回物件
          public static B getObject(){
                 if(b == null){
                    b = new B();
                 }else{
                    return b;
                 }
          }
     }
*/