1.什么是构造器?
在日常生活中,盖房子需要工具和工人,通过工人使用这些工具,来修建一个房子。在Java中,构造器就好比是工具,而new关键字就是工人,通过new关键字和构造器结合来创建对象。要建立对象就要使用new关键字来建立对象,这是建立对象唯一的方法。
构造器的作用: 1.创建java对象的重要途径. 2.对系统产生的对象初始化 3.并将该对象作为返回值返回,是外部程序可以访问.
2.构造器的语法组成。
1)构造器可以使用的修饰符有public、protected、default、private,不写即为default类型的。
2)构造器的名称必须要和类的名称相同。
3)不能有返回值,void也不行。
4)构造器的参数可有可无。有一个也可有多个参数。
3.构造器方法和普通方法的区别。
主要是功能上、修饰符上、返回值上和命名上有本质的区别。
1)方法是为了执行相应的方法体。即Java代码。
2)构造器可以被修饰为public、protected、default、private类型,但不能修饰为abstract、final、native、static、synchronized。
3)方法可以修饰为除了protected、native外的修饰符。
4)构造器的名称要和类的名称相同。
5)方法的名称可以任意起,但要注意标识符的命名规则。使其更具有意义。
4.子类构造器调用父类构造器的几种情况:
1).子类构造器的执行体的第一行用super显式调用父类构造器,系统将根据super 调用里传入的实例列表调用父类对应的构造器
2).子类构造器执行体的第一行是this显式调用本类中重载的构造器,系统根据this调用里传入的实参列表调用本类中另一个构造器,执行本类中另一个构造器时,既会调用父类的构造器。
3).子类构造器中既没有this,也没有super,系统将会在执行子类构造器之前隐式调用父类无参的构造器
不管上面哪种情况,当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行,不仅如此,执行父类构造器时,系统会再次上溯执行其父类的构造器。。。。以此类推。创建任何java对象,最先执行的总是java.lang.Object类得构造器。
5.举例:
class TestSuper{
TestSuper(int i){} //指定了一个有参数的构造器,系统将不再为该类提供默认构造器
}
class TestSub extends TestSuper{ //在这里子类未定义构造器,系统将会提供默认构造器
TestSuper(){ super();}
}
public class TestAll{
public static void main(String args[]){
new TestSub();
}
}
不能编译成功,如果我们在eclipse这样写的话,就会有错误提示。
解决方法1:
在子类TestSub中添加无参数构造函数:
public TestSub() {
super(0);
//显式调用父类的带参数的构造器
}
解决方法2:
在TestSuper类添加无参数构造函数TestSuper(){} //显式指定父类的无参构造器。