溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Java中static修飾屬性的案例

發(fā)布時(shí)間:2020-10-20 15:54:32 來(lái)源:億速云 閱讀:179 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下Java中static修飾屬性的案例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

static 關(guān)鍵字,我們?cè)陂_(kāi)發(fā)用的還是比較多的。在《Java編程思想》有下面一段話(huà)

static 方法就是沒(méi)有 this 的方法。在 static 方法內(nèi)部不能調(diào)用非靜態(tài)方法,反過(guò)來(lái)是可以的。而且可以在沒(méi)有創(chuàng)建任何對(duì)象的前提下,僅僅通過(guò)類(lèi)本身來(lái)調(diào)用 static 方法。這實(shí)際上正是 static 方法的主要用途。

static 的用法比較廣泛:靜態(tài)變量、靜態(tài)成員、靜態(tài)函數(shù)等。我們?cè)谑褂脝瘟心J降臅r(shí)候,就會(huì)用到它。并且 static 數(shù)據(jù)成員存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū),只存儲(chǔ)一次,可以節(jié)省內(nèi)存。

static 聲明屬性

static 修飾成員變量

當(dāng)我們需要在一個(gè)類(lèi)(class)中定義一個(gè)屬性為公共的屬性,就好比說(shuō)我們需要這個(gè)屬性是所有類(lèi)都是共有的,并且這個(gè)屬性的值是同一個(gè)。

Test.java

class Book{
    
    // 設(shè)置一個(gè)默認(rèn)的值
    static String pub = "清華大學(xué)出版社";
    
    // 用來(lái)和 static 作為對(duì)比
    String description = "描述";
    
    // Book 類(lèi)正常的屬性
    private String title;
    private double price;
    
    // Book 的構(gòu)造類(lèi)
    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }
    
    // 獲取 Book 的信息
    public void getInfo(){
        System.out.println("圖書(shū)名稱(chēng):"+ this.title + ",價(jià)格為:"+ this.price + ",出版社為:"+ this.pub + ",描述 "+ this.description);
    }
}

public class Test {

    public static void main(String[] args) {
        // 實(shí)例化三個(gè)Book類(lèi)
        Book book1 = new Book("Android開(kāi)發(fā)實(shí)戰(zhàn)", 69.8);
        Book book2 = new Book("Java EE開(kāi)發(fā)實(shí)戰(zhàn)", 49.8);
        Book book3 = new Book("Java 開(kāi)發(fā)教程", 79.8);
        
        // 在沒(méi)有設(shè)置 pub 屬性的情況下輸出
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
        
        System.out.println("————————————————————無(wú)敵分割線(xiàn)————————————————————");
        
        // 我們給 book1 設(shè)置一個(gè) pub 屬性
        book1.pub = "中信出版社";
        book1.description = "這本書(shū)很牛逼,看了你就知道";
        
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
    }
}

控制臺(tái)輸出

圖書(shū)名稱(chēng):Android開(kāi)發(fā)實(shí)戰(zhàn),價(jià)格為:69.8,出版社為:清華大學(xué)出版社,描述 描述
圖書(shū)名稱(chēng):Java EE開(kāi)發(fā)實(shí)戰(zhàn),價(jià)格為:49.8,出版社為:清華大學(xué)出版社,描述 描述
圖書(shū)名稱(chēng):Java 開(kāi)發(fā)教程,價(jià)格為:79.8,出版社為:清華大學(xué)出版社,描述 描述
————————————————————無(wú)敵分割線(xiàn)————————————————————
圖書(shū)名稱(chēng):Android開(kāi)發(fā)實(shí)戰(zhàn),價(jià)格為:69.8,出版社為:中信出版社,描述 這本書(shū)很牛逼,看了你就知道
圖書(shū)名稱(chēng):Java EE開(kāi)發(fā)實(shí)戰(zhàn),價(jià)格為:49.8,出版社為:中信出版社,描述 描述
圖書(shū)名稱(chēng):Java 開(kāi)發(fā)教程,價(jià)格為:79.8,出版社為:中信出版社,描述 描述

從控制臺(tái)輸出的結(jié)果,可以看到:

  • 如果給 屬性 賦默認(rèn)值,在上面的例子中是(description 和 pub),輸出的結(jié)果為都是默認(rèn)的。

  • 當(dāng)我們修改了類(lèi)中 static 關(guān)鍵字聲明的屬性,那么只要修改了一次,那么其他所有的對(duì)象的這個(gè)屬性都配修改了。

通過(guò)類(lèi)調(diào)用 static 聲明的屬性

但是基于上面的代碼,我們發(fā)現(xiàn)如果是其中的一個(gè)類(lèi)對(duì)象就改變了所有的對(duì)象的屬性,這樣子操作是不是感覺(jué)不是特別好?然后在Java中,如果是使用 static 聲明的屬性值,是可以直接通過(guò)類(lèi)調(diào)用的。

public class Test {

    public static void main(String[] args) {
        // 實(shí)例化三個(gè)Book類(lèi)
        Book book1 = new Book("Android開(kāi)發(fā)實(shí)戰(zhàn)", 69.8);
        Book book2 = new Book("Java EE開(kāi)發(fā)實(shí)戰(zhàn)", 49.8);
        Book book3 = new Book("Java 開(kāi)發(fā)教程", 79.8);
        
        // 在沒(méi)有設(shè)置 pub 屬性的情況下輸出
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
        
        System.out.println("————————————————————無(wú)敵分割線(xiàn)————————————————————");
        
        // 我們使用 Book 類(lèi)直接調(diào)用pub
        Book.pub = "中信出版社";
        
        book1.description = "這本書(shū)很牛逼,看了你就知道";
        
        book1.getInfo();
        book2.getInfo();
        book3.getInfo();
    }
}

沒(méi)有實(shí)例化類(lèi)時(shí),調(diào)用 static 屬性

Test.java

class Book{
    
    // 設(shè)置一個(gè)默認(rèn)的值
    static String pub = "清華大學(xué)出版社";
    
    // 用來(lái)和 static 作為對(duì)比
    String description = "描述";
    
    // Book 類(lèi)正常的屬性
    private String title;
    private double price;
    
    // Book 的構(gòu)造類(lèi)
    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }
    
    // 獲取 Book 的信息
    public void getInfo(){
        System.out.println("圖書(shū)名稱(chēng):"+ this.title + ",價(jià)格為:"+ this.price + ",出版社為:"+ this.pub + ",描述 "+ this.description);
    }
}

public class Test {

    public static void main(String[] args) {
        // 在沒(méi)有實(shí)例化對(duì)象時(shí),就調(diào)用
        System.out.println(Book.pub);
        
        // 沒(méi)事實(shí)例化對(duì)象的時(shí)候,去給static屬性賦值上默認(rèn)值
        Book.pub = "北京大學(xué)出版社";
        System.out.println(Book.pub);
        
        // 新建一個(gè)類(lèi),輸入 pub 屬性
        Book book = new Book("Java", 88);
        book.getInfo();
    }
}

控制臺(tái)輸出

清華大學(xué)出版社
北京大學(xué)出版社
圖書(shū)名稱(chēng):Java,價(jià)格為:88.0,出版社為:北京大學(xué)出版社,描述 描述

由此,我們看出,在沒(méi)有實(shí)例化對(duì)象的時(shí)候,就可以直接通過(guò)類(lèi)去掉用 static屬性,并且還可以修改 static 的屬性。static 屬性聲明雖然是在類(lèi)的結(jié)構(gòu)中,但是并不受到對(duì)象的控制,是獨(dú)立存在的。

static 屬性與非 static 屬性的區(qū)別

  • static 聲明的屬性和普通屬性(非 static 屬性)最大的區(qū)別在于保存的內(nèi)存區(qū)域不同。static 所修飾的在靜態(tài)數(shù)據(jù)區(qū)。而不是在堆和棧。

  • static 屬性與非 static 屬性還有一個(gè)最大的區(qū)別,就是在于所有非 static 屬性必須產(chǎn)生實(shí)例化之后才可以訪(fǎng)問(wèn),但是static 屬性不受實(shí)例化對(duì)象的控制。也就是說(shuō),在沒(méi)有產(chǎn)生實(shí)例化對(duì)象的情況下,依然可以使用 static 對(duì)象。

以上是Java中static修飾屬性的案例的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI