构造方法:
构造方法也叫构造器,
当一个对象被创建时候,构造方法用来初始化该对象。
构造方法和它所在类的名字相同,但构造方法没有返回值。
通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。
不管你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个默认构造方法,它把所有成员初始化为0。
一旦你定义了自己的构造方法,默认构造方法就会失效。
构造方法不能被static、final、synchronized、abstract、native修饰。
百度上的解释为:
一个类被实例化也就是被new的时候最先执行的是构造函数,如果你有留心。你会发现很多类里面根本没有写构造函数。
在java类中,如果不显示声明构造函数,JVM(Java Virtual Machine(Java虚拟机)) 会给该类一个默认的构造函数。一个类 可以有多个构造函数。构造函数的主要作用 一是用来实例化该类。二是 让该类实例化的时候执行哪些方法,初始化哪些属性。当一个类声明了构造函数以后,JVM 是不会再给该类分配默认的构造函数。
没有参数的构造方法又叫缺省构造方法
下面是一个使用缺省构造方法的例子:
// 一个简单的构造函数
class MyClass {
int x;
// 以下是构造函数
MyClass() {
x = 10;
}
}
可以像下面这样调用构造方法来初始化一个对象:
public class Way {
public static void main(String args[]) {
MyClass t1 = new MyClass();
MyClass t2 = new MyClass();
System.out.println(t1.x + " " + t2.x);
}
}
大多时候需要一个有参数的构造方法。
// 一个简单的构造函数
class MyClass {
int x;
// 以下是构造函数
MyClass(int i ) {
x = i;
}
}
初始化对象
public class Test {
public static void main(String args[]) {
MyClass t1 = new MyClass( 10 );
MyClass t2 = new MyClass( 20 );
System.out.println(t1.x + " " + t2.x);
}
}
子类调用父类的构造方法
父类的构造方法不能被子类继承。子类不能直接通过方法名调用父类的一个构造方法,而是要通过super关键字调用父类的一个构造方法,
super语句必须位于子类构造方法的第一行。
来看个例子
package helloJava;
class GrandPa
{
public GrandPa()//这是定义的构造方法,不是默认的构造方法
{
System.out.println("default GrandPa");
}
public GrandPa(String name)
{
System.out.println(name);
}
}
class Father extends GrandPa
{
public Father()
{
System.out.println("default Father");
}
public Father(String grandPaName,String fatherName)
{
super(grandPaName);//对GrandPa有参构造方法的调用
System.out.println(fatherName);
}
}
public class Son extends Father
{
public Son()
{
System.out.println("default Son");
}
public Son(String grandPaName,String fatherName,String sonName)
{
super(grandPaName,fatherName);//对Father有参构造方法的调用
System.out.println(sonName);
}
public static void main(String args[])
{
Son s1=new Son();
Son s2= new Son("My GrandPa", "My Father", "My Son");
}
}
考察要点
l 识别合法的构造方法;2 构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;
3 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;
4 子类通过super关键字调用父类的一个构造方法;
5 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法
6 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public、private、protected修饰;
7 构造方法不是类的成员方法;
8 构造方法不能被继承。