Java中代碼塊分爲靜態代碼塊和非靜態代碼塊
首先來區分一下靜態代碼塊和非靜態代碼塊的區別(在起作用時間):
1、靜態代碼塊類加載的時候執行;
package joon;
public class Test {
static{
System.out.println("靜態代碼塊");
}
}
2、非靜態代碼塊每次創建對象時執行,每創建一個對象就會執行一次;
package joon;
public class Test {
static{
System.out.println("靜態代碼塊");
}
public static void main(String[] args) {
Test test=new Test();//因爲創建的對象沒有使用所以會出現警告
new Test();
}
}
public class Test {
{
System.out.println("非靜態代碼塊");
}
static{
System.out.println("靜態代碼塊");
}
public static void main(String[] args) {
new Test();
new Test();
}
}
運行結果是:靜態代碼塊 非靜態代碼塊 非靜態代碼塊
全局變量和局部變量
全局變量(成員變量):直接在類中定義的變量。
全局變量定義後,其作用域是其所在的整個類,成員變量的定義沒有先後順序。
局部變量:局部變量定義在代碼塊 方法體 方法參數列表,局部變量沒有默認值,所以使用之前需要賦值(初始化)。
局部變量的作用範圍:從定義的位置開始到所在的語句塊結束。
如果局部變量的名字與全局變量的名字相同,則在局部變量的作用範圍內全局變量被隱藏,即這個全局變量在同名局部變量所在方法內暫時失效。 如果在局部變量的作用域範圍內訪問該成員變量,則必須使用關鍵字this來引用成員變量。
package joon;
public class Test {
int score;
int height;
char letter;
boolean flag;
double light;
static{
System.out.println("靜態代碼塊");
}
{
System.out.println("非靜態代碼塊");
System.out.println(height);
System.out.println(letter);
System.out.println(flag);
System.out.println(light);
}
{
if(true) {
int score1=100;
System.out.println(score1);
}
double score=90;
System.out.println(score);
System.out.println(this.score);
}
}
聲明局部變量時,數據類型前除final外不允許有其他關鍵字,即其定義格式爲: [final] 數據類型 變量名 = 初始值;
局部變量不能使用訪問控制符修飾,因爲局部變量的作用範圍已經限定,局部變量不能用static修飾
this關鍵字不能用在靜態代碼塊或者靜態方法中,由於非靜態方法只能用對象調用,而靜態方法還可以用類名調用,類名不是對象,所以this不能用在靜態方法中