一、預備知識
1. setter/getter方法
| public | private |
|---|---|
| 公共的 | 私有的 |
| 外部可以直接訪問這個屬性或者方法 | 不希望外部訪問這個對象的一些屬性或方法 |
| 使用對象可以直接調用 | 只能間接使用 |
定義Poker類:
class Poker{
private String number;
private String color;
//給外部提供一個set方法 通過這個方法間接給number賦值
//可以對外部給的值進行控制
public void setNumber(String number){
this.number = number;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
//給外部提供一個get方法訪問某個變量的值
//封裝內(nèi)部實現(xiàn)
public String getNumber(){
return number;
}
}
setter/getter方法的使用:
//創(chuàng)建對象
Poker poker = new Poker();
poker.setNumber("jack");
System.out.println(poker.getNumber());
-
1. Alt+insert 快速產(chǎn)生setter getter方法
-
2. 建議將setter/getter方法定義在類的最后面 ,避免干擾閱讀
-
3. 成員變量的作用域,從對象的創(chuàng)建到對象被銷毀

image.png
2. 構造方法(在對象被創(chuàng)建時調用)
-
希望在對象創(chuàng)建的時候 做點其他事
-
在創(chuàng)建對象的時候,需要給屬性賦值,自定義構造方法

image.png
調用:

調用
輸出結果:

輸出結果
-
構造方法的重載:同一個類里面有多個同名的方法,但是返回值或者參數(shù)不同,如public int nextInt() 和public int nextInt(int i)
3. static的用法
-
static:修飾的屬性和方法,都會在對象創(chuàng)建之前在靜態(tài)區(qū)里面優(yōu)先加載
實例方法/對象方法:必需創(chuàng)建一個對象才能調用的方法
類方法/靜態(tài)方法:不需要創(chuàng)建對象 直接用這個類調用
靜態(tài)屬性:1. 定義一個常量 只能賦值一次? 2.單例設計模式
class MyClass{
public String name;
public static String address;
public void test(){
System.out.println("這是對象方法");
}
public static void test2(){
System.out.println("這是靜態(tài)方法");
}
}
class T2{
public static void main(String[] args){
//使用類的類的實例方法/對象方法
MyClass c1 = new MyClass();
c1.test();
//使用類方法/靜態(tài)方法
MyClass.test2();
//調用靜態(tài)屬性
MyClass.address = "jack";
}
}
什么情況下使用靜態(tài)方法:
- 工廠設計模式Factory
- 當不需要記錄數(shù)據(jù)的時候 只關心功能就可以使用靜態(tài)方法
注意:一個靜態(tài)方法里面不能調用這個類的非靜態(tài)屬性和非靜態(tài)方法
4. this的用法
1. 什么時候用this:需要明確指定調用的是這個對象自己的一些屬性或者方法
2. this可以指創(chuàng)建的這個對象,也可以只調用這個方法的對象

image.png

image.png
5. ArrayList(動態(tài)數(shù)組)的使用
-
什么是ArrayList
ArrayList就是傳說中的動態(tài)數(shù)組,用MSDN中的說法,就是Array的復雜版本。當我們不知道到底有多少個數(shù)據(jù)元素的時候,就可使用ArrayList;如果知道數(shù)據(jù)集合有多少個元素,就用數(shù)組。 -
如何構建ArrayList
- 構造方法:ArrayList<String> list = new ArrayList<String>();
-
ArrayList常用方法
增加元素到鏈表中
- boolean add(Element e)
增加指定元素到鏈表尾部. - void add(int index, Element e)
增加指定元素到鏈表指定位置.
從鏈表中刪除元素
- void clear()
從鏈表中刪除所有元素. - E remove(int index)
刪除鏈表中指定位置的元素. - protected void removeRange(int start, int end)
刪除鏈表中從某一個位置開始到某一個位置結束的元素。
獲取鏈表中的元素
- E get(int index)
獲取鏈表中指定位置處的元素. - Object[] toArray()
獲取一個數(shù)組,數(shù)組中所有元素是鏈表中的元素.(即將鏈表轉換為一個數(shù)組)
修改某個元素
- E set(int index, E element)
將鏈表中指定位置上的元素替換成新元素。
搜索元素
- boolean contains(Object o)
如果鏈表包含指定元素,返回true. - int indexOf(Object o)
返回元素在鏈表中第一次出現(xiàn)的位置,如果返回-1,表示鏈表中沒有這個元素。 - int lastIndexOf(Object o)
返回元素在鏈表中最后一次出現(xiàn)的位置,如果返回-1,表示鏈表中沒有這個元素。
檢查鏈表是否為空
- boolean isEmpty()
返回true表示鏈表中沒有任何元素.
獲取鏈表大小
- int size()
返回鏈表長度(鏈表包含元素的個數(shù)).
6. 引用類型和基本數(shù)據(jù)類型的區(qū)別
-
基本數(shù)據(jù)類型
byte:Java中最小的數(shù)據(jù)類型,在內(nèi)存中占8位(bit),即1個字節(jié),取值范圍-128~127,默認值0
short:短整型,在內(nèi)存中占16位,即2個字節(jié),取值范圍-32768~32767,默認值0
int:整型,用于存儲整數(shù),在內(nèi)在中占32位,即4個字節(jié),取值范圍-2147483648~2147483647,默認值0
long:長整型,在內(nèi)存中占64位,即8個字節(jié)-263~263-1,默認值0L
float:浮點型,在內(nèi)存中占32位,即4個字節(jié),用于存儲帶小數(shù)點的數(shù)字(與double的區(qū)別在于float類型有效小數(shù)點只有6~7位),默認值0
double:雙精度浮點型,用于存儲帶有小數(shù)點的數(shù)字,在內(nèi)存中占64位,即8個字節(jié),默認值0
char:字符型,用于存儲單個字符,占16位,即2個字節(jié),取值范圍0~65535,默認值為空
boolean:布爾類型,占1個字節(jié),用于判斷真或假(僅有兩個值,即true、false),默認值false
-
引用數(shù)據(jù)類型:類、接口類型、數(shù)組類型、枚舉類型、注解類型。
-
區(qū)別:
基本數(shù)據(jù)類型在被創(chuàng)建時,在棧上給其劃分一塊內(nèi)存,將數(shù)值直接存儲在棧上。
引用數(shù)據(jù)類型在被創(chuàng)建時,首先要在棧上給其引用(句柄)分配一塊內(nèi)存,而對象的具體信息都存儲在堆內(nèi)存上,然后由棧上面的引用指向堆中對象的地址。
7. 單例設計模式
(1)將構造方法私有化,使其不能在類的外部通過new關鍵字實例化該類對象。
(2)在該類內(nèi)部產(chǎn)生一個唯一的實例化對象,并且將其封裝為private static類型。
(3)定義一個靜態(tài)方法返回這個唯一對象。
-
實現(xiàn)一、立即加載 / “餓漢模式”
//餓漢模式
class Poker{
//default,sharedInstance,manager
//2.定義一個靜態(tài)的成員變量 記錄單例對象
public static final Poker shared = new Poker();
//1.私有化默認構造函數(shù)
private Poker(){}
//3. 靜態(tài)方法返回該實例
public static Poker getInstance() {
return shared;
}
}
-
實現(xiàn)二、延遲加載 / “懶漢模式”
//懶漢模式
class Player{
public int count = 0;
//2.創(chuàng)建靜態(tài)變量 這里沒有final
private static Player shared = null;
//1.類的構造方法私有化
private Player(){}
//3.提供給外部一個訪問方法
public static Player getInstance(){ //線程安全的懶漢模式
if (shared == null) {
//如果沒有創(chuàng)建 那么就創(chuàng)建一個
shared = new Player();
}
return shared;
}
-
實現(xiàn)三、線程安全的“懶漢模式”
class Player{
public int count = 0;
//2.創(chuàng)建靜態(tài)變量
private static Player shared = null;
//1.類的構造方法私有化
private Player(){}
//3.提供給外部一個訪問方法
public static Player getInstance(){ //線程安全的懶漢模式
Object b = new Object();
synchronized (b) {
if (shared == null) {
//如果沒有創(chuàng)建 那么就創(chuàng)建一個
shared = new Player();
}
}
return shared;
}