Java 构造方法,静态代码块和构造代码块

350 阅读2分钟

1 . 构造方法基本知识

是其他方法创建该类对象时所引用的方法,可以为新的对象赋上初始值,总是和new运算符一起使用在创建对象的语句中,同一个类可以同时重载多个构造方法。 注意:构造方法方法名必须和类名相同且没有返回类型也不能加void

public  类 名 (  ){
    //代码
}

public  类 名 ( 参 数 1 ){
    //代码  
}

public  类 名 ( 参 数 1 , 参 数 2 ){
    //代码
}

public  类 名 ( 参 数 2 , 参 数 1){
    //代码
}

当一个类没有定义构造方法时系统会默认定义一个无参代码块,但当一个类定义了一个任意的构造方法后,系统定义的无构造方法会失效,所以一般为防止出错在定义构造方法时会先定义一个无参构造方法。

2 . 构造代码块和静态代码块

当一个地方创建了一个该类对象时会执行构造代码块。构造代码块没有特别的名称,没有返回值,除了static外不能加任何修饰词在前面,且每次创建对象时总会使用构造方法。

{
    //代码
}

而静态代码块又是一种特殊的构造代码块,除了有构造代码块的性质外,还有其独有的特点。 一个类不管创建几次对象,静态方法只会执行一次。

static{
    //代码
}

3.构造方法,静态代码块和构造代码块的执行顺序

其实我们可以把创建一个对象形容成去相亲。当创建一个新对象时,相当去你去相亲网上找对象。静态对象就是你去的相亲网站,父类的静态代码块是网站的名称,所以是第一个执行的。而子类的静态代码块是你要找的对象的性别,所以是第二个执行的。 父类的构造代码块是对象的名称,所以是第三个执行的。然后父类的构造方法是对象的基本信息,所以是第四个执行。最后才是子类的构造代码块和构造方法,分别为对象的家庭和详细信息。所以是执行构造代码块后执行构造方法。

父类

package test;

public class Father {
	{
		System.out.println("我是父类的构造代码块");
	}

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

}

子类

package test;

public class Son extends Father {
	{
		System.out.println("我是子类的构造代码块");
	}

	static{
		System.out.println("我是子类的静态代码块");
	}
	public Son() {
		System.out.println("我是子类的构造方法");
	}

}

测试类

package test;

public class Test {

	public static void main(String[] args) {
		Son c=new Son();

	}

}

输出结果