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

By admin in 4858.com on 2019年4月8日

1.
静态构造函数用于初步化静态数据,或用于实践仅需执行三次的卓越操作。

4858.com 1

  先看壹道常见标题,以下代码的施行结果是什么样?

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

  1. 静态构造函数用于伊始化静态数据,或用来实施仅需进行2次的不相同常常操作。

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

三.
在创设第1个实例或引用任张进态成员在此以前,将电动调用静态构造函数来开头化类。

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

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

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个特征决定了它与构造函数类似,具有初始化功能,并且没有再次来到值。

  与构造函数(针对实例对象)分歧的是,静态构造函数(针对类)只进行三次,并且是在率先个实例对象成立前被调用,所以它能够用来这么些只供给实行三回的操作;而且它不容许有public等修饰符,由程序自动调用,不可能被外界调用。

  总结:静态构造函数用于初阶化任张进态数据,可能用于实施仅需执行一遍的操作;在创立第一个实例对象大概引用任郭潇态变量以前,将自行调用静态构造函数。

  特点:

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

  2、在创立第三个实例或引用任丁叮态成员此前,将电动调用静态构造函数来初步化类。

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

  四、在程序中,用户无法控制曾几何时实施静态构造函数。

  伍、线程安全。

  关于线程安全供给专门说雀巢下,由于程序也许在三八线程环境下运作,也便是唯恐出现同时多少个线程准备执行静态构造函数的状态。CLWrangler确定保证这一个历程是高枕无忧的,实际上调用静态构造函数的线程需求先得到贰个互斥线程同步锁,假诺有三个线程试图实施项目标静态构造函数,唯有三个线程能赢得该锁;得到锁的线程实现初阶类型起先化操作,别的线程只可以等待;当开端化实现,等待的线程被唤起,然后发现静态构造函数已经被实践过,就不会再进行。

二、语法  

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

假诺要读取的配置音讯相比较多,而且要进入1些逻辑判断,那么能够如此:

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、执行各种

  一. 周转时,优先对静态变量举办初始化。

      二.
假诺有静态构造函数,那么在开创第壹个实例对象大概引用任杨文海态变量在此之前,调用静态构造函数。

  三. 任何操作。

4858.com 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;
        }
    }

3.
在创造第一个实例或引用任朱海峰态成员从前,将活动调用静态构造函数来开首化类。

一、定义

4.
不能直接调用静态构造函数。

  由名称可见,静态构造函数(也号称类型构造函数)包括“静态”和“构造函数”五个本性。首本性情决定了它与静态函数类似,只可以动用静态成员;第一个性状决定了它与构造函数类似,具有开头化成效,并且未有重返值。

伍.
假使静态构造函数引发那些,运转时将不会再次调用该构造函数,并且在程序运营所在的施用程序域的生存期内,类型将保险未起头化。

  与构造函数(针对实例对象)区别的是,静态构造函数(针对类)只实行贰遍,并且是在首先个实例对象创立前被调用,所以它能够用于那么些只要求进行三次的操作;而且它差异意有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());
        }
    }

  总括:静态构造函数用于开始化任孙东海态数据,或然用于实践仅需实行一次的操作;在创设第二个实例对象恐怕引用任李立东态变量在此之前,将活动调用静态构造函数。

  

  特点:

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

  二、在创设第一个实例或引用任张娜态成员从前,将电动调用静态构造函数来初始化类。

  三、不可能间接调用静态构造函数。  

  四、在先后中,用户不能控制什么日期实施静态构造函数。

  五、线程安全。

  关于线程安全须要特地说美素佳儿下,由于程序大概在10二线程环境下运作,也便是恐怕出现同时多少个线程准备进行静态构造函数的情事。CLQX56确定保障那几个进度是平安的,实际上调用静态构造函数的线程须要先获得多少个互斥线程同步锁,若是有三个线程试图实施项目标静态构造函数,唯有3个线程能博得该锁;得到锁的线程达成伊始类型起首化操作,别的线程只可以等待;当初步化达成,等待的线程被唤醒,然后发现静态构造函数已经被执行过,就不会再实施。

二、语法4858.com ,  

    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变量未被正确配置!");
            }
        }
    }  

四、执行顺序

  一. 运作时,优先对静态变量举行起始化。

      二.
假设有静态构造函数,那么在开创第一个实例对象也许引用任吴彤态变量以前,调用静态构造函数。

  三. 其它操作。

发表评论

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

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有