摘要:屬性聲明雖然是在類的結(jié)構(gòu)中,但是并不受到對(duì)象的控制,是獨(dú)立存在的。所修飾的在靜態(tài)數(shù)據(jù)區(qū)。也就是說,在沒有產(chǎn)生實(shí)例化對(duì)象的情況下,依然可以使用對(duì)象。
static 關(guān)鍵字,我們?cè)陂_發(fā)用的還是比較多的。在《Java編程思想》有下面一段話
static 方法就是沒有 this 的方法。在 static 方法內(nèi)部不能調(diào)用非靜態(tài)方法,反過來是可以的。而且可以在沒有創(chuàng)建任何對(duì)象的前提下,僅僅通過類本身來調(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è)類(class)中定義一個(gè)屬性為公共的屬性,就好比說我們需要這個(gè)屬性是所有類都是共有的,并且這個(gè)屬性的值是同一個(gè)。
Test.java
class Book{ // 設(shè)置一個(gè)默認(rèn)的值 static String pub = "清華大學(xué)出版社"; // 用來和 static 作為對(duì)比 String description = "描述"; // Book 類正常的屬性 private String title; private double price; // Book 的構(gòu)造類 public Book(String title, double price) { this.title = title; this.price = price; } // 獲取 Book 的信息 public void getInfo(){ System.out.println("圖書名稱:"+ this.title + ",價(jià)格為:"+ this.price + ",出版社為:"+ this.pub + ",描述 "+ this.description); } } public class Test { public static void main(String[] args) { // 實(shí)例化三個(gè)Book類 Book book1 = new Book("Android開發(fā)實(shí)戰(zhàn)", 69.8); Book book2 = new Book("Java EE開發(fā)實(shí)戰(zhàn)", 49.8); Book book3 = new Book("Java 開發(fā)教程", 79.8); // 在沒有設(shè)置 pub 屬性的情況下輸出 book1.getInfo(); book2.getInfo(); book3.getInfo(); System.out.println("————————————————————無敵分割線————————————————————"); // 我們給 book1 設(shè)置一個(gè) pub 屬性 book1.pub = "中信出版社"; book1.description = "這本書很牛逼,看了你就知道"; book1.getInfo(); book2.getInfo(); book3.getInfo(); } }
控制臺(tái)輸出
圖書名稱:Android開發(fā)實(shí)戰(zhàn),價(jià)格為:69.8,出版社為:清華大學(xué)出版社,描述 描述 圖書名稱:Java EE開發(fā)實(shí)戰(zhàn),價(jià)格為:49.8,出版社為:清華大學(xué)出版社,描述 描述 圖書名稱:Java 開發(fā)教程,價(jià)格為:79.8,出版社為:清華大學(xué)出版社,描述 描述 ————————————————————無敵分割線———————————————————— 圖書名稱:Android開發(fā)實(shí)戰(zhàn),價(jià)格為:69.8,出版社為:中信出版社,描述 這本書很牛逼,看了你就知道 圖書名稱:Java EE開發(fā)實(shí)戰(zhàn),價(jià)格為:49.8,出版社為:中信出版社,描述 描述 圖書名稱:Java 開發(fā)教程,價(jià)格為:79.8,出版社為:中信出版社,描述 描述
從控制臺(tái)輸出的結(jié)果,可以看到:
如果給 屬性 賦默認(rèn)值,在上面的例子中是(description 和 pub),輸出的結(jié)果為都是默認(rèn)的。
當(dāng)我們修改了類中 static 關(guān)鍵字聲明的屬性,那么只要修改了一次,那么其他所有的對(duì)象的這個(gè)屬性都配修改了。
通過類調(diào)用 static 聲明的屬性但是基于上面的代碼,我們發(fā)現(xiàn)如果是其中的一個(gè)類對(duì)象就改變了所有的對(duì)象的屬性,這樣子操作是不是感覺不是特別好?然后在Java中,如果是使用 static 聲明的屬性值,是可以直接通過類調(diào)用的。
public class Test { public static void main(String[] args) { // 實(shí)例化三個(gè)Book類 Book book1 = new Book("Android開發(fā)實(shí)戰(zhàn)", 69.8); Book book2 = new Book("Java EE開發(fā)實(shí)戰(zhàn)", 49.8); Book book3 = new Book("Java 開發(fā)教程", 79.8); // 在沒有設(shè)置 pub 屬性的情況下輸出 book1.getInfo(); book2.getInfo(); book3.getInfo(); System.out.println("————————————————————無敵分割線————————————————————"); // 我們使用 Book 類直接調(diào)用pub Book.pub = "中信出版社"; book1.description = "這本書很牛逼,看了你就知道"; book1.getInfo(); book2.getInfo(); book3.getInfo(); } }沒有實(shí)例化類時(shí),調(diào)用 static 屬性
Test.java
class Book{ // 設(shè)置一個(gè)默認(rèn)的值 static String pub = "清華大學(xué)出版社"; // 用來和 static 作為對(duì)比 String description = "描述"; // Book 類正常的屬性 private String title; private double price; // Book 的構(gòu)造類 public Book(String title, double price) { this.title = title; this.price = price; } // 獲取 Book 的信息 public void getInfo(){ System.out.println("圖書名稱:"+ this.title + ",價(jià)格為:"+ this.price + ",出版社為:"+ this.pub + ",描述 "+ this.description); } } public class Test { public static void main(String[] args) { // 在沒有實(shí)例化對(duì)象時(shí),就調(diào)用 System.out.println(Book.pub); // 沒事實(shí)例化對(duì)象的時(shí)候,去給static屬性賦值上默認(rèn)值 Book.pub = "北京大學(xué)出版社"; System.out.println(Book.pub); // 新建一個(gè)類,輸入 pub 屬性 Book book = new Book("Java", 88); book.getInfo(); } }
控制臺(tái)輸出
清華大學(xué)出版社 北京大學(xué)出版社 圖書名稱:Java,價(jià)格為:88.0,出版社為:北京大學(xué)出版社,描述 描述
由此,我們看出,在沒有實(shí)例化對(duì)象的時(shí)候,就可以直接通過類去掉用 static屬性,并且還可以修改 static 的屬性。static 屬性聲明雖然是在類的結(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í)例化之后才可以訪問,但是static 屬性不受實(shí)例化對(duì)象的控制。也就是說,在沒有產(chǎn)生實(shí)例化對(duì)象的情況下,依然可以使用 static 對(duì)象。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72175.html
摘要:前面一篇已經(jīng)介紹了部分關(guān)于的用法,主要是介紹的是修飾變量的一些知識(shí)?,F(xiàn)在的這篇介紹下修飾方法。方法調(diào)用非方法或者屬性錯(cuò)誤的調(diào)用以下的操作都在下面進(jìn)行的。只能調(diào)用屬性或者方法。所有的定于的結(jié)構(gòu)不受實(shí)例化對(duì)象的控制。 前面一篇已經(jīng)介紹了部分關(guān)于 static 的用法,主要是介紹的是 static 修飾變量的一些知識(shí)?,F(xiàn)在的這篇介紹下 static 修飾方法。 static 修飾方法 沒有實(shí)...
摘要:通過修飾以后,可以表示其修飾的類方法和變量不可改變。如果不希望子類重寫父類的某個(gè)方法,那就使用關(guān)鍵字。在一些時(shí)候由于父類中的某些方法具備某些隱藏的特性,那么并且子類必須使用此方法操作的時(shí)候,就加上關(guān)鍵字。 簡(jiǎn)介 在 Java 中我們把 final 稱為終結(jié)器,在 Java 中可以使用 final 定義類、方法、屬性。通過 final 修飾以后,可以表示其修飾的類、方法和變量不可改變。 ...
摘要:注解提供了一種安全的類似注釋的機(jī)制,用來將任何的信息或元數(shù)據(jù)與程序元素類方法成員變量等進(jìn)行關(guān)聯(lián)。為程序的元素類方法成員變量加上更直觀更明了的說明,這些說明與程序的業(yè)務(wù)邏輯無關(guān),并且提供給指定的工具或框架使用。 什么是注解? Annotation 是 Java5 之后開始引入的新特性,中文為注解。注解提供了一種安全的類似注釋的機(jī)制,用來將任何的信息或元數(shù)據(jù)(metadata)與程序元素(...
摘要:前半句是指線程內(nèi)表現(xiàn)為串行的語(yǔ)義,后半句是指指令重排序現(xiàn)象和工作內(nèi)存和主內(nèi)存同步延遲現(xiàn)象。關(guān)于內(nèi)存模型的講解請(qǐng)參考死磕同步系列之。目前國(guó)內(nèi)市面上的關(guān)于內(nèi)存屏障的講解基本不會(huì)超過這三篇文章,包括相關(guān)書籍中的介紹。問題 (1)volatile是如何保證可見性的? (2)volatile是如何禁止重排序的? (3)volatile的實(shí)現(xiàn)原理? (4)volatile的缺陷? 簡(jiǎn)介 volatile...
摘要:前半句是指線程內(nèi)表現(xiàn)為串行的語(yǔ)義,后半句是指指令重排序現(xiàn)象和工作內(nèi)存和主內(nèi)存同步延遲現(xiàn)象。關(guān)于內(nèi)存模型的講解請(qǐng)參考死磕同步系列之。目前國(guó)內(nèi)市面上的關(guān)于內(nèi)存屏障的講解基本不會(huì)超過這三篇文章,包括相關(guān)書籍中的介紹。問題 (1)volatile是如何保證可見性的? (2)volatile是如何禁止重排序的? (3)volatile的實(shí)現(xiàn)原理? (4)volatile的缺陷? 簡(jiǎn)介 volatile...
閱讀 1489·2021-10-14 09:43
閱讀 1454·2021-10-09 09:58
閱讀 1947·2021-09-28 09:42
閱讀 3738·2021-09-26 09:55
閱讀 1768·2021-08-27 16:23
閱讀 2769·2021-08-23 09:46
閱讀 917·2019-08-30 15:55
閱讀 1441·2019-08-30 15:54