代码块
类中有五大成分:成员变量,成员方法,构造器,代码块和内部类
代码块实际上和成员方法差不多,存在static修饰和无static修饰。使用static修饰的代码块称为静态代码块,不使用static修饰的是实例代码块。代码块主要用于在加载静态资源。
代码块的示例
静态代码块的形式:
static{
}
实例代码块的形式:
{
}
实例代码块实际是放在构造器中的,在实例化对象时会先与构造器执行一次。
代码块的执行顺序
public class Codedemo {
public static void main(String[] args) {
Animal dog = new Dog();
}
static{
System.out.println("调用类的静态代码块执行了");
}
{
System.out.println("调用类的实例代码块执行了");
}
}
class Animal{
static {
System.out.println("父类静态代码块执行了");
}
public Animal(){
System.out.println("父类构造器执行了");
}
{
System.out.println("父类实例代码块执行了");
}
}
class Dog extends Animal{
static {
System.out.println("子类静态代码块执行了");
}
public Dog(){
System.out.println("子类构造器执行了");
}
{
System.out.println("子类实例代码块执行了");
}
}
执行结果如下:
调用类的静态代码块执行了
父类静态代码块执行了
子类静态代码块执行了
父类实例代码块执行了
父类构造器执行了
子类实例代码块执行了
子类构造器执行了
在一个类中,静态代码块会最先执行,而实例代码块需要在创建实例时执行。(第一行)
前面说过,实例代码块实际上是在构造器中的,但会先与构造器执行,在创建子类时会默认在第一行调用父类的无参构造器。(后四行)
在初始化对象之前需要先将类加载至方法区内,同样会先加载父类,因此会先执行父类静态代码块,再加载子类从而加载子类静态代码块。
代码块的总结
在实际的使用过程中,静态代码块的使用频率远高于实例代码块,静态代码块可以用于加载静态资源,对于实例代码块来说,每个实例所需要实现的成员或方法可能不同,对于相同的可以在类中定义,因此代码块所实现的功能有点多此一举,因此实例代码块使用的频率很低。