關鍵字static

原文出處:http://cmsblogs.com/?『chenssy』


一、 static代表著什么

在Java中并不存在全局變量的概念,但是我們可以通過static來實現一個“偽全局”的概念,在Java中static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,當然也可以修飾代碼塊。

Java把內存分為棧內存和堆內存,其中棧內存用來存放一些基本類型的變量、數組和對象的引用,堆內存主要存放一些對象。在JVM加載一個類的時候,若該類存在static修飾的成員變量和成員方法,則會為這些成員變量和成員方法在固定的位置開辟一個固定大小的內存區域,有了這些“固定”的特性,那么JVM就可以非常方便地訪問他們。同時如果靜態的成員變量和成員方法不出作用域的話,它們的句柄都會保持不變。同時static所蘊含“靜態”的概念表示著它是不可恢復的,即在那個地方,你修改了,他是不會變回原樣的,你清理了,他就不會回來了。

同時被static修飾的成員變量和成員方法是獨立于該類的,它不依賴于某個特定的實例變量,也就是說它被該類的所有實例共享。所有實例的引用都指向同一個地方,任何一個實例對其的修改都會導致其他實例的變化。

public class User { private static int userNumber = 0 ; public User(){ userNumber ++; } public static void main(String[] args) { User user1 = new User(); User user2 = new User(); System.out.println("user1 userNumber:" + User.userNumber); System.out.println("user2 userNumber:" + User.userNumber); } } ------------ Output: user1 userNumber2 user2 userNumber2

二、 怎么使用static

static可以用于修飾成員變量和成員方法,我們將其稱之為靜態變量和靜態方法,直接通過類名來進行訪問。

ClassName.propertyName

ClassName.methodName(……)

Static修飾的代碼塊表示靜態代碼塊,當JVM裝載類的時候,就會執行這塊代碼,其用處非常大。(對于代碼塊的使用這幾天介紹,敬請關注)

2.1、static變量

static修飾的變量我們稱之為靜態變量,沒有用static修飾的變量稱之為實例變量,他們兩者的區別是:

靜態變量是隨著類加載時被完成初始化的,它在內存中僅有一個,且JVM也只會為它分配一次內存,同時類所有的實例都共享靜態變量,可以直接通過類名來訪問它。

但是實例變量則不同,它是伴隨著實例的,每創建一個實例就會產生一個實例變量,它與該實例同生共死。

所以我們一般在這兩種情況下使用靜態變量:對象之間共享數據、訪問方便。

2.2、static方法

static修飾的方法我們稱之為靜態方法,我們通過類名對其進行直接調用。由于他在類加載的時候就存在了,它不依賴于任何實例,所以static方法必須實現,也就是說他不能是抽象方法abstract。

Static方法是類中的一種特殊方法,我們只有在真正需要他們的時候才會將方法聲明為static。如Math類的所有方法都是靜態static的。

2.3、static代碼塊

被static修飾的代碼塊,我們稱之為靜態代碼塊,靜態代碼塊會隨著類的加載一塊執行,而且他可以隨意放,可以存在于該了的任何地方。

三、 Static的局限

Static確實是存在諸多的作用,但是它也存在一些缺陷。

  • 1、它只能調用static變量。
  • 2、它只能調用static方法。
  • 3、不能以任何形式引用this、super。
  • 4、static變量在定義時必須要進行初始化,且初始化時間要早于非靜態變量。

總結:無論是變量,方法,還是代碼塊,只要用static修飾,就是在類被加載時就已經”準備好了”,也就是可以被使用或者已經被執行,都可以脫離對象而執行。反之,如果沒有static,則必須要依賴于對象實例。

轉載于:https://www.cnblogs.com/justBobo/p/10744714.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251889.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251889.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251889.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[IoC容器Unity]第三回:依賴注入

上節介紹了,Unity的Lifetime Managers生命周期,Unity具體實現依賴注入包含構造函數注入、屬性注入、方法注入,所謂注入相當賦值,下面一個一個來介紹。 2.構造函數注入 Unity利用Resolve方法解析一個對象,都是調用注冊類…

Apache CarbonData 1.5.0編譯及安裝

2019獨角獸企業重金招聘Python工程師標準>>> 一、編譯環境描述 OpenStack創建五個虛擬機,其中1個主節點(hostname為bigdatamaster),4個從節點(hostname分別為,bigdataslave1、bigdataslave2、bi…

JS控制網頁全屏

在谷歌,IE等瀏覽器中,點擊F11按鍵會進入網頁全屏模式,如同看電影的劇場模式,這個在代碼中可以通過JS來實現,簡單說下在實現這個需求后的個人總結: 底層網頁是已經加載完畢的,這時我們需要的全屏…

HDU 3966-Aragorn's Story 樹鏈剖分+樹狀數組

題目鏈接 題意:有一棵樹,每個節點有權值 有三種操作: I c1 c2 k 從節點c1到節點c2的路徑上每個節點權值增加kD c1 c2 k 從節點c1到節點c2的路徑上每個節點權值減少kQ i 查詢節點i的權值是多少思路: 樹鏈剖分處理出來的鏈放在數組中…

Filter介紹

Filter 可認為是 Servlet的一種 “ 加強版 ”,它主要用于對用戶請求進行預處理, 也可以對HttpServletResponse 進行后處理,是個典型的處理鏈。Filter 也可對用戶請求生成響應,這一 點與Servlet 相同, 但實際上很少會使…

LeetCode算法題-Jewels and Stones(Java實現)

這是悅樂書的第313次更新,第334篇原創 01 看題和準備 今天介紹的是LeetCode算法題中Easy級別的第182題(順位題號是771)。字符串J代表珠寶,S代表你擁有的石頭。S中的每個字符都是你擁有的一種石頭。計算S中有多少石頭也是珠寶。J中…

python --- 二分查找算法

二分查找法:在我的理解中這個查找方法為什么會叫二分呢,我認為是將要查詢的一個列表分成了兩份,然后在利用某個值來進行比較,在一個不斷循環的過程中來找出我們要找的某一個值。 廢話不多說,先上代碼: 1 de…

面試題

1. block 的作用由來,跟delegate的區別。 2. swift 的枚舉。 3. iOS保存一個對象。轉載于:https://www.cnblogs.com/studyNT/p/7499779.html

ssm框架下文件上傳

springmvc實現文件上傳的步驟: 1.頁面上,通過input來準備file組件,該標簽,必須給定name屬性值 同時,要求form表單必須給定一個屬性:enctype"multipart/form-data" 2.在pom.xml文件中,…

MySQL via EF6 的試用報告

MySQL via EF6 的試用報告1、如何通過 EF6 來連接 MySQL?2、如何通過 EF6 來實現 CRUD?2.1、Create 添加2.2、Retrieve 查詢2.3、Update 修改2.4、Delete 刪除3、如何更好的運用 EF6 來完成工作?3.1、傳說中 EF 的三種模式3.2、EF6 執行原生 …

Java暑假作業

一.《大護法》觀影有感 ... 從預告開始就期待著這部影片,在看過一遍后又忍不住二刷,影片觀看至第二遍后,對于全片的脈絡也更清晰了一點,雖然打著暴力美學的旗子,但《大護法》偏偏更文藝一些。文藝片是沒有對錯的&a…

使用EasyNetQ組件操作RabbitMQ消息隊列服務

RabbitMQ是一個由erlang開發的AMQP(Advanved Message Queue)的開源實現,是實現消息隊列應用的一個中間件,消息隊列中間件是分布式系統中重要的組件,主要解決應用耦合,異步消息,流量削鋒等問題。實現高性能,…

context-param和init-param的區別

http://www.cnblogs.com/hzj-/articles/1689836.html 轉載于:https://www.cnblogs.com/wangc04/p/7501054.html

TensorFlow 1.12.2 發布,修復 GIF 構造安全漏洞

開發四年只會寫業務代碼,分布式高并發都不會還做程序員? TensorFlow 1.12.2 發布了,此處本修復了一個潛在的安全漏洞: 精心設計的 GIF 圖像可以在解碼過程中產生空指針解引用更新說明: https://github.com/tensorflo…

【教程】如何在標簽打印工具TFORMer Designer中自定義布局?

TEC-IT的在線標簽生成器TFORMer Designer提供標簽打印服務,并提供即用型行業標簽模板作為Web服務。使用此軟件,您可以在幾秒鐘內創建您自己的標簽和表格或在工業和物流業中使用即時可用的模板。TFORMer Designer的最新更新現在允許使用自定義標簽布局。 …

對象變為指定格式的數組

拿到的對象的格式(一個對象里面都好多屬性) 想要轉換成的數據格式(一個數組里面有好多個對象,每個對象有一個id和name的屬性) 如何處理的 selectionChange(val) { // 列表選擇var dynamicTags1 [];var arr[]for(var i…

bootstrapValidator remote 驗證問題

1 加載jQuery和bootstrap.min.js 后引入bootstrapValidator.min.js字段驗證之remote 遠程驗證(類似ajax驗證),返回值必須是 {"valid":true}{"valid":false} true表示 驗證通過 false 表示驗證不通過。 當添加remote 驗證后,驗證通過…

世界頂級的程序員們告訴你:這些書都是你應該讀的

在很早之前就想整理一份來自經驗豐富的頂級程序員推薦閱讀的書籍清單,全棧工程師Dmitry Shvetsov整理了Bob叔以及Jeff Atwood and DHH等世界知名程序員曾經在博客中推薦過的書單,下面我們就一起來看看深受大神們青睞的書籍都是哪些?世界頂級的程序員們告…

《20170911-構建之法:現代軟件工程-閱讀筆記》

第一章: 介紹軟件工程和軟件的關系,軟件程序軟件工程。 軟件工程是把系統的、有序的、可量化的方法應用到軟件的開發、運營和維護上的過程。 計算機科學這一學術領域可以分為以下這些偏理論的領域: 1.計算機理論 2.信息和編碼理論 3.算法和數…

mysql學習(2)索引的本質

2019獨角獸企業重金招聘Python工程師標準>>> 問題:SQL查詢慢怎么辦? 優化手段,加索引。 索引是幫助MYSQL高效的獲取數據的排好序的數據結構。 問題:索引結構為什么使用Btree而不使用二叉樹,紅黑樹或者HASH結…