静态代码块、构造代码块、构造函数、普通代码块

1、静态代码块

  • 样式
public class CodeBlock{
     static{
        System.out.println("静态代码块!");
     }
}
  • 执行时机:静态代码块在类加载时就运行了,而且只运行一次并且优先于各种代码块以及构造函数
  • 作用:放置配置文件。
  • 静态代码块不能存在任何方法体中。
  • 静态代码块不能访问普通变量。

2、构造代码块:和静态代码块的区别是少了static关键字

  • 样式
public class CodeBlock{
    {
        System.out.println("构造代码块!");
    }
}
  • 执行时机:在创建对象时被调用,每次创建对象都会调用一次,而且优于构造函数执行

3、构造函数

  • 样式
public class CodeBlock{
    public CodeBlock(){
        System.out.println("构造函数!");
    }
}
  • 执行时机:在类的对象创建时,定义初始化状态,没有返回值, 构造函数不能被直接调用,必须通过new运算符创建对象

4、普通代码块

  • 样式
public class CodeBlock{
    public void SayHello(){
        System.out.println("普通代码块!");
    }
}

5、执行顺序

静态代码块 > 构造代码块 > 构造函数 > 普通代码块

  • 例子
public class CodeBlock{

    static{
        System.out.println("静态代码块!");
    }
     
    {
        System.out.println("构造代码块!");
    }
 
    public CodeBlock(){
        System.out.println("构造函数!");
    }
    
    public void SayHello(){
        System.out.println("普通代码块!");
    }

    public static void main(String[] args){
        System.out.println("执行了main方法!");
        new CodeBlock().SayHello();
        System.out.println("----------");
        new CodeBlock().SayHello();
    }
}

运行结果:

  静态代码块!
  执行了main方法!
  构造代码块!
  构造函数!
  普通代码块!
  ----------
  构造代码块!
  构造函数!
  普通代码块!

6、父类和子类执行顺序

父类静态代码块 → 子类静态代码块 → 父类构造代码块和构造函数 → 子类构造函数和构造方法

父类:

public class SuperClass{

    static{
        System.out.println("父类静态代码块!");
    }
    
    {
        System.out.println("父类构造代码块!");
    }
    
    public SuperClass(){
        System.out.println("父类构造函数!");
    }
}

子类:

public class SubClass extends SuperClass{

    static{
       System.out.println("子类静态代码块!");
    }
    
    {
       System.out.println("子类构造代码块!");
    }

    public SubClass(){
       System.out.println("子类构造函数!");
    }

    public static void main(String[] args){
       SubClass sb = new SubClass();
       System.out.println("----------");
       SubClass sb = new SubClass();
   }
}

结果:

  父类静态代码块!
  子类静态代码块!
  父类构造代码块!
  父类构造函数!
  子类构造代码块!
  子类构造函数!
  ----------
  父类构造代码块!
  父类构造函数!
  子类构造代码块!
  子类构造函数!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值