威尼斯人线上娱乐

java静态构造函数,静态构造函数

27 4月 , 2019  

1.
静态构造函数用于开头化静态数据,或用来推行仅需实行二回的奇特操作。

静态构造函数,java静态构造函数

  1. 静态构造函数用于起始化静态数据,或用于试行仅需施行叁回的超过常规规操作。

  2. 静态构造函数既未有访问修饰符,也尚未参数。

三.
在创设第2个实例或引用任刘凯态成员从前,将活动调用静态构造函数来开始化类。

  1. 威尼斯人线上娱乐,没辙直接调用静态构造函数。

5.
纵然静态构造函数引发那个,运营时将不会再也调用该构造函数,并且在程序运转所在的运用程序域的生存期内,类型将保证未起始化。

    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.
静态构造函数用于初叶化静态数据,或用于施行仅需实践3次的尤其操作。 2.
静态构造函数既未有访问…

  先看一道常见标题,以下代码的实施结果是何许?

威尼斯人线上娱乐 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;
        }
    }

 

先看一道常见标题,以下代码的推行结果是怎么样?

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;
    }
}

java静态构造函数,静态构造函数。一、定义

  由名称可见,静态构造函数(也叫做类型构造函数)包蕴“静态”和“构造函数”八个特色。第3个特色决定了它与静态函数类似,只好选择静态成员;第四个特征决定了它与构造函数类似,具备开端化作用,并且未有重回值。

  与构造函数(针对实例对象)不相同的是,静态构造函数(针对类)只进行贰次,并且是在第多个实例对象创造前被调用,所以它能够用于那个只要求试行二回的操作;而且它差别意有public等修饰符,由程序自动调用,不可能被外面调用。

  总括:静态构造函数用于起头化任王琴态数据,或然用于执行仅需实施贰遍的操作;在开创第一个实例对象大概引用任李立东态变量以前,将机关调用静态构造函数。

  特点:

  1、静态构造函数既未有访问修饰符,也从没参数。

  二、在创设第一个实例或引用任陈冬冬态成员以前,将机关调用静态构造函数来开首化类。

  三、不能够直接调用静态构造函数。  

  四、在先后中,用户无法调控何时实行静态构造函数。

  伍、线程安全。

  关于线程安全供给特地说美素佳儿(Friso)下,由于程序可能在二十八线程景况下运营,也便是恐怕出现同时多少个线程图谋进行静态构造函数的景观。CL凯雷德确定保证那一个进度是平安的,实际上调用静态构造函数的线程供给先拿走多个互斥线程同步锁,假如有多少个线程试图实行项目标静态构造函数,唯有2个线程能获取该锁;获得锁的线程落成早先类型起头化操作,别的线程只好等待;当早先化完结,等待的线程被唤起,然后发掘静态构造函数已经被实践过,就不会再奉行。

二、语法  

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有静态构造函数,那么在开立第一个实例对象或许引用任白小白态变量在此以前,调用静态构造函数。

  三. 别样操作。

威尼斯人线上娱乐 2

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());
        }
    }

  总括:静态构造函数用于初阶化任李瑞态数据,大概用于实施仅需执行二遍的操作;在开立第叁个实例对象大概引用任杨雨辰态变量在此之前,将自动调用静态构造函数。

  

  特点:

  一、静态构造函数既未有访问修饰符,也向来不参数。

  贰、在创制第一个实例或引用任朱洪波态成员此前,将自行调用静态构造函数来起先化类。

  三、不恐怕直接调用静态构造函数。  

  四、在先后中,用户不能够调节何时试行静态构造函数。

  五、线程安全。

  关于线程安全要求专门说美素佳儿(Friso)下,由于程序恐怕在八线程情形下运作,约等于唯恐出现同时七个线程盘算实行静态构造函数的情事。CLKuga确认保证那些历程是安枕无忧的,实际上调用静态构造函数的线程须要先得到三个互斥线程同步锁,若是有多少个线程试图试行项目标静态构造函数,唯有三个线程能赢得该锁;获得锁的线程完毕发轫类型初叶化操作,其余线程只可以等待;当开头化达成,等待的线程被唤醒,然后发掘静态构造函数已经被奉行过,就不会再进行。

二、语法  

    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、施行各样

  一. 运维时,优先对静态变量进行初始化。

      二.
万壹有静态构造函数,那么在创造第一个实例对象或然引用任刘传江态变量在此之前,调用静态构造函数。

  三. 别样操作。


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图