静态

静态

类的静态成员

静态成员合非静态成员区别,前者属于类,不属于实例,因此调用必须通过类名,而不能通过类的实例去调用,后者总是与特定的对象相关联

实际中,当类的成员所引用的操作合类有关,但是合实例化对象无关时就可以定义为静态成员

如:想统计同类对象的数量,就可以使用静态字段,和静态方法去实现

 

public class Student{
        private static int males;    //  人数
        private static int females;   //  人数
        private static int number;   // 总数
        public string  name;
        public int  age ;
        public char sex ;
        public Student(string name , int age,char sex ){
            this.name = name ;
            this.age = age ;
            if(sex== 'w')females++;  
            if(sex== 'm') males++; 
        }
        static Student() {
            males = 0; females = 0 ;number = 0;
        }
        public static void GetNmb(out int males ,out int females )
        {
            males = Student.males;     // this.males 点不出来,不属于任何对象
            females = Student.females;
        }
    }
         class MainClass
            {
                public static void Main (string[] args)
              {  
                Student a = new Student ("小明", 1, 'w');
                Student a1 = new Student ("小王", 1, 'm');
                Student a3 = new Student ("小雷", 1, 'm');
                int m;  
                int f;   
                Student.GetNmb (out m, out f);
                Console.Write ("男生{0},女生{1}", m, f);  // 男生 2 女生 1 

              }
        }

非静态方法和静态方法

非静态方法也叫实例方法,可以直接访问静态成员,也可以直接访问非静态成员(把静态数据和非静态数据相互关联)但静态方法中,只能访问静态字段,不可以访问实例成员,调用实力方法(只需要管理好自己的类中的静态信息)

类构造函数和静态构造函数:

1类构造函数

为了实例化对象而生的,构造函数重载时为里实例化对象时,必须赋特定的初始值,或者方便实例化对象时,同时给类的字段赋值而存在的

Public 函数名(){};

//重写默认构造函数,之后实例化的对象都会按这样的默认初始值赋值,同时系统自带的会消失(没消失前,实例化的对象都是按系统默认的初始值赋值,如 int a = 0 ; bool b = false;)

Public Student(){

  Name = “”;

  Age = “13”;

}

//方便赋值

Public Student(string name,int age){

this.name = name;

this.age = age;

}

2 静态构造函数

则是只为了初始化静态字段存在的,别不对类的特定实例进行操作。所以有全局构造函数,共享构造函数的说法

Static 函数名(){}

Public class Student{

Private static int males;    // 女 人数

Private static int females;   // 男 人数

Private static int number;   // 总数

   // 注意静态构造函数不支持重载,不允许定义多个静态构造函数;()

Static Student() {

    males = 0; females = 0 ;number = 0;

}

}
3  什么时候会调用静态构造函数?
1)如果当前的类是静态类,当我们第一次访问这个类的静态成员的时候,就会调用静态构造函数 , 只有在第一次访问静态成员的时候调用,之后的访问不再调用
2)如果当前的类不是静态类
         1.通过类名.静态成员名  第一次访问类成员的时候,会自动调用静态构造函数
          2.当第一次实例化该类对象的时候,会自动调用静态构造函数
       3.只能执行上面2种情况中的一种,哪一种先满足,就先执
         4.不管静不静态只要是使用  静态成员/或实例化的时候都会先调用一次默认的构造函数
        5.静态构造函数要先于默认构造函数执行,
        6. 一个普通的类中,当存在静态成员的的时候,系统就会默认添加一个静态构造函数
      7.静态构造函数必须是无参数的

静态类

当类只有静态成员的时候,通常把类改为静态类

静态类多用于保存工具使用;

.net 中的Console  Math  
 静态类,占用了静态区,可以直接使用,且运行时一直占用的内存。

 非静态类中的静态成员也是如此

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值