一、static關(guān)鍵字
? ? ? ? static在java中表示靜態(tài)的意思。
? ? ? ? 1、為什么使用static靜態(tài)關(guān)鍵字?
? ? ? ? ????如果將一個常用固定值字段定義為非靜態(tài)對象字段,則如果創(chuàng)建了100個對象,就會有100個對象實例,也會有100個該字段的實例字段,分別對應(yīng)每一個對象。但如果將其定義為靜態(tài)對象字段,則每個類只會有一個這樣的字段,意味著會節(jié)省很多不必要開支的內(nèi)存空間。
? ? ? ? ????靜態(tài)字段歸屬于類,意味著沒有創(chuàng)建該類的對象,也可以通過該類名獲取到該字段的值,十分方便。
? ? ? ? ????同理,static關(guān)鍵字修飾的方法,也可以被共享,被稱為靜態(tài)方法,也可以通過類名訪問到。
? ? ? ?? ???聲明格式:
? ? ? ? ????靜態(tài)字段? static 類型 字段名;? 訪問:類名.靜態(tài)字段名
? ? ? ????? 靜態(tài)方法? ?【訪問權(quán)限修飾符】 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)部類中??梢允褂脤ο笳{(diào)用靜態(tài)方法,是合法的,但這樣容易引起混淆,所以建議使用類名而不是對象來調(diào)用。
? ? ? ? 2、靜態(tài)常量
? ? ? ? ? ? 可以使用static 和 final關(guān)鍵字來定義一個靜態(tài)常量。
? ? ? ? ? ? public static final long serverId = 10000001L;
? ? ? ? ? ? 我們使用了兩個關(guān)鍵字來定義了一個靜態(tài)常量,而效果似乎和定義常量一樣,都是通過類名.字段名來訪問,而且都是無法更改,那么為什么要多此一舉呢?
? ? ? ? ? ? 是因為如果省略了static關(guān)鍵字,該常量字段就是變成了所屬類的一個實例字段,需要通過類的對象去訪問,而且每一個類的對象都一個該字段的副本,所以要加上static關(guān)鍵字,保證該類只會存在一份這樣的字段。
二、作用域

? ? ????java三個作用域關(guān)鍵字,都可以來修飾類和實例的變量、方法(包括內(nèi)部類中不包含匿名內(nèi)部類、局部內(nèi)部類),但不可以用作方法內(nèi)修飾變量。default關(guān)鍵字無需聲明,不加修飾符即是default。
? ??1、public
? ? ? ? 定義為public的類、方法和變量即為公開的,可被其他類訪問。

? ? ? ? 但訪問方法、變量的前提是,先具有訪問到該類的權(quán)限才能進(jìn)一步的訪問。
? ? 2、private
? ? ? ? 定義為private的類(外部類也就是跟.java文件同名的類,不可以用private修飾)、方法、變量不可被其他類訪問,只對類內(nèi)部可見。


? ? ? ? 3、protected
? ? ? ? ? ? ? 定義為protected的類(外部類無法修飾)、方法、變量,可被同包或子孫類訪問。
? ? ? ? 4、default
? ? ? ? ? ? ? 不加修飾符即是默認(rèn)修飾為default,類(包括外部類)、方法、變量可被同包的其他類訪問。
三、代碼塊
? ? ? ? 在java中{}中的即為代碼塊
? ? ? ? 執(zhí)行優(yōu)先級:靜態(tài)代碼塊>main方法>構(gòu)造代碼塊>構(gòu)造方法 (優(yōu)先級從高到低)
? ? ? ? 靜態(tài)代碼塊只會執(zhí)行一次,構(gòu)造代碼塊會在每次創(chuàng)建對象時執(zhí)行。
? ? ? ? 1、普通代碼塊:
? ? ? ? ? ? ? ?在方法或語句中的{}就是普通代碼塊,普通代碼和語句的執(zhí)行順序,由它們在代碼中的次序決定,前邊的就先執(zhí)行。

????????????可以看到在普通代碼塊中,變量的聲明有所不同,代碼塊中聲明的變量,方法語句中無法直接使用需再次聲明,聲明后下邊的代碼塊中可直接使用該變量,無需再次聲明。
? ? ? ? 2、構(gòu)造代碼塊:
? ? ? ? ? ? 類中{}中的就是構(gòu)造代碼塊,構(gòu)造代碼塊先于構(gòu)造方法執(zhí)行,在每次創(chuàng)建對象的時候。

? ? ? ? 3、靜態(tài)代碼塊
? ? ? ? ? ? ? 類中加static修飾的{}的語句就是靜態(tài)代碼塊,由虛擬機(jī)控制只執(zhí)行一次,先于所有代碼塊及構(gòu)造方法執(zhí)行。

? ? ? ? 4、同步代碼塊
? ? ? ? ? ? ? synchronized(obj){
? ? ? ? ? ? ? }
? ? ? ? 當(dāng)線程進(jìn)入以上代碼塊時,即進(jìn)入了同步代碼塊,將獲得obj的鎖。(學(xué)習(xí)并發(fā)程的時候再詳細(xì)講解)