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;
}
}
}
*/