靜態關鍵字static和靜態程式碼塊、區域性程式碼快、構造程式碼塊
1、靜態變數
分析物件中所具備的成員變數的值都相同時,而且這個成員不需要修飾,這時成員變數就可以被靜態修飾
2、靜態函式
該函式是否需要訪問物件中的特有資料
二、static關鍵字的特點:用於修飾成員(屬性和方法)
1、可以用類名直接呼叫,可以不用建立物件時就可以使用
2、可以使用物件的引用呼叫
3、被static修飾的成員可以被所有的該類的物件共享
三、static關鍵注意事項:
1、靜態方法只能訪問靜態成員(非靜態可以自由訪問靜態或非靜態成員)
2、靜態方法中不可以使用this和super關鍵字
3、主函式是靜態的
四、成員變數和類變數(靜態變數)的區別?
1、宣告週期不同
成員變數隨著物件的建立而建立,隨著物件被回收而釋放
靜態變數隨著類的載入而建立,隨著類的消失而消失。
2、呼叫方式不同
成員變數只能被物件呼叫
靜態變數可以被物件呼叫,也可以使用類呼叫(建議使用類呼叫)
3、別名不同
成員變數又叫例項變數
靜態變數又叫類變數
4、資料儲存位置不同
注意:方法也放在方法區成員變數位於堆記憶體中
靜態變數儲存在方法區(資料區或者共享區)的靜態區
靜態方法:靜態方法可以使用類來呼叫
五、三種程式碼塊以及例項
靜態程式碼塊:
特點:1、隨著類的載入而執行
2、只執行一次
作用:用於給類初始化(有的類不用建構函式,而需要初始化)
構造程式碼塊: 在類中的程式碼塊
特點:1、在建立物件時執行,每建立一個物件,就執行一次
2、在建立物件時執行,在靜態程式碼塊後執行,且在建構函式前執行
作用:可以給所有的物件進行初始化
區域性程式碼塊:在函式中的程式碼塊
作用:限定函式中的區域性變數的生命週期
class StructureCode { private String name; static int num; <span style="color:#ff0000;">//構造程式碼塊</span> { System.out.println("我是構造程式碼塊"); cry(); //沒建立一個物件就執行一次cry(),代替下邊兩個建構函式中的cry() } <span style="color:#ff0000;">//靜態程式碼塊</span> static { num=10; num*=num; System.out.println("我是靜態程式碼塊"); } StructureCode() { name="baby"; System.out.println("我是建構函式"); // cry(); } StructureCode(String name) //建構函式是給對應的物件初始化 { this.name=name; System.out.println("我是建構函式"); // cry(); } private void cry() { System.out.println("哇哇"); } public void show() { <span style="color:#ff0000;">//區域性程式碼塊</span> { int i=55; } System.out.println("上邊是區域性程式碼塊"); } } class StaticDemo1 { public static void main(String args []) { StructureCode structureCode = new StructureCode("小強"); } }
六、主函式
public static void main(String args [])
主函式的特殊之處:
1、格式是固定的
2、被JVM所識別
public:因為許可權必須是最大的
static:不需要物件的 直接用主函式所屬的類名呼叫即可
void:沒有返回值
main:預設的方法名
String args [] 主函式的引數列表,是一個數組型別的引數,而且元素都是字串型別的
args:arguments的縮寫,可變