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

Java中static修飾屬性的解析(程式碼範例)

不言
不言轉載
2018-11-16 15:51:542446瀏覽

這篇文章帶給大家的內容是關於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.com。如有侵權,請聯絡admin@php.cn刪除

相關文章

看更多