一.
静态构造函数用于初始化静态数据,或用来实行仅需进行3次的至极操作。
静态构造函数,java静态构造函数
-
静态构造函数用于开始化静态数据,或用来实践仅需试行二遍的新鲜操作。
-
静态构造函数既未有访问修饰符,也未尝参数。
三.
在制造第多个实例或引用任罗庆久态成员之前,将自行调用静态构造函数来初阶化类。
- 亚洲必赢官网,静态构造函数。无法直接调用静态构造函数。
伍.
万1静态构造函数引发那么些,运转时将不会重新调用该构造函数,并且在程序运转所在的选取程序域的生存期内,类型将维持未开头化。
class Program
{
static void Main(string[] args)
{
// 在bus1实例化后调用静态构造函数,只调用一次
Bus bus1 = new Bus(71);
Bus bus2 = new Bus(72);
bus1.Drive();
System.Threading.Thread.Sleep(3600);
bus2.Drive();
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
public class Bus
{
protected static readonly DateTime globalStartTime;
protected int RouteNumber { get; set; }
static Bus ()
{
globalStartTime = DateTime.Now;
Console.WriteLine("static constructor sets global start time to {0}", globalStartTime.ToLongTimeString());
}
public Bus (int routeNum)
{
RouteNumber = routeNum;
Console.WriteLine("Bus #{0} is created", RouteNumber);
}
public void Drive()
{
TimeSpan elapsedTime = DateTime.Now - globalStartTime;
Console.WriteLine("{0} is starting its route {1:N2} minutes after global start time {2}", this.RouteNumber, elapsedTime.TotalMilliseconds, globalStartTime.ToLongTimeString());
}
}
一.
静态构造函数用于先导化静态数据,或用来施行仅需执行1遍的例外操作。 2.
静态构造函数既未有访问…
先看一道常见题目,以下代码的施行结果是哪些?
2.
静态构造函数既未有访问修饰符,也尚未参数。
class A
{
public static int X = B.Y + 1;
static void Main(string[] args)
{
Console.WriteLine(X);
}
}
class B
{
public static int Z = 10;
public static int Y;
static B()
{
Console.WriteLine(Z);
Y = A.X + 1;
}
}
先看一道常见标题,以下代码的实行理并了结果是如何?
class A
{
public static int X = B.Y + 1;
static void Main(string[] args)
{
Console.WriteLine(X);
}
}
class B
{
public static int Z = 10;
public static int Y;
static B()
{
Console.WriteLine(Z);
Y = A.X + 1;
}
}
一、定义
由名称可见,静态构造函数(也称为类型构造函数)包涵“静态”和“构造函数”八个特点。第二个特点决定了它与静态函数类似,只好选拔静态成员;第3个特色决定了它与构造函数类似,具备早先化作用,并且未有重临值。
与构造函数(针对实例对象)分化的是,静态构造函数(针对类)只进行三次,并且是在率先个实例对象创设前被调用,所以它能够用于那一个只供给执行1遍的操作;而且它不容许有public等修饰符,由程序自动调用,无法被外界调用。
总结:静态构造函数用于起头化任张珈铭态数据,大概用于推行仅需进行1次的操作;在开创第3个实例对象只怕引用任赵琦态变量在此之前,将机关调用静态构造函数。
特点:
一、静态构造函数既未有访问修饰符,也未曾子舆数。
2、在创制第1个实例或引用任任凯态成员从前,将电动调用静态构造函数来起先化类。
三、无法直接调用静态构造函数。
肆、在先后中,用户不能够调控哪天实施静态构造函数。
5、线程安全。
关于线程安全供给特地说Bellamy(Bellamy)下,由于程序只怕在多线程境况下运营,也正是唯恐出现同时四个线程准备实行静态构造函数的状态。CL君越确定保障那些进程是安全的,实际上调用静态构造函数的线程要求先得到2个互斥线程同步锁,假如有多少个线程试图施行项目的静态构造函数,只有3个线程能赢得该锁;获得锁的线程完结开首类型起始化操作,别的线程只可以等待;当初叶化完结,等待的线程被升迁,然后发掘静态构造函数已经被推行过,就不会再进行。
二、语法
public class StaticTester
{
static StaticTester()
{
}
}
三、作用
用于早先化静态成员。有时候大家会从配置文件读取一些值作为静态变量,类似那样:
public class StaticTester
{
private static readonly string key = ConfigurationManager.AppSettings["key"];
private static readonly string value = ConfigurationManager.AppSettings["value"];
static StaticTester()
{
}
}
即便要读取的配备信息比较多,而且要进入一些逻辑判定,那么能够如此:
public class StaticTester
{
private static readonly string key;
private static readonly string value;
static StaticTester()
{
key = ConfigurationManager.AppSettings["key"];
if (string.IsNullOrEmpty(key))
{
throw new Exception("key变量未被正确配置!");
}
value = ConfigurationManager.AppSettings["value"];
if (string.IsNullOrEmpty(value))
{
throw new Exception("value变量未被正确配置!");
}
}
}
肆、实践顺序
1. 运作时,优先对静态变量实行起首化。
二.
只要有静态构造函数,那么在创立第1个实例对象恐怕引用任梁志成态变量以前,调用静态构造函数。
3. 任何操作。
3.
在创建第二个实例或引用任张树涛态成员从前,将电动调用静态构造函数来初叶化类。
一、定义
四.
无法直接调用静态构造函数。
由名称可见,静态构造函数(也称之为类型构造函数)包含“静态”和“构造函数”三个特征。第三个特征决定了它与静态函数类似,只好利用静态成员;第四脾性情决定了它与构造函数类似,具有初叶化成效,并且未有再次来到值。
伍.
只要静态构造函数引发那多少个,运转时将不会重新调用该构造函数,并且在程序运转所在的利用程序域的生存期内,类型将维持未初步化。
与构造函数(针对实例对象)不一样的是,静态构造函数(针对类)只举行二遍,并且是在率先个实例对象创设前被调用,所以它可以用于那多少个只要求施行一次的操作;而且它不容许有public等修饰符,由程序自动调用,无法被外界调用。
class Program
{
static void Main(string[] args)
{
// 在bus1实例化后调用静态构造函数,只调用一次
Bus bus1 = new Bus(71);
Bus bus2 = new Bus(72);
bus1.Drive();
System.Threading.Thread.Sleep(3600);
bus2.Drive();
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
public class Bus
{
protected static readonly DateTime globalStartTime;
protected int RouteNumber { get; set; }
static Bus ()
{
globalStartTime = DateTime.Now;
Console.WriteLine("static constructor sets global start time to {0}", globalStartTime.ToLongTimeString());
}
public Bus (int routeNum)
{
RouteNumber = routeNum;
Console.WriteLine("Bus #{0} is created", RouteNumber);
}
public void Drive()
{
TimeSpan elapsedTime = DateTime.Now - globalStartTime;
Console.WriteLine("{0} is starting its route {1:N2} minutes after global start time {2}", this.RouteNumber, elapsedTime.TotalMilliseconds, globalStartTime.ToLongTimeString());
}
}
总计:静态构造函数用于起初化任陈蓉态数据,或然用于实践仅需实践一次的操作;在开立第2个实例对象可能引用任杨东态变量从前,将自动调用静态构造函数。
特点:
壹、静态构造函数既没有访问修饰符,也尚无参数。
2、在成立第3个实例或引用任王姝态成员在此之前,将自动调用静态构造函数来早先化类。
三、不可能直接调用静态构造函数。
4、在先后中,用户不能够调节何时实行静态构造函数。
伍、线程安全。
关于线程安全须要专门说多美滋下,由于程序恐怕在二十四线程景况下运营,也正是唯恐现身同时多少个线程筹划实行静态构造函数的动静。CLTucson确认保障这一个进度是安全的,实际上调用静态构造函数的线程要求先取得多个互斥线程同步锁,要是有多少个线程试图施行项目标静态构造函数,唯有二个线程能获得该锁;得到锁的线程落成起先类型初叶化操作,别的线程只好等待;当初步化实现,等待的线程被唤醒,然后发掘静态构造函数已经被执行过,就不会再实践。
二、语法
public class StaticTester
{
static StaticTester()
{
}
}
三、作用
用于开端化静态成员。有时候我们会从布置文件读取一些值作为静态变量,类似那样:
public class StaticTester
{
private static readonly string key = ConfigurationManager.AppSettings["key"];
private static readonly string value = ConfigurationManager.AppSettings["value"];
static StaticTester()
{
}
}
假设要读取的布署新闻相比较多,而且要参与一些逻辑判定,那么能够这么:
public class StaticTester
{
private static readonly string key;
private static readonly string value;
static StaticTester()
{
key = ConfigurationManager.AppSettings["key"];
if (string.IsNullOrEmpty(key))
{
throw new Exception("key变量未被正确配置!");
}
value = ConfigurationManager.AppSettings["value"];
if (string.IsNullOrEmpty(value))
{
throw new Exception("value变量未被正确配置!");
}
}
}
4、试行各样
一. 运行时,优先对静态变量实行最先化。
二.
万1有静态构造函数,那么在开创第多个实例对象也许引用任黄澜态变量从前,调用静态构造函数。
3. 别样操作。