public class Test
{
/// <summary>
/// 静态字段初始化器会在调用静态构造器前运行。
/// 如果类型没有静态构造器,字段会在类型被使用前或运行时中更早的时间进行初始化.
/// 静态字段初始化器按照字段声明的先后顺序运行。
/// </summary>
public static int X = Y;//静态字段初始化器
public static int Y = 3;//静态字段初始化器
public static int Z = 6;//静态字段初始化器
public static int ZX = Z;//静态字段初始化器
/// <summary>
/// 静态构造器,一个类型只能定义一个静态构造器,名称必须和类名相同,且没有参数。
/// 运行时将在类型使用之前调用静态构造器,以下两种行为可以触发静态构造器执行:
/// ·实例化类型
/// ·访问类型的静态成员
/// </summary>
static Test()
{
Console.WriteLine("Test Type Initialized");
}
public Test()
{
Console.WriteLine("This is Initalize function");
}
} class ProgramA
{
static void Main()
{
Test t = new Test();
Console.WriteLine("X is "+Test.X);
Console.ReadLine();
}
}

OUTPUT:

Test Type Initialized
This is Initalize function
X is 0

输出结果正证实了:静态构造器只会执行一次。

class ProgramA
{
static void Main()
{
Console.WriteLine("Z is " + Test.Z);
Console.WriteLine("ZX is "+Test.ZX);
Console.ReadLine();
}
}

output:

Test Type Initialized
Z is 6
ZX is 6

输出结果正证实了:静态字段初始化器是按照顺序进行的。

class Foo
{
/// <summary>
/// 静态字段初始化器按照声明顺序运行
/// </summary>
public static Foo Instance = new Foo();
public static int X = 3;
Foo()
{
Console.WriteLine(X);
}
} class ProgramA
{
static void Main()
{
//静态字段初始化器在类型使用前就运行,所以首先是运行Instance,
//而Instance正好调用了实例构造函数,而实例构造函数打印X,而此时,
//X还没有赋值,所以打印出0,而后,才初始化X为3,再在Main()函数中打印出X,即3
Console.WriteLine(Foo.X);
Console.ReadLine();
}
}

output:

0
3

C# 之静态构造器与静态字段初始化器的更多相关文章

  1. java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数

    一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构

  2. 6 CLR静态构造器

    CLR保证一个类型构造器在每个AppDomain中只执行一次,而且这种执行是线程安全的. 作用: 就是初始化静态成员 比如有几个静态成员需要初始化那你把初始化代码放到哪呢? 放到普通构造函数里,那肯定 ...

  3. Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)

    1.执行顺序 1.1.一个类中的初始化顺序 类内容(静态变量.静态初始化块) => 实例内容(变量.初始化块.构造器) 1.2.两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)= ...

  4. 静态构造器(static constructor)

    1.定义: 静态构造函数是实现对一个类进行初始化的方法成员. 它一般用于对静态数据的初始化. 静态构造函数不能有参数,不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用. 2.特点: ...

  5. Java类的初始化顺序 (静态变量、静态初始化块、变量、初始...

    很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...

  6. 非静态代码块(非static初始化块)&静态代码块(static初始化块)

    非静态代码块: TestOrder: package com.aff.singleton; /* 类的第四个成员:初始化块(代码块) 代码块: 如果有修饰的话只能使用static 分类:非静态代码块: ...

  7. EffectiveJava(1) 构造器和静态工厂方法

    构造器和静态工厂方法 **构造器是大家创建类时的构造方法,即使不显式声明,它也会在类内部隐式声明,使我们可以通过类名New一个实例. 静态方法是构造器的另一种表现形式** 主题要点:何时以及如何创建对 ...

  8. c#基础3-方法的重载静态和非静态,字段属性,方法

    方法的重载概念:方法的重载指的就是方法的名称相同给,但是参数不同.参数不同,分为两种情况1).如果参数的个数相同,那么参数的类型就不能相同.2).如果参数的类型相同,那么参数的个数就不能相同.***方 ...

  9. 【Spring】Spring中的Bean - 2、Baen的实例化 (构造器、静态工厂、实例工厂)

    Bean的实例化 文章目录 Bean的实例化 构造器实例化 静态工厂方式实例化 实例工厂方式实例化 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-S ...

  10. C#基础知识之静态和非静态

    项目中静态和非静态常被用到,什么时候需要用静态的,什么时候需要使用非静态,以及他们的区别是什么? 一.概述 静态和非静态的不同地方,就是静态从程序一启动就会一直占用内存,而非静态只有在实例化的时候才会 ...

随机推荐

  1. 读论文-序列感知推荐系统(Sequence-Aware Recommender Systems)

    前言 今天读的论文为一篇于2018年发表在(ACM computing surveys (CSUR))的论文,这篇文章主要讲述了序列感知推荐系统(Sequence-Aware Recommender ...

  2. Selenium Javascript 滚动条操作

    js在selenium有许多应用,最主要的有滚动条操作. 实现功能:进入百度搜索结果页->滚动条分别滚到到顶部.底部及指定元素位置. 使用格式: driver.execute_script('w ...

  3. Go map字典排序

    前言 我们已经知道 Go 语言的字典是一个无序集合,如果你想要对字典进行排序,可以通过分别为字典的键和值创建切片,然后通过对切片进行排序来实现. 按照键进行排序 如果要对字典按照键进行排序,可以这么做 ...

  4. goland无法识别包

    新建 Go 项目时,一定要通过 "File -> New -> Project..." 方式建立,千万不要通过 "File -> Open", ...

  5. 漫画赏析:Linux 内核到底长啥样

    今天,我来为大家解读一幅来自 TurnOff.us 的漫画 "InSide The Linux Kernel" . TurnOff.us 是一个极客漫画网站,作者Daniel St ...

  6. VS 2022 WEB发布编译失败

    VS2022当安装在非默认路径时,每次更新后,在发布时,就会出来编译失败的提示,比如这样: C:\VS2022\Preview\MSBuild\Microsoft\VisualStudio\v17.0 ...

  7. 简易TXT文本小说阅读器

    上次学习爬取小说保存到txt文本文件,方便离线阅读,现在做一个简易TXT文本小说阅读器,支持手动翻页和自动翻页阅读. 废话不多说,直接上代码,实践下. read_txt.py: import time ...

  8. 编写你的第一个 Django 应用程序,第6部分

    本教程从教程 5 停止的地方开始.我们已经构建了一个经过测试的网络投票应用程序,现在我们将添加一个样式表和一个图像. 除了服务器生成的 HTML 之外,Web 应用程序通常需要提供呈现完整网页所需的其 ...

  9. mysql-8.0.19-winx64.zip 的安装与卸载

    一.安装 1.下载mysql 官网:https://dev.mysql.com/downloads/mysql/,本人用的目前的最新版本8.0.19,版本格式为zip,如下图 2.解压到指定路径,如下 ...

  10. vmware vsphere 6.5

    vmware vsphere 6.5是vsphere软件的经典版本,也是一款业界领先的服务器虚拟化平台,作为基础平台,是任何云计算环境的理想之选,其组件包括vCenter Server.ESXi.vS ...