构造块
构造块的代码在类构造对象时执行,且先于构造方法,一般用于成员变量的初始化。
public class BlockTest {
//构造块
{
System.out.println("构造块");
}
public BlockTest(){
System.out.println("构造方法");
}
public static void main(String[] args) {
BlockTest bt=new BlockTest();
}
}
执行结果如下

可见构造块代码内容先于构造方法执行。
静态代码块
静态代码块随着类的加载准备就绪,先于构造块。一般用于随着类的加载做一些准备工作,比如数据库驱动包的加载,也可以用于静态成员的初始化。
public class BlockTest {
//静态代码块
static{
System.out.println("静态代码块");
}
public BlockTest(){
System.out.println("构造方法");
}
public static void main(String[] args) {
BlockTest bt=null;//执行完该语句输出--静态代码块
bt=new BlockTest();
}
}
执行结果如下

代码块在子类与父类中的执行次序
编写SuperClass类和SubSuperClass类,其中SubSuperClass继承自SuperClass。
public class SuperClass {
//静态代码块
static{
System.out.println("父类--静态代码块");
}
//构造块
{
System.out.println("父类--构造块");
}
public SuperClass(){
System.out.println("父类--构造方法");
}
}
public class SubSuperClass extends SuperClass{
//静态代码块
static{
System.out.println("子类--静态代码块");
}
//构造块
{
System.out.println("子类--构造块");
}
public SubSuperClass(){
System.out.println("子类--构造方法");
}
public static void main(String[] args) {
SubSuperClass ssc=new SubSuperClass();
}
}
执行结果如下

可见父类的静态代码块先于子类的静态代码块执行,可见在类的加载过程中父类先于子类。之后再执行父类的构造块与构造方法,最后是子类构造块与构造方法,因子类的构造方法中必定会执行父类构造方法。

被折叠的 条评论
为什么被折叠?



