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();
}
}
输出结果