搜尋
首頁Javajava教程Java中static修飾屬性的解析(程式碼範例)

這篇文章帶給大家的內容是關於Java中static修飾屬性的解析(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

static 關鍵字,我們在開發用的還是比較多的。在《Java程式設計思想》有下面一段話

static 方法就是沒有 this 的方法。在 static 方法內部不能呼叫非靜態方法,反過來是可以的。而且可以在沒有創建任何物件的前提下,僅僅透過類別本身來呼叫 static 方法。這其實正是 static 方法的主要用途。

static 的用法比較廣泛:靜態變數、靜態成員、靜態函數等。我們在使用單列模式的時候,就會用到它。且 static 資料成員儲存在靜態儲存區,只儲存一次,可以節省記憶體。

static 宣告屬性

static 修飾成員變數

當我們需要在一個類別(class)中定義一個屬性為公共的屬性,就好比說我們需要這個屬性是所有類別都是共有的,而這個屬性的值是同一個。

Test.java

class Book{
    
    // 设置一个默认的值
    static String pub = "清华大学出版社";
    
    // 用来和 static 作为对比
    String description = "描述";
    
    // Book 类正常的属性
    private String title;
    private double price;
    
    // Book 的构造类
    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }
    
    // 获取 Book 的信息
    public void getInfo(){
        System.out.println("图书名称:"+ this.title + ",价格为:"+ this.price + ",出版社为:"+ this.pub + ",描述 "+ this.description);
    }
}

public class Test {

    public static void main(String[] args) {
        // 实例化三个Book类
        Book book1 = new Book("Android开发实战", 69.8);
        Book book2 = new Book("Java EE开发实战", 49.8);
        Book book3 = new Book("Java 开发教程", 79.8);
        
        // 在没有设置 pub 属性的情况下输出
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
        
        System.out.println("————————————————————无敌分割线————————————————————");
        
        // 我们给 book1 设置一个 pub 属性
        book1.pub = "中信出版社";
        book1.description = "这本书很牛逼,看了你就知道";
        
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
    }
}

控制台輸出

图书名称:Android开发实战,价格为:69.8,出版社为:清华大学出版社,描述 描述
图书名称:Java EE开发实战,价格为:49.8,出版社为:清华大学出版社,描述 描述
图书名称:Java 开发教程,价格为:79.8,出版社为:清华大学出版社,描述 描述
————————————————————无敌分割线————————————————————
图书名称:Android开发实战,价格为:69.8,出版社为:中信出版社,描述 这本书很牛逼,看了你就知道
图书名称:Java EE开发实战,价格为:49.8,出版社为:中信出版社,描述 描述
图书名称:Java 开发教程,价格为:79.8,出版社为:中信出版社,描述 描述

從控制台輸出的結果,可以看到:

  • 如果給屬性賦預設值,在上面的例子中是(description 和pub),輸出的結果都是預設的。

  • 當我們修改了類別中 static 關鍵字聲明的屬性,那麼只要修改了一次,那麼其他所有的物件的這個屬性都配修改了。

透過類別呼叫static 宣告的屬性

但是基於上面的程式碼,我們發現如果是其中的一個類別物件就改變了所有的物件的屬性,這樣子操作是不是感覺不是特別好?然後在Java中,如果是使用 static 聲明的屬性值,是可以直接透過類別呼叫的。

public class Test {

    public static void main(String[] args) {
        // 实例化三个Book类
        Book book1 = new Book("Android开发实战", 69.8);
        Book book2 = new Book("Java EE开发实战", 49.8);
        Book book3 = new Book("Java 开发教程", 79.8);
        
        // 在没有设置 pub 属性的情况下输出
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
        
        System.out.println("————————————————————无敌分割线————————————————————");
        
        // 我们使用 Book 类直接调用pub
        Book.pub = "中信出版社";
        
        book1.description = "这本书很牛逼,看了你就知道";
        
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
    }
}

沒有實例化類別時,呼叫static 屬性

Test.java

class Book{
    
    // 设置一个默认的值
    static String pub = "清华大学出版社";
    
    // 用来和 static 作为对比
    String description = "描述";
    
    // Book 类正常的属性
    private String title;
    private double price;
    
    // Book 的构造类
    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }
    
    // 获取 Book 的信息
    public void getInfo(){
        System.out.println("图书名称:"+ this.title + ",价格为:"+ this.price + ",出版社为:"+ this.pub + ",描述 "+ this.description);
    }
}

public class Test {

    public static void main(String[] args) {
        // 在没有实例化对象时,就调用
        System.out.println(Book.pub);
        
        // 没事实例化对象的时候,去给static属性赋值上默认值
        Book.pub = "北京大学出版社";
        System.out.println(Book.pub);
        
        // 新建一个类,输入 pub 属性
        Book book = new Book("Java", 88);
        book.getInfo();
    }
}

「控制台輸出

清华大学出版社
北京大学出版社
图书名称:Java,价格为:88.0,出版社为:北京大学出版社,描述 描述

由此,我們看出,在沒有實例化物件的時候,就可以直接透過類別去掉用static屬性,也可以修改static 的屬性。 static 屬性宣告雖然是在類別的結構中,但是並不受物件的控制,是獨立存在的。

static 屬性與非 static 屬性的差異

  • static 宣告的屬性和普通屬性(非 static 屬性)最大的差異在於已儲存的記憶體區域不同。 static 所修飾的在靜態資料區。而不是在堆疊和棧。

  • static 屬性與非static 屬性還有一個最大的區別,就是在於所有非static 屬性必須產生實例化之後才可以訪問,但是static 屬性不受實例化物件的控制。也就是說,在沒有產生實例化物件的情況下,依然可以使用 static 物件。

#

以上是Java中static修飾屬性的解析(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
JVM如何處理操作系統API的差異?JVM如何處理操作系統API的差異?Apr 27, 2025 am 12:18 AM

JVM通過JavaNativeInterface(JNI)和Java標準庫處理操作系統API差異:1.JNI允許Java代碼調用本地代碼,直接與操作系統API交互。 2.Java標準庫提供統一API,內部映射到不同操作系統API,確保代碼跨平台運行。

Java 9影響平台獨立性中引入的模塊化如何?Java 9影響平台獨立性中引入的模塊化如何?Apr 27, 2025 am 12:15 AM

modularitydoesnotdirectlyaffectJava'splatformindependence.Java'splatformindependenceismaintainedbytheJVM,butmodularityinfluencesapplicationstructureandmanagement,indirectlyimpactingplatformindependence.1)Deploymentanddistributionbecomemoreefficientwi

什麼是字節碼,它與Java的平台獨立性有何關係?什麼是字節碼,它與Java的平台獨立性有何關係?Apr 27, 2025 am 12:06 AM

BytecodeinJavaistheintermediaterepresentationthatenablesplatformindependence.1)Javacodeiscompiledintobytecodestoredin.classfiles.2)TheJVMinterpretsorcompilesthisbytecodeintomachinecodeatruntime,allowingthesamebytecodetorunonanydevicewithaJVM,thusfulf

為什麼Java被認為是一種獨立於平台的語言?為什麼Java被認為是一種獨立於平台的語言?Apr 27, 2025 am 12:03 AM

javaachievesplatformIndependencEthroughThoJavavIrtualMachine(JVM),wodecutesbytecodeonyanydenanydevicewithajvm.1)javacodeiscompiledintobytecode.2)

圖形用戶界面(GUIS)如何提出Java平台獨立性的挑戰?圖形用戶界面(GUIS)如何提出Java平台獨立性的挑戰?Apr 27, 2025 am 12:02 AM

JavaGUI開發中的平台獨立性面臨挑戰,但可以通過使用Swing、JavaFX,統一外觀,性能優化,第三方庫和跨平台測試來應對。 JavaGUI開發依賴於AWT和Swing,Swing旨在提供跨平台一致性,但實際效果因操作系統不同而異。解決方案包括:1)使用Swing和JavaFX作為GUI工具包;2)通過UIManager.setLookAndFeel()統一外觀;3)優化性能以適應不同平台;4)使用如ApachePivot或SWT的第三方庫;5)進行跨平台測試以確保一致性。

Java開發的哪些方面取決於平台?Java開發的哪些方面取決於平台?Apr 26, 2025 am 12:19 AM

JavadevelovermentIrelyPlatForm-DeTueTososeVeralFactors.1)JVMVariationsAffectPerformanceNandBehaviorAcroSsdifferentos.2)Nativelibrariesviajnijniiniininiinniinindrododerplatefform.3)

在不同平台上運行Java代碼時是否存在性能差異?為什麼?在不同平台上運行Java代碼時是否存在性能差異?為什麼?Apr 26, 2025 am 12:15 AM

Java代碼在不同平台上運行時會有性能差異。 1)JVM的實現和優化策略不同,如OracleJDK和OpenJDK。 2)操作系統的特性,如內存管理和線程調度,也會影響性能。 3)可以通過選擇合適的JVM、調整JVM參數和代碼優化來提升性能。

Java平台獨立性有什麼局限性?Java平台獨立性有什麼局限性?Apr 26, 2025 am 12:10 AM

Java'splatFormentenceHaslimitations不包括PerformanceOverhead,versionCompatibilityIsissues,挑戰WithnativelibraryIntegration,Platform-SpecificFeatures,andjvminstallation/jvminstallation/jvmintenance/jeartenance.therefactorscomplicatorscomplicatethe“ writeOnce”

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),