歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java學習筆記之 static

Java學習筆記之 static

日期:2017/3/1 9:13:53   编辑:Linux編程

說明:這只是本人的學習Java的個人心得與見解,分享出來,也算是自己的筆記。(本人小白,有錯誤的話望大神指出,不喜勿噴。-.-)

靜態變量

– 在一個Java類中,可以使用static關鍵字來修飾成員變量,該變量被稱作靜態變量

– 靜態變量被所有實例共享,可以使用“類名.變量名”的形式來訪問

– static關鍵字只能用於修飾成員變量,不能用於修飾局部變量,否則編譯會報錯,下面的Demo是違反語法的。

public class Student{
public void study(){
static int num=10;//錯誤的

}

}

靜態方法

--被static關鍵字修飾的方法稱為靜態方法

--同靜態變量一樣,靜態方法可以使用“類名.方法名”的方式來訪問,也可以通過類的實例對象來訪問。

--在一個靜態方法中只能訪問用static修飾的成員,原因在於沒有被

static修飾的成員需要先創建對象才能訪問,而靜態方法在被調用時可以不創建任何對象。

靜態程序塊

– 用static關鍵字修飾的程序塊稱為靜態程序塊

– 當類被加載時,靜態代碼塊會執行,由於類只加載一次,因此靜態代碼塊只執行一次

– 在程序中,通常使用靜態代碼塊來對類的成員變量進行初始化
•1、什麼是程序塊

類中除了有成員變量、方法和構造方法,還可以使用程序塊,所謂程序塊就是由一對花括號({})包括的語句塊。
•2、程序塊的作用

在Java中,程序塊的作用相當於完成一些初始化操作,常常在程序塊實現對成員變量的初始化賦值。

普通程序塊和靜態程序塊有以下區別:

執行的順序不同,靜態程序塊在編譯即被執行且執行一次,而普通程序塊只有在使用new運算符實例化對象被調用且執行一次;

靜態程序塊只能訪問類成員,而普通程序塊既可以訪問實例成員,也可以訪問類成員。

下面開始詳細的講解與Demo

前提引入:
Java 中可以通過初始化塊進行數據賦值

以Demo說明:

public class HelloWorld{
String name;
{
name="love you ";

}

}

在類的聲明中,可以包含多個初始化塊,當創建類的實例時,就會依次執行這些代碼塊。
>>如果使用 static 修飾初始化塊,就稱為靜態初始化塊。

需要特別注意:靜態初始化塊只在類加載時執行,且只會執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量。

Demo:

public class StaticBlock{
int num1;
int num2;
static int num3;
//構造方法
public StaticBlock(){
num1=91;
System.out.println("用構造方法完成num1的賦值");
}
//初始化塊
{
num2=74;
System.out.println("用初始化塊完成num2的賦值");

}
//靜態的初始化塊 static
static{
num3=85;
System.out.println("用靜態的初始化塊完成num3的賦值");
}
public static void main(String[] args){
StaticBlock sta1=new StaticBlock();
System.out.println("num1:"+sta1.num1);
System.out.println("num2:"+sta1.num2);
System.out.println("num3:"+num3);
StaticBlock sta2=new StaticBlock();


}
}

輸出的結果為:

為什麼會有這養的輸出結果呢????

注意到輸出的順序了嗎?

通過輸出結果,我們可以看到:

程序運行時靜態初始化塊最先被執行,

然後執行普通初始化塊,

最後才執行構造方法。

由於靜態初始化塊只在類加載時執行一次,所以當再次創建對象 hello2 時並未執行靜態初始化塊。

Copyright © Linux教程網 All Rights Reserved