日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解java中的static關鍵字

瀏覽:151日期:2022-08-30 17:18:08

Java中的static關鍵字可以用于修飾變量、方法、代碼塊和類,還可以與import關鍵字聯合使用,使用的方式不同賦予了static關鍵字不同的作用,且在開發中使用廣泛,這里做一下深入了解。

靜態資源(靜態變量與靜態方法)

被static關鍵字修飾的變量和方法統一屬于類的靜態資源,是類實例之間共享的。被static關鍵字修飾的變量、方法屬于類變量、類方法,可以通過【類名.變量名】、【類名.方法名】直接引用,而不需要派生一個類實例出來。

靜態資源分類存放的好處

JDK把不同的靜態資源放在了不同的類中而不是把所有的靜態資源放在一個類里面,這樣做主要有3點好處:

1.不同的類有自己的靜態資源,就可以實現靜態資源分類。比如,和數學相關的靜態資源就放在了java.lang.Math中,和日歷相關的靜態資源就放在java.util.Calendar中,將組織形式固定為【類>靜態資源】,使得代碼的邏輯結構變得清晰。

2.因為靜態資源的組織形式固定為了【類>靜態資源】的形式,也就有效避免的靜態資源在全局重名的問題。比如在A類中有一個name屬性,B類中也有一個name屬性,如果放在一起會重復,但是分類放開則不會重復了,因為實際上這兩個屬性的全名是A.name和B.name。

3.分類有助于避免因為靜態資源都放在一個類中導致該類體積過大的問題,方便了管理與協同維護。

靜態資源容易混淆的三個點

靜態資源的知識點比較簡單,但是還是有三點比較容易混淆:靜態方法能不能引用非靜態資源?靜態方法能不能引用靜態資源?非靜態方法能不能引用靜態資源?要弄明白這三個問題,就要先了解靜態資源在JVM中的加載機制。

實際上,雖然說靜態資源是屬于類的,但在JVM中卻是獨立于類的存在。因為從JVM類加載機制的角度來講,靜態資源是類初始化的時候加載的,而非靜態資源則是派生類的時候才加載的。類的初始化早于類的派生(new)。比如,在Class.forName('xxx')方法中,就是初始化了一個類,但是并不是派生出一個實例,而只是加載了這個類中的靜態資源。因此對于一個靜態資源來說,它是不可能知道一個類中有哪些非靜態資源的。但是對于非靜態資源來說就不一樣了,由于它是派生實例之后才產生的,因此屬于類的這些東西它都能識別得到。至此,上面三個問題的答案已經呼之欲出了:

1.靜態方法能不能引用非靜態資源?答案是不能,非靜態資源是派生實例之后才產生的,對于在初始化階段就存在的靜態資源來說,根本識別不到。

2.靜態方法能不能引用靜態資源?答案是可以,因為靜態資源都是在類初始化的時候一同加載的,自然都能互相識別得到。

3.非靜態方法能不能引用靜態資源?答案是可以,因為非靜態方法就是實例方法,在派生類實例之后產生,而靜態資源已經在類初始化的時候已經存在了,自然能在引用靜態資源的時候成功識別。

靜態塊

靜態塊也是static關鍵字的重要應用之一,作用是初始化一個類的時候做特定的操作。和靜態變量、靜態方法同樣,靜態塊里面的代碼只會執行一次,且只在初始化類的時候執行。靜態塊同樣很簡單,只有三個小細節要特別提及:

靜態資源的加載順序是嚴格按照靜態資源的定義順序來加載的。

public class A{ private static int a = B(); static { System.out.println('進入A類的靜態塊'); } public static void main(String[] args) { new A(); } public static int B() { System.out.println('進入A類靜態變量a.B()靜態方法中'); return 1; }}

在這里,因為靜態變量a的定義順序在靜態塊之前,因此在a先被初始化的時候靜態方法B先于靜態塊被調用執行,打印的結果是:

進入A類靜態變量a.B()靜態方法中進入A類的靜態塊

靜態代碼塊對于定義在它之后的靜態變量,可以賦值,但是不能訪問。

public class A{ static { c = 3; System.out.println(c); } private static int c;}

上面這段代碼會在第6行報錯:Cannot reference a field before it is defined。這個特性理解起來可能比較奇怪,個人的理解是給靜態方法賦值并不是實時的,Java遇到賦值語句的時候會先將這些個賦值語句緩存起來,等所有靜態資源都識別完成之后再統一進行賦值。

靜態代碼塊是嚴格按照父類靜態代碼塊->子類靜態代碼塊的順序加載的,且只加載一次。

public class A{ static { System.out.println('A類的靜態代碼塊'); } public A() { System.out.println('A類的構造器'); }}

public class B extends A{ static { System.out.println('B類的靜態代碼塊'); } public B() { System.out.println('B類的構造器'); } public static void main(String[] args) { new B(); new B(); }}

上面代碼的結果是:

A類的靜態代碼塊B類的靜態代碼塊A類的構造器B類的構造器A類的構造器B類的構造器

靜態內部類

一般情況下,static是關鍵字是不能用于修飾類的,只有在該類是內部類的情況下才能使用static修飾,且只能修飾一個,這樣的內部類被稱為靜態內部類(匿名內部類)。靜態內部類只有在一些特殊的場景中才能用得上,比如像線程池ThreadPoolExecutor中的四種拒絕機制CallerRunsPolicy、AbortPolicy、DiscardPolicy、DiscardOldestPolicy就是靜態內部類。

與import關鍵字聯合使用

import static是JDK1.5之后的新特性,這兩個關鍵字聯合使用可以指定導入某個類中的指定靜態資源,并且不需要使用類名.資源名,可以直接使用資源名。

import static java.lang.Math.*;public class A{ public static void main(String[] args) { System.out.println(sin(2.2)); }}

這么寫意味著導入了java.lang.Math包下的所有靜態資源,因此在main函數里就可以直接使用sin(2,2)而不需要使用Math.sin(2,2)了。另外使用這種語法要特別注意的是,這里要寫import static java.lang.Math.*,最后的【.*】不可少,有了這兩個字符才意味著導入的是Math下的所有靜態資源,寫成import static java.lang.Math是有問題的。當然,我們也可以指定只導入某個靜態資源,比如只導入Math下sin這個方法而不導入Math下的所有靜態資源。

import static java.lang.Math.sin;public class A{ public static void main(String[] args) { System.out.println(sin(2.2)); }}

使用import static這樣的語法可以有效簡化一些操作,比如在頻繁使用Math類下靜態資源的地方可以少寫很多【Math.】,但是這樣卻降低了代碼的可讀性,因為這樣就模糊了該靜態資源的來源,弱化了分類的概念。

以上就是詳解java中的static關鍵字的詳細內容,更多關于java static關鍵字的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产日产精品_国产精品毛片 | 日本久久综合| 美女久久精品| 精品中文字幕一区二区三区 | 亚洲精品免费观看| 日韩va亚洲va欧美va久久| 青青草伊人久久| 麻豆视频久久| 久久久久久黄| 免费看日韩精品| 69精品国产久热在线观看| 卡一卡二国产精品| 婷婷激情久久| 亚洲一二av| 欧美精品二区| 日韩在线视频精品| 亚洲深夜影院| 国产精品视频一区视频二区| 欧美国产亚洲精品| 久久一区二区中文字幕| 日韩在线a电影| 久久精品伊人| 欧美日韩精品免费观看视频完整| 日韩综合一区二区| 成人午夜在线| 首页国产欧美日韩丝袜| 国产精品黄色| 午夜影院欧美| 国产精品调教| 蜜桃视频欧美| 久久国产尿小便嘘嘘| 国产精品精品| 蜜臀久久99精品久久久久久9| 国产欧美日韩影院| 91看片一区| 日韩高清一区在线| 国产综合色区在线观看| 色狠狠一区二区三区| 国产一二在线播放| 日本a口亚洲| 亚洲精品国产偷自在线观看| 免费精品一区| 视频一区中文字幕国产| 91欧美国产| 日韩精品免费一区二区夜夜嗨| 日本蜜桃在线观看视频| 国产精品视频一区二区三区综合| 黑丝一区二区三区| 精品久久电影| 日韩欧美高清一区二区三区| 国产伊人精品| 久久亚洲风情| 久久久久一区| 美女久久精品| 日本亚州欧洲精品不卡| 欧美理论视频| 正在播放日韩精品| 免费观看亚洲天堂| 日本精品久久| 亚洲欧美日韩一区在线观看| 电影91久久久| 国产精品日本一区二区不卡视频 | 国产一区亚洲| 成人国产精品一区二区网站| 日韩av一级片| 伊人精品久久| 亚洲深夜影院| 欧美日韩国产传媒| 91精品国产自产在线观看永久∴| 久久一区国产| 国产精品久av福利在线观看| 欧美一区成人| 日韩av二区在线播放| 欧美午夜网站| 日韩高清在线不卡| 深夜日韩欧美| 亚洲天堂日韩在线| 亚洲一区二区免费看| 欧美日一区二区| 99精品在线免费在线观看| av在线最新| 黑人精品一区| 青青青免费在线视频| 视频在线不卡免费观看| 久久精品三级| 精品久久亚洲| 午夜久久中文| 少妇久久久久| 久久一区二区三区电影| 欧美日中文字幕| 亚洲国产一区二区在线观看 | 亚洲一区二区三区高清不卡| 午夜日韩av| 视频一区视频二区在线观看| 日韩中文字幕麻豆| 在线国产日韩| 日韩福利视频导航| 国产欧美啪啪| 久久狠狠亚洲综合| 国产精品jk白丝蜜臀av小说| 国产精品videossex久久发布| 久久99精品久久久野外观看| 免费在线成人| 色综合五月天| 久久久久99| 亚洲免费网址| 日韩欧美中文字幕在线视频| 国产精品黄网站| 久久青青视频| 欧美a级一区| 人人精品人人爱| 日本成人在线一区| 亚洲另类av| 国产精品亚洲综合色区韩国| 国产精品地址| 日韩精品1区| 婷婷成人基地| 中文字幕日韩高清在线| 91精品啪在线观看国产爱臀| 国产精品香蕉| 999久久久亚洲| 免费看日韩精品| 久久香蕉网站| 国精品一区二区| 亚洲精品大片| 国产精品蜜芽在线观看| 欧美另类专区| 国产精品片aa在线观看| 日韩欧美不卡| 日韩午夜免费| 国产欧美日韩精品高清二区综合区 | 日本久久一区| 成人在线观看免费视频| 欧美日韩国产传媒| 国产日产高清欧美一区二区三区| 日韩免费av| 亚洲精品一二三**| 色乱码一区二区三区网站| 国产精品丝袜xxxxxxx| 日韩1区2区日韩1区2区| 女生影院久久| 日韩中文字幕无砖| 亲子伦视频一区二区三区| 天堂俺去俺来也www久久婷婷| 国内精品麻豆美女在线播放视频| 999精品在线| 国产精品高潮呻吟久久久久| 欧美日韩精品一本二本三本| 国产免费播放一区二区| 亚洲国产成人精品女人| 美女视频一区在线观看| 亚洲专区一区| www.51av欧美视频| 91精品一区| 蜜桃国内精品久久久久软件9| 国产免费av一区二区三区| 99xxxx成人网| 亚洲欧洲高清| 欧美日韩一区二区三区不卡视频| 一区二区三区四区在线看| 美日韩一区二区三区| 少妇精品在线| 自拍日韩欧美| 女生影院久久| 国产精品久久久久久久久久久久久久久 | 综合一区二区三区| 肉色欧美久久久久久久免费看 | 亚洲专区欧美专区| 色爱综合网欧美| 欧美日本久久| 亚洲人成精品久久久| 久久精品国产www456c0m| 国产精品v日韩精品v欧美精品网站| 午夜一级在线看亚洲| 亚洲va中文在线播放免费| 国产美女亚洲精品7777| 天堂成人国产精品一区| 婷婷激情久久| 日韩啪啪电影网| 久久久久久亚洲精品美女| 日本午夜精品一区二区三区电影 | 国产美女久久| 美女网站久久| 精品一区欧美| 蜜桃精品在线| 高清久久精品| 精品中文字幕一区二区三区四区| 日韩欧美三区| 亚洲免费观看高清完整版在线观| 欧美午夜不卡影院在线观看完整版免费| 国产成人黄色| 精品一区二区三区视频在线播放| 久久狠狠久久| 国产亚洲字幕| 欧美在线看片| 国产欧美一区二区三区精品观看| 日本久久一区| 日韩欧美久久| 亚洲精品乱码久久久久久蜜桃麻豆| 合欧美一区二区三区|