1. 程式人生 > >靜態關鍵字static和靜態程式碼塊、區域性程式碼快、構造程式碼塊

靜態關鍵字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的縮寫,可變