• 静态成员 执行顺序


    静态构造函数:
    (1 )用于对静态字段、只读字段等的初始化。              
    (2 )添加static 关键字,不能添加访问修饰符,因为静态构造函数都是私有的。        
    (3 )类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数
    (4 )静态构造函数是不可继承的,而且不能被直接调用。            
    (5 )如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。    
    (6 )任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。  
    (7 )如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。

    非静态构造函数也适用:调用任何静态成员时,先要按照文本顺序执行那些初始值设定项,先静态字段,后一般字段。

    1.当一个类被实例化时,首先检查类中的静态字段是否已经初始化,如果没有初始化,将最先执行静态字段的初始化代码。(如果静态字段的初始化代码中又调用 了另一个类中的静态字段,将最优先执行另一个类中的静态字段的初始化。)接着,将执行非静态字段的代码,然后再执行类的构造函数。 
      2.当调用类的静态方法或属性时,也是首先检查类中的静态字段是否已经初始化,如果没有初始化,将最先执行静态字段的初始化代码。接着再执行静态方法或属性内部的代码。 
      3.某个函数体中存在使用了某个类的静态字段时,无论静态字段在函数体的什么位置,只要这个静态字段没有被初始化,将优先于执行这个函数之前,执行该静态字段的初始化(实际上将该类中的所有静态字段都初始化了)。

    Java 代码

    1. **************************************************   
    2. *  静   态   构   造   函   数   练   习   
    3. *  (1 ) ①②③…… 为执行顺序   
    4. *  (2 )输出结果:   static A()   
    5. * static B()   
    6. * X = 1 ,   Y = 2   
    7. ***************************************************/   
    8. using System;   
    9. class A   
    10. {   
    11. public static int X;   
    12.   
    13. static A() // ④  执行完后返回到 ③   
    14. {   
    15. X = B.Y + 1 ;   
    16. Console.WriteLine("static A()");   
    17. }   
    18. }   
    19.   
    20. class B   
    21. {   
    22. public static int Y = A.X + 1 ; // ③  调用了A 的静态成员,   
    23. //  转到A 的静态构造函数---->   
    24.   
    25. static B() // ②  如果带有初始值设定项的静态字段,   
    26. //  执行该类的静态构造函数时,   
    27. //  先要按照文本顺序执行那些初始值设定项。   
    28. //  转到初始值设定项---->   
    29. {   
    30. Console.WriteLine("static B()");   
    31. }   
    32.   
    33. static void Main() // ①  程序入口,   
    34. //  如果类中包含用来开始执行的   Main  方法,   
    35. //  该类的静态构造函数将在调用   Main  方法之前执行。   
    36. //  转到B 的静态构造函数---->   
    37. {   
    38. Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);// ⑤  输出结果   
    39. Console.ReadLine();   
    40. }   
    41. }  
  • 相关阅读:
    配置PyCharm(背景色+字体大小+解释器选择)
    面向对象的三大特性(封装、继承、多态)
    hashlib模块
    logging模块
    Mac OSX系统、Linux、Windows命令行教程
    Python2和Python3的一些语法区别
    python——内置函数和lambda匿名函数
    python——异常处理
    SVN
    实体框架Entity Framework 4.1快速入门
  • 原文地址:https://www.cnblogs.com/jiese/p/2044037.html
Copyright © 2020-2023  润新知