类加载与代码块

类加载

####类加载时机:

  1. new直接创建该类的对象。
  2. 启动该类中的main方法。
  3. 访问该类的静态成员(方法和变量)

代码块:

代码块的分类,根据其位置和声明方式的不同,可以分为:

  1. 局部代码块 //意义不大
  2. 构造代码块
  3. 静态代码块
  4. 同步代码块 //涉及多线程知识,后面学习了再补充
构造代码块

定义在类的成员位置,使用以下声明方式声明的代码块,称之为构造代码块。构造代码块内部属于局部位置,在里面定义变量,就是一个仅在构造代码块中生效的局部变量。

构造代码块的作用

随着构造器的执行而执行,用于在创建对象过程当中,给成员变量赋值!!

总结给成员变量赋值的几种方式(创建对象过程中):

  1. 默认初始化,具有默认值 //最先执行
  2. 显式赋值 //按代码顺序执行
  3. 构造代码块 //按代码顺序执行
  4. 构造器 //最后执行
静态代码块
static{
  
}

**随着类加载的过程而执行,静态代码块可以看成是一个在类加载过程中,会自动调用的静态方法!用于给静态成员变量赋值!**想要一段语句,能够在类加载过程中自动被调用,需要使用静态代码块,而不是静态方法!!

这里总结一下给静态成员变量赋值的几种方式(类加载时期):

  1. 默认初始化,具有默认值 //最先执行
  2. 显式赋值 //看书写顺序
  3. 静态代码块 //看书写顺序

使用场景

  1. 复杂的静态成员变量的赋值。

    JavaEE中加载JDBC驱动(最经典的),也可能是最常见的。

  2. 如果有一段代码,在类的全局,从始至终,只运行一次,可以写到静态代码块中。(依赖于类加载只有一次的原理)

    比如一些初类的始化工作,就可以放在静态代码块中完成。

    最常见的就是类System的初始化

代码块执行顺序

  1. 静态代码块
  2. 构造代码块
  3. 构造器

你可能感兴趣的