-
实例构造与结构构造(Java/C#)
by{ guangboo }, published {2007-12-24}, Tag { CSharp / Java / }所谓实例构造就是指通常的构造函数带参数的和不带参数的,其中不带参数的构造函数又叫做默认构造函数。而类型构造函数又可称为静态构造函数。例如:
public class Customer...{ public Customer()...{ ... } // instance constructor, default public Customer(Type type)...{ ... } //instance constructor with argument static Customer()...{ ... } // type constructor }其中public Customer(),public Customer(Type type),为实例构造函数,static Customer为类型构造函数,当实例化一个这样的类的时候如:Customer customer = new Customer([Type type])时,CLR首先会调用类型构造函数,然后是实例构造函数。下面看个例子:
public class Customer : Base ...{ public Customer()...{ System.Console.WriteLine("Customer instance constructor was invoked."); } static Customer()...{ System.Console.WriteLine("Customer type constructor was invoked."); } } public class Base...{ public Base()...{ System.Console.WriteLine("Base instance constructor was invoked."); } static Base()...{ System.Conole.WriteLine("Base type constructor was invoked."); } }到创建Customer对象时候,customer = new Customer();时候有如下输出:
Customer type constructor was invoked.
Base type constructor was invoked.
Base instance was invoked.
Customer instance was invoked.
而在Java中却不一样,看下面的例子:
package mf; public class Base ...{ public Base()...{ System.out.println("Base instance constructor was invoked."); } static...{ System.out.println("Base type constructor was invoked."); } } public class Customer extends Base...{ public Customer()...{ System.out.println("Customer instance constructor was invoked."); } static...{ System.out.println("Customer type constructor was invoked."); } } public class Test ...{ public static void main(String[] args) ...{ Customer customer = new Customer(); } }其输出结果为:
Base type constructor was invoked.
Customer type constructor was invoked.
Base instance constructor was invoked.
Customer instance constructor was invoked.