关于代码块及代码块的的执行顺序

什么是代码块

将代码写入一对括号内的{ },就可以称为代码块

根据位置不同可以分为:局部代码块,静态代码块,构造代码块,同步代码块

局部代码块

局部代码块出现在方法中,他是限量的生命周期,就在{ }的作用范围内,提高了内存的利用率

{ }外是访问不到里面的内容

局部代码块在一个方法内是自上而下依次执行的

public class testdemo {
    public static void main(String[] args) {
        {
            int x=1;
            System.out.println(x);
        }
       {
            int y=1;
            System.out.println(y );
        }       
    }
}

 

 

构造代码块

出现在类中方法外,他在每次调用构造时都执行,并且在构造方法前 

位置如下:

public class Demo {
    {
        System.out.println("构造代码块");
    }
    public Demo() {
        System.out.println("构造方法");
    }
}
public class testdemo {
    public static void main(String[] args) {
     Demo demo = new Demo();
    }
}

我先创建这个方法的对象,

来康康执行结果,构造代码块的执行确实是在构造方法前

 

静态代码块

在类中方法外执行,加上了static修饰(那不就是上面的构造代码块加了static)

它随着类的加载而加载

public class Demo {
    static {
        System.out.println("静态代码块");
    }
    {
        System.out.println("构造代码块");
    }
    public Demo() {
        System.out.println("构造方法");
    }
}

测试类中之执行一下

 

加上局部代码块后的顺序

直接看结果:

public class testdemo {
    public static void main(String[] args) {
        {
            System.out.println("局部代码块");
        }
        Demo demo = new Demo();
        
    }
}

那么执行顺序应该是局部代码块-> 静态代码块 ->构造代码块-> 构造方法?

我们把局部代码块挪个位置:

public class testdemo {
    public static void main(String[] args) {

        Demo demo = new Demo();
        {
            System.out.println("局部代码块");
        }
    }
}

 所以局部代码块的位置是由我们自己放的位置决定执行顺序的

子类与父类中的执行顺序

这里我们需要写静态代码块,静态方法,构造代码块

父类

public class Fu {
    static {
        System.out.println("这是父类的静态代码块");
    }
    {
        System.out.println("这是父类的构造代码块");
    }
    public Fu() {
        System.out.println("这是父类的构造方法");
    }

}

 子类

  class Zi extends Fu{
    static{
        System.out.println("这是子类的静态代码块");
    }
    public Zi() {
          System.out.println("这是子类的构造方法");
      }
      {
          System.out.println("这是子类的构造代码块");
      }

  }

test类测试

public class testdemo {
    public static void main(String[] args) {
        Zi zi = new Zi();
    }
}

 

所以执行顺序是
 父类的静态代码块 ->子类的静态代码块 ->父类的构造代码块 -> 父类的构造方法 -> 子类的构造代码块 ->子类的构造方法  

我们来解释原因:静态代码块是随着类的加载而加载,所以最快,然后当子类创建对象的时候你必须先初始化父类,也就是加载父类的构造方法,构造代码块的执行在构造方法前,最后轮到子类的构造代码块,构造方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值