1.靜態static
概念:在有一種情況下,就是無論這個類的對象怎么變化,某些特質始終不會變,這類特質我們稱之為靜態屬性。
靜態的只能訪問靜態,非靜態的可以訪問靜態和非靜態
靜態當中是不可以使用this和super
類中不存在靜態的構造
靜態變量:
使用static關鍵字來修飾成員變量,該變量就被稱為靜態變量。
static關鍵字只能用來修飾成員變量,不能用來修飾局部變量。
靜態變量被所有實例共享。
靜態內存唯一,和實例沒有任何關系,所以可以直接通過“類名.變量名”進行調用
靜態常量:
被static修飾的常量被稱為靜態常量
成員屬性如果是常量,則必須賦初值,否則編譯不通過,可以通過構造來賦初值
靜態方法:
被static關鍵字修飾的方法,稱為靜態方法
靜態方法只能訪問靜態屬性
靜態方法可以使用“類名.方法名”來訪問
在一個靜態方法中只能訪問用static修飾的成員,原因在於沒有被static修飾的成員需要先創建對象才能訪問,而靜態方法在被調用時可以不創建對象
靜態代碼塊:
每個靜態代碼塊,只會被執行一次
申明對象的時候,靜態代碼塊並不會被執行,只有類被加載的時候才會
靜態代碼塊可以有多個,順序執行
靜態代碼塊,樣式如下:
static{ System.out.println("靜態代碼塊"); }
2.單例模式
什么是單例模式?
為了保證資源不被過多得浪費,提出一種能讓整個系統中一個類只能被實例化對象一次,且實例化對象在內存中唯一存在的路,實現這種思路的功能稱作單例模式。
單例模式的特點:
單例模式內存唯一,資源共享
代碼實現單例模式:
使用private關鍵字定義私有化靜態屬性
使用private關鍵字私有化構造方法
同步靜態方法供外部共享。
package org.example; /** * 單例模式 */
public class Student { //使用static關鍵字讓對象唯一存在 private static Student stu; //私有化構造方法,保證類的外部無法實例化對象 private Student() { } /** * 給外部提供一個唯一能夠獲得對象得方法 * 如果已經構建對象,則不用再繼續構建,沒有才能重新構建 * @return */ public synchronized static Student getStu() { if(stu == null){ stu = new Student(); } return stu; } private String name; //名字私有化
private int age;//年齡私有化
/* *給私有化的name設置getter方法 */
public String getName() { return name; } /* *給私有化的name設置setter方法 */
public void setName(String name) { this.name = name; } /* *給私有化的age設置getter方法 */
public int getAge() { return age; } /* *給私有化的age設置getter方法 */
public void setAge(int age) { if (age <= 0){ System.out.println("年齡不合法。。。。"); } this.age = age; } public void introduce(){ System.out.println("大家好!我叫"+name+",我今年"+age+"歲!"); } }
外部調用:
只能通過Student類提供的getStu方法獲取對象,通過new 去創建對象直接提示報錯。
package org.example; import javax.rmi.CORBA.Stub; public class Exceple1 { public static void main(String[] args) { //實例化對象已在student類內部自動判斷完成,只有通過getStu()方法來獲取 Student stu = Student.getStu(); stu.setName("小紅"); //通過公開的方法設置姓名
stu.setAge(-10);//通過公開的方法設置年齡
stu.setAge(18); stu.introduce();//調用公開方法
} }
設計模式擴展可參考:
https://blog.csdn.net/qq_22339269/article/details/90176392