构造函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造函数相关的知识,希望对你有一定的参考价值。
1.没有提供构造函数,系统会提供一个无参构造函数。提供了构造函数,系统就不会踢狗默认构造函数。
2.私有构造函数
1 public class MyNumber 2 { 3 private int number; 4 private MyNumber(int number) 5 { 6 this.number = number; 7 } 8 }
仅有私有构造函数,类就不能在外部被实例化。它下下面两种情况下是有用的:
1.类仅当作某些静态成员或静态属性的容器,因此它永远不需要实例化。这样就像静态类一样。
2.希望类仅能通过调用某个静态成员函数来实例化(这就是类工厂方法)。
3.静态构造函数
1 class MyClass 2 { 3 static MyClass() 4 { 5 // 做初始化工作,只能访问类的静态成员 6 } 7 }
静态构造函数没有修饰符,它由.Net运行库调用它,所以public、private等修饰符对它没有意义。
编写静态构造函数的一个原因是,类有一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性。
静态构造函数不能带参数,一个类只能有一个静态构造函数。
静态构造函数虽然无参,但它与无参实例构造函数并不冲突,尽管它们的参数列表相同。静态构造函数会确保在实例构造函数之前执行。
静态构造函数只能访问类的静态成员,不能访问实例成员。
.Net运行库没有确保什么时候执行静态构造函数,所以不能把要求在某个特定时刻运行的代码放在静态构造函数中。
但是可以确保静态构造函数至多运行一次,即在代码引用类之前调用它。通常在第一次调用类的任何成员之前执行静态构造函数(调用静态成员或实例化之前)。
1 //当调用静态字段时,先执行静态字段的初始化,再执行静态构造函数 2 //当实例化类时,先执行静态字段的初始化,再执行静态构造函数,最后执行实例构造函数 3 public class MyClass 4 { 5 public MyClass() 6 { 7 Console.WriteLine("实例构造函数"); 8 } 9 10 static MyClass() //只会运行一次 11 { 12 Console.WriteLine("静态构造函数"); 13 } 14 15 public static int a = 10; //只会初始化一次 16 17 public static int b = init(); //只会初始化一次 18 19 private static int init() 20 { 21 Console.WriteLine("静态变量 b 初始化"); 22 23 return 30; 24 }
以上是关于构造函数的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段