java入门(十八) | OOP(五)之构造代码块和局部代码块

java入门(十八) | OOP(五)之构造代码块和局部代码块

构造代码块和局部代码块

{
代码...
}

1.1 构造代码块

  1. 在类的内部,方法外部的代码块
  2. 通常用于抽取构造方法中的共性代码
  3. 每次调用构造方法前都会调用构造代码块
  4. 优先于构造方法加载
package cn.qile.block;

//测试代码块
public class Test1_Block {
    public static void main(String[] args) {
        //创建对象测试
        //1、如果有构造代码块,创建对象时发生两件事:先执行构造代码块再执行构造方法
        Block b = new Block();
        Block b2 = new Block("jack");
    }
}

//创建Block类
class Block{

    //2、构造代码块:位置是在类里方法外
    String country ;
    {
        //3、构造代码块中可以提供所有构造方法的共性功能
        country="中国人";
        System.out.println("构造代码块");
    }

    //构造方法
    public Block() {
        System.out.println("无参构造:"+country);
    }
    public Block(String n) {
        System.out.println("含参构造:"+n+"是"+country);
    }

}

1.2 局部代码块

  1. 在方法里的代码块
  2. 通常用于控制变量的作用范围,出了括号就失效
  3. 变量的方法越小越好,成员变量会有线程安全问题
package cn.qile.block;

//测试代码块
public class Test2_Block {
    public static void main(String[] args) {
        //创建对象测试
        //1、如果有构造代码块,创建对象时发生两件事:先执行构造代码块再执行构造方法
        Block b = new Block();
        b.eat();//方法调用时,才触发局部代码块
        Block b2 = new Block("jack");
    }
}
//创建Block类
class Block{

    //2、构造代码块:位置是在类里方法外
    String country ;
    {
        //3、构造代码块中可以提供所有构造方法的共性功能
        country="中国人";
        System.out.println("构造代码块");
    }
    //构造方法
    public Block() {
        System.out.println("无参构造:"+country);
    }
    public Block(String n) {
        System.out.println("含参构造:"+n+"是"+country);
    }
    //提供普通方法
    public void eat() {
        //局部代码块:位置是在方法里   +   主要用来控制变量的作用范围
        {
            int i = 10;
            System.out.println("局部代码块:"+i+"个"+country);
        }
    }

}

总结
代码块加载顺序:构造代码块 -> 构造方法 -> 局部大码块
构造代码块:每次创建对象都会执行构造方法,在执行构造方法前会执行构造代码块
局部代码块:存在方法里,只有调用方法才会执行

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » java入门(十八) | OOP(五)之构造代码块和局部代码块