在C#中有静态构造器,它的作用就是在类被加载的时候用来进行一些静态初始化工作。它不能有参数,不能有修饰
符 (永远是private),也不能被调用。只是在类加载的时候被CLR调用。而在JAVA中有静态语句块,它也是用来进行一
些静态初始化工作。觉得这两种进制所达到的目的应该是一样的。至于C#中的静态构造器还有以下特性:
1 C#中对静态成员的初始化一定是在执行静态构造器以前执行的。(注意:JAVA中静态代码的执行和静态成员的初始
化顺序依赖于书写的顺序)特别值得注意的是如果要对静态成员初始化,但是没有显示的声明一个静态构造子的话,那
么编译器会自动帮我们生成一个静态的构造器,并且把静态初始化代码放到静态构造器的第一行。下面以代码来说明一
下。
java 代码
- class A {
- static {
- System.out.println("i am a static block");
- }
- public static int i = p();
- static int p(){
- System.out.println("p");
- return 1 ;
- }
- }
- class Test{
- public static void main(String [] args){
- System.out.println(A.i);
- }
- } 上面代码执行结果为:
- i am a static constructor
- p
- 1
c# 代码
- using System;
- class A {
- static A(){
- Console.WriteLine("i am a static constructor");
- }
- public static int i = p();
- static int p(){
- Console.WriteLine("p");
- return 1 ;
- }
- }
- class Test{
- static void Main(){
- Console.WriteLine(A.i);
- }
- } 以上代码运行结果如下:
- p
- i am a static constructor
- 1
通过上面两个简短的例子就说明:虽然这两种机制所达到的目的是一样的。但是在执行顺序上有一定的不同。