main()方法是应用程序的起初点,当应用程序运行起来的时候,方法main是第一个调用的内容。

每创建一个类的实例都去初始化它的所有变量是乏味的。如果一个对象在被创建时就完成了所有的初始工作,将是简单的和简洁的。因此,Java在类里提供了一个特殊的成员函数,叫做构造函数(Constructor)。
  一个构造函数是对象被创建时初始对象的成员函数。它具有和它所在的类完全一样的名字。一旦定义好一个构造函数,创建对象时就会自动调用它。构造函数没有返回类型,即使是void类型也没有。这是因为一个类的构造函数的返回值的类型就是这个类本身。构造函数的任务是初始化一个对象的内部状态,所以用new操作符创建一个实例后,立刻就会得到一个清楚、可用的对象。

简单的说来:
构造函数就是当你声明一个新的变量的时候,自动执行的函数,通常构造函数都是做一些初始化的工作。你也可以自己编写构造函数。构造函数可以有多个,通过参数列表区分,就是参数的个数,类型和顺序。当你没有为一个类写构造函数,而有用这个类声明了一个变量,系统会自动给你的类加一个构造函数,通常会继承自父类的构造函数。所有类的祖宗类是object类。
看这个例子:

public class MyClass {

    public MyClass() {
        this(15);
        System.out.println("constructor");
    }

    public MyClass(String s1) {
        this(); //调用没有参数的构造函数,从构造函数中调用构造函数只允许用this(), 而且只允许放在构造函数的第一行
        System.out.println(s1);
    }

    public MyClass(int i) {
       System.out.println("finally comes here"+i);
    }

    public static void main(String[] args) {
        //看看调用不同的构造函数有什么区别。
        MyClass mc = new MyClass();
        MyClass mc1 = new MyClass("another test");
    }
}




执行结果:


finally comes here15


constructor


finally comes here15


constructor


another test



这是怎么回事呢?先调用main里面的东东,创建新实例,实例没带参数,于是去找构造函数。找到了第一个MyClass的构造函数,第二行“this(15)”实际上重载了MyClass(int i) ,于是i=15,输出“finally comes here15”。调用完了之后,再回到MyClass(),输出“constructor”。


然后回到main方法,执行“MyClass mc1 = new MyClass("another test");”找到带有字符串参数的构造函数 public MyClass(String s1) 。第二行“this(); ”于是找到未带参数的构造函数MyClass(),于是重复以上操作。最后执行 System.out.println("finally comes here"+i)。于是输出如上所示。



还有一个问题也值得注意:如果一个类没有定义任何构造函数方法,当用new与该类结合在一起时,还是可以创建一个新的对象。但你可能不得不设置它的实例变量,或者调用该对象需要用来对自身进行初始化的其他方法。



通过在你自己的类中定义构造函数方法,你可以为实例变量设置初时值。调用基于那些变量的方法,调用在其他对象上的方法设置一个对象的初始属性,你还可以重载构造函数的方法。