目錄
代碼塊在實際開發中很少見,只需要瞭解即可,實際開發中也不需要使用它。
代碼編寫中,使用{}聲明的程序塊就屬於代碼塊,而根據其出現的位置,及聲明關鍵字的不同,分爲四種:普通代碼塊、構造塊、靜態塊、同步代碼塊(多線程中涉及)
1、普通代碼塊
在方法中使用{}定義起來的一段代碼,利用普通代碼塊可以實現局部代碼的拆分(實際基本用不上)。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
{
int x =10; //局部
System.out.println("x="+x); //輸出10
}
int x =100; //全局
System.out.println("x="+x); //輸出100
}
}
2、構造代碼塊
將普通代碼塊中提取到類中使用,就形成了構造代碼塊。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Person per1 = new Person();
Person per2 = new Person();
}
}
class Person{
{ //構造塊
System.out.println("構造塊");
}
public Person() {
System.out.println("構造方法");
}
}
由以上程序運行可知,構造塊優先於構造方法執行,每次實例化對象時構造快都會被重複調用(實際基本用不上)。
3、靜態代碼塊
如果代碼塊中使用了static關鍵字定義,則該代碼塊爲靜態代碼塊:
- 在非主類中定義的;
- 在主類中定義的;
【舉例】:非主類中定義的靜態塊
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Person per1 = new Person();
Person per2 = new Person();
}
}
class Person{
public Person() {
System.out.println("構造方法");
}
{ //構造塊
System.out.println("構造塊");
}
static { //靜態塊
System.out.println("靜態塊");
}
}
由以上運行可知,靜態塊最先執行,並且只執行一次。在非主類中定義 的靜態塊,可以用其爲static屬性初始化,如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Person per1 = new Person();
Person per2 = new Person();
}
}
class Person{
private static String msg = "hello";
private static String info =null;
public Person() {
System.out.println("構造方法");
}
{ //構造塊
System.out.println("構造塊");
}
static { //靜態塊
System.out.println("靜態塊");
info = msg+"張三";
info = info +10;
System.out.println(info);
}
}
【舉例】:主類中定義的靜態塊
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("hello");
}
static {
System.out.println("竟然是我先執行??");
}
}
以上可以發現,靜態塊優於主方法先執行。
4、總結
代碼塊對於現階段開發意義不大,瞭解即可。