zoukankan      html  css  js  c++  java
  • static的用法详解

    一、静态类

      [1] 仅包含静态成员。

      [2] 静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化。也就是说,不能使用 new 关键字创建静态类类型的变量。

      [4] 不能包含实例构造函数。

      [5] 如果一个类下面的所有成员,都需要被共享,那么可以把这个类定义为静态类。

    二、静态成员

      1、通过static关键字修饰,是属于类,实例成员属于对象,在这个类第一次加载的时候,这个类下面的所有静态成员会被加载。

      2、静态成员只被创建一次,所以静态成员只有一份,实例成员有多少个对象,就有多少份。

      3、类加载的时候,所有的静态成员就会被创建在“静态存储区”里面,一旦创建直到程序退出,才会被回收。

      4、成员需要被共享的时候,方法需要被反复调用的时候,就可以把这些成员定义为静态成员。

      5、在静态方法中,不能直接调用实例成员,因为静态方法被调用的时候,对象还有可能不存在。

      6、this/base 关键字在静态方法中不能使用,因为有可能对象还不存在。

      7、在实例方法中,可以调用静态成员,因为这个时候静态成员肯定存在。

      8、非静态类可以包含静态的方法、字段、属性或事件;

      9、静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例成员;

      10、虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,不属于类的实例。

    三、静态构造函数

      1、静态类可以有静态构造函数,静态构造函数不可继承;
      2、静态构造函数可以用于静态类,也可用于非静态类;
      3、静态构造函数无访问修饰符、无参数,只有一个 static 标志;
      4、静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。

      例如:

    class Program
     {
             public static int i =0;
             public Program()
             {
                 i = 1;
                 Console.Write("实例构造方法被调用");
             }
             static Program()
             {
                 i = 2;
                 Console.Write("静态构造函数被执行");
             }
             static void Main(string[] args)
             {
                 Console.Write(Program.i);//结果为2,首先,类被加载,所有的静态成员被创建在静态存储区,i=0,接着调用了类的成员,这时候静态构造函数就会被调用,i=2
                 Program p = new Program();
                 Console.Write(Program.i);//结果为1,实力化后,调用了实例构造函数,i=1,因为静态构造函数只执行一次,所以不会再执行。
             }
     }

     

  • 相关阅读:
    97. Interleaving String
    96. Unique Binary Search Trees
    95. Unique Binary Search Trees II
    94. Binary Tree Inorder Traversal
    odoo many2many字段 指定打开的form视图
    docker sentry 配置文件位置
    postgres 计算时差
    postgres 字符操作补位,字符切割
    postgres判断字符串是否为时间,数字
    odoo fields_view_get
  • 原文地址:https://www.cnblogs.com/sylone/p/9509258.html
Copyright © 2011-2022 走看看