Java-靜態Static單例模式


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

 

 

    

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM