所谓实例构造就是指通常的构造函数带参数的和不带参数的,其中不带参数的构造函数又叫做默认构造函数。而类型构造函数又可称为静态构造函数。例如:

publicclassCustomer...{
publicCustomer()...{...}//instanceconstructor,default
publicCustomer(Typetype)...{...}//instanceconstructorwithargument
staticCustomer()...{...}//typeconstructor
}

publicclassCustomer:Base...{
publicCustomer()...{
System.Console.WriteLine("Customerinstanceconstructorwasinvoked.");
}
staticCustomer()...{
System.Console.WriteLine("Customertypeconstructorwasinvoked.");
}
}
publicclassBase...{
publicBase()...{
System.Console.WriteLine("Baseinstanceconstructorwasinvoked.");
}
staticBase()...{
System.Conole.WriteLine("Basetypeconstructorwasinvoked.");
}
}
到创建Customer对象时候,customer = new Customer();时候有如下输出:
Customer type constructor was invoked.
Base type constructor was invoked.
Base instance was invoked.
Customer instance was invoked.
而在Java中却不一样,看下面的例子:
packagemf;
publicclassBase...{
publicBase()...{
System.out.println("Baseinstanceconstructorwasinvoked.");
}
static...{
System.out.println("Basetypeconstructorwasinvoked.");
}
}
publicclassCustomerextendsBase...{
publicCustomer()...{
System.out.println("Customerinstanceconstructorwasinvoked.");
}
static...{
System.out.println("Customertypeconstructorwasinvoked.");
}
}
publicclassTest...{
publicstaticvoidmain(String[]args)...{
Customercustomer=newCustomer();
}
}
其输出结果为:
Base type constructor was invoked.
Customer type constructor was invoked.
Base instance constructor was invoked.
Customer instance constructor was invoked.
本文解析了实例构造函数与类型构造函数的区别及使用场景,并通过.NET与Java的对比展示了不同语言中构造函数的调用顺序。
713

被折叠的 条评论
为什么被折叠?



