天天看点

类中的代码块儿

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);
    }
}           

复制

运行结果:

类中的代码块儿