一、static關鍵字
? ? ? ? static在java中表示靜態(tài)的意思桥嗤。
? ? ? ? 1须妻、為什么使用static靜態(tài)關鍵字?
? ? ? ? ????如果將一個常用固定值字段定義為非靜態(tài)對象字段泛领,則如果創(chuàng)建了100個對象荒吏,就會有100個對象實例,也會有100個該字段的實例字段渊鞋,分別對應每一個對象绰更。但如果將其定義為靜態(tài)對象字段,則每個類只會有一個這樣的字段锡宋,意味著會節(jié)省很多不必要開支的內(nèi)存空間儡湾。
? ? ? ? ????靜態(tài)字段歸屬于類,意味著沒有創(chuàng)建該類的對象执俩,也可以通過該類名獲取到該字段的值徐钠,十分方便。
? ? ? ? ????同理奠滑,static關鍵字修飾的方法丹皱,也可以被共享,被稱為靜態(tài)方法宋税,也可以通過類名訪問到摊崭。
? ? ? ?? ???聲明格式:
? ? ? ? ????靜態(tài)字段? static 類型 字段名;? 訪問:類名.靜態(tài)字段名
? ? ? ????? 靜態(tài)方法? ?【訪問權限修飾符】 static 方法返回值 方法名(參數(shù)名)??訪問:類名.靜態(tài)方法名
? ? ? ? ????靜態(tài)代碼塊? ??
????????????????????????????static {
? ? ? ? ? ? ? ? ? ? ? ? ? ? }? ??
? ? ? ????? 靜態(tài)內(nèi)部類
? ? ? ? ? ? ? ? ? ? ? ? ? ? class 外部類名{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public static class 內(nèi)部類名{
????????????????????????????????????????}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? 靜態(tài)變量除外部類內(nèi)杰赛,只能聲明在靜態(tài)內(nèi)部類中呢簸。可以使用對象調用靜態(tài)方法乏屯,是合法的根时,但這樣容易引起混淆,所以建議使用類名而不是對象來調用辰晕。
? ? ? ? 2蛤迎、靜態(tài)常量
? ? ? ? ? ? 可以使用static 和 final關鍵字來定義一個靜態(tài)常量。
? ? ? ? ? ? public static final long serverId = 10000001L;
? ? ? ? ? ? 我們使用了兩個關鍵字來定義了一個靜態(tài)常量含友,而效果似乎和定義常量一樣替裆,都是通過類名.字段名來訪問,而且都是無法更改窘问,那么為什么要多此一舉呢辆童?
? ? ? ? ? ? 是因為如果省略了static關鍵字,該常量字段就是變成了所屬類的一個實例字段惠赫,需要通過類的對象去訪問把鉴,而且每一個類的對象都一個該字段的副本,所以要加上static關鍵字儿咱,保證該類只會存在一份這樣的字段庭砍。
二、作用域
? ? ????java三個作用域關鍵字概疆,都可以來修飾類和實例的變量逗威、方法(包括內(nèi)部類中不包含匿名內(nèi)部類、局部內(nèi)部類)岔冀,但不可以用作方法內(nèi)修飾變量凯旭。default關鍵字無需聲明,不加修飾符即是default使套。
? ??1、public
? ? ? ? 定義為public的類侦高、方法和變量即為公開的嫉柴,可被其他類訪問。
? ? ? ? 但訪問方法奉呛、變量的前提是计螺,先具有訪問到該類的權限才能進一步的訪問夯尽。
? ? 2、private
? ? ? ? 定義為private的類(外部類也就是跟.java文件同名的類登馒,不可以用private修飾)匙握、方法、變量不可被其他類訪問陈轿,只對類內(nèi)部可見圈纺。
? ? ? ? 3麦射、protected
? ? ? ? ? ? ? 定義為protected的類(外部類無法修飾)蛾娶、方法、變量潜秋,可被同包或子孫類訪問蛔琅。
? ? ? ? 4、default
? ? ? ? ? ? ? 不加修飾符即是默認修飾為default半等,類(包括外部類)揍愁、方法、變量可被同包的其他類訪問杀饵。
三莽囤、代碼塊
? ? ? ? 在java中{}中的即為代碼塊
? ? ? ? 執(zhí)行優(yōu)先級:靜態(tài)代碼塊>main方法>構造代碼塊>構造方法 (優(yōu)先級從高到低)
? ? ? ? 靜態(tài)代碼塊只會執(zhí)行一次,構造代碼塊會在每次創(chuàng)建對象時執(zhí)行切距。
? ? ? ? 1朽缎、普通代碼塊:
? ? ? ? ? ? ? ?在方法或語句中的{}就是普通代碼塊,普通代碼和語句的執(zhí)行順序谜悟,由它們在代碼中的次序決定话肖,前邊的就先執(zhí)行。
????????????可以看到在普通代碼塊中葡幸,變量的聲明有所不同最筒,代碼塊中聲明的變量,方法語句中無法直接使用需再次聲明蔚叨,聲明后下邊的代碼塊中可直接使用該變量床蜘,無需再次聲明。
? ? ? ? 2蔑水、構造代碼塊:
? ? ? ? ? ? 類中{}中的就是構造代碼塊邢锯,構造代碼塊先于構造方法執(zhí)行,在每次創(chuàng)建對象的時候搀别。
? ? ? ? 3、靜態(tài)代碼塊
? ? ? ? ? ? ? 類中加static修飾的{}的語句就是靜態(tài)代碼塊歇父,由虛擬機控制只執(zhí)行一次蒂培,先于所有代碼塊及構造方法執(zhí)行再愈。
? ? ? ? 4护戳、同步代碼塊
? ? ? ? ? ? ? synchronized(obj){
? ? ? ? ? ? ? }
? ? ? ? 當線程進入以上代碼塊時践磅,即進入了同步代碼塊,將獲得obj的鎖灸异。(學習并發(fā)程的時候再詳細講解)