天天看點

類中的代碼塊兒

1、局部代碼塊

普通代碼塊就是直接定義在方法或語句中,以”{}”劃定的代碼區域,此時隻需要關注作用域的不同即可,方法和類都是以代碼塊的方式劃定邊界的。

class TestDemo{
		public static void main(String[] args) {
			{
         int x = 1;
         System.out.println("普通代碼塊" + x);
			}
			int x = 99;
			System.out.println("代碼塊之外" + x);
		}
	}           

複制

運作結果:

類中的代碼塊兒

2、構造代碼塊

直接定義在類中成員位置的代碼塊,優先于構造方法執行,構造代碼塊用于執行所有對象均需要的初始化動作,每建立一個對象均會執行一次構造代碼塊。

class Person {
    private String name;
    private int age;
    {
        System.out.println("構造代碼塊執行了");
    }
    Person(){
        System.out.println("Person無參數的構造函數執行");
    }
    Person(int age){
        this.age = age;
        System.out.println("Person(age)參數的構造函數執行");
    }
}
public class PersonDemo{
    public static void main(String[] args){
        Person p = new Person();
        Person p1 = new Person(23);
    }
}           

複制

運作結果:

類中的代碼塊兒

3、靜态代碼塊

靜态代碼塊是定義在成員位置,使用static修飾的代碼塊。

特點:産生對象時執行,它優先于主方法執行、優先于構造代碼塊執行。

該類不管建立多少對象,靜态代碼塊隻執行一次。

可用于給靜态變量指派,用來給類進行初始化。

案例1:

class Person {
    private String name;
    private int age;

    //靜态代碼塊
    static {
        System.out.println("靜态代碼塊執行了");
    } 
    public Person(String name) {
        super();
        this.name = name;
    }
    public Person(){

    }
}

public class PersonDemo {
    public static void main(String[] args) {
        int a = 10;
        Person p1 = new Person();
        Person p2 = new Person("劉備");
        Person p3 = new Person("劉備");
        Person p4 = new Person("劉備");
    }
}           

複制

運作結果:

類中的代碼塊兒

案例2:

class Person {
    private String name;
    private int age;

    //靜态代碼塊
    static {
        System.out.println("靜态代碼塊執行了");
    }
    //成員代碼塊 又叫構造代碼塊 對象級别的代碼塊,每次建立對象都會執行一次
    {
        System.out.println("我是構造代碼塊");
    }
    public Person(String name) {
        super();
        this.name = name;
    }
    public Person(){

    }
}

public class PersonDemo {
    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person("劉備");
        Person p3 = new Person("劉備");
        Person p4 = new Person("劉備");
        int a = 10;
        //局部代碼塊限定變量作用域範圍
        {
            System.out.println(a);
            int b = 20;
            System.out.println(b);
        }
        //  System.out.println(b);
    }
}           

複制

運作結果:

類中的代碼塊兒