普通代碼塊
普通代碼塊:定義在方法中的代碼塊
public class Test{
public static void main(String[] args) {
{ //直接使用{}定義,普通方法塊
int x = 10 ;
System.out.println("x = " +x);
}
int x = 100 ;
System.out.println("x = " +x);
}
}
應用場景:如果方法中代碼過長,爲避免變量重名,使用普通代碼塊。
構造塊
構造塊:定義在類中的代碼塊(不加修飾)
class Person{
{ //定義在類中,不加任何修飾符,構造塊
System.out.println("1.Person類的構造塊");
}
public Person(){
System.out.println("2.Person類的構造方法");
}
}
public class Test{
public static void main(String[] args) {
new Person();
new Person();
}
}
應用場景:構造塊優先於構造方法執行,每產生一個新的對象就調用一次構造塊,構造塊可以進行簡單的邏輯操作(在調用構造方法前)
靜態代碼塊
靜態代碼塊:使用static定義的代碼塊
分爲兩種類型:在非主類中和在主類中
在非主類中的靜態代碼塊
class Person{
{ //定義在類中,不加任何修飾符,構造塊
System.out.println("1.Person類的構造塊");
}
public Person(){
System.out.println("2.Person類的構造方法");
}
static { //定義在非主類中的靜態塊
System.out.println("3.Person類的靜態塊");
}
}
public class Test{
public static void main(String[] args) {
System.out.println("--start--");
new Person();
new Person();
System.out.println("--end--");
}
}
應用場景:
- 靜態塊優先於構造塊執行。
- 無論產生多少實例化對象,靜態塊都只執行一次
靜態塊的主要作用是爲static屬性進行初始化
在主類中的代碼塊
public class Test{
{
System.out.println("1.Test的構造塊");
}
public Test(){
System.out.println("2.Test的構造方法");
}
static{
System.out.println("3.Test的靜態塊");
}
public static void main(String[] args) {
System.out.println("--start--");
new Test();
new Test();
System.out.println("--end--");
}
}
在主類的靜態代碼塊,優於主方法執行
練習
class HelloA {
//構造方法
public HelloA(){
System.out.println("Hello A!父類構造方法");
}
//非靜態代碼塊
{
System.out.println("i'm A class.父類非靜態代碼塊");
}
//靜態代碼塊
static{
System.out.println("static A 父類靜態代碼塊");
}
}
public class HelloB extends HelloA {
//構造方法
public HelloB(){
System.out.println("Hello B! 構造方法");
}
//非靜態代碼塊
{
System.out.println("i'm B class.非靜態代碼塊");
}
//靜態代碼塊
static{
System.out.println("static B 靜態代碼塊");
}
public static void main(String[] args) {
System.out.println("---start---");
new HelloB();
new HelloB();
System.out.println("---end---");
}
}