静态类 - static

来源:互联网 发布:不用网络的赛车游戏 编辑:程序博客网 时间:2024/06/06 16:43

 静态构造函数:
 1.一定是静态类才有静态构造函数吗? 错的
 
静态构造函数的特点:
  1.静态函数没有访问修饰符(默认修饰符为private,但是你不能写出来)
  2.静态函数是系统默认调用,程序员无法手动调用
  3.如果类没有静态构造函数,而此时类中又包含静态字段(未初始化的),那么此时编译器会默认生成静态构造函数
  4.在静态类中或者静态方法中不能使用对象
  5.如果类中包含静态成员,且没有被初始化,系统会默认提供一个默认的值,这也间接的说明了
  我们不可以直接调用静态构造函数,也没有办法控制静态函数的执行时间
  6.静态构造函数只能被调用一次,并且不能有重载
  7.静态构造函数不能有形式参数
  8.虽然静态构造函数和普通构造函数名字一样,但是系统规定他两可以共存,尽管参数列表一样
  9.静态构造函数是在普通构造函数调用之前执行,一般情况下用于初始化静态字段,
  或者拦截在实例化之前处理某些特定情况,可以再该函数实现


 
 用static修饰的类为静态类
 静态的特点:
 1.静态类不能被直接实例化
 2.静态不能被继承
 3.静态类中不能包含实例成员
 4.静态类就是特殊的密封类
 5.静态类中虽然不能包含实例成员,但是可以有常量(const常量)
 6.静态类和实例调用方式不一样,普通类是以 "实例." 的方法进行调用
 而静态类是以 "类名." 的方式进行调用
 7.静态类的访问速度相对而言比实例类要快得多
 8.如果类中包含静态构造函数和函数的入口Main函数,此时静态函数会在main函数之前调用

 9.如果类中包含静态构造函数并不包含main函数,此时会先执行main函数再执行静态构造函数


using System;namespace 静态类 {class Person {public string name;// 普通字段public static string sex = "男";// 静态字段// 构造函数public Person () {Console.WriteLine ("普通构造函数被调用!~");}// 静态构造函数static Person () {Console.WriteLine ("静态构造函数被调用!~");}}class MainClass {// 练习1:定义一个静态类,计算一个数组的求和// 练习2:在上面的条件下,将数组的求和输出到一个变量中(静态成员变量),打印该静态成员变量的值public static void Main (string[] args) {new Person ();}}}/* * using System;namespace 静态类 {// 静态 static // 静态的字段、属性或者方法,只能由类调用,不能够由实例调用// 使用类创建的对象的过程叫做实例化,对象也可以称作实例// 静态类// 在静态类中,只能包含静态的成员(字段、属性、方法)、const常量public static class A {public static int i;// 静态类不能有实例的构造函数//public A (){////}// 1.静态构造方法前不允许添加访问修饰符// 2.静态构造方法存在于静态类中;也可以存在于普通类中// 3.静态构造会在第一次实例化或调用静态成员时调用// 静态构造方法// 静态构造方法会在首次访问类中的静态成员时调用static A (){Console.WriteLine ("A的静态构造方法!~");}// 静态方法public static void Test(){Console.WriteLine ("Test");}}public class B {public static int age;// 静态构造会在创建对象并初始化之前调用static B(){Console.WriteLine ("B的静态构造方法!~");}}class MainClass {public static void Main (string[] args) {// 这样调用就不行了,i 这时是一个//A a = new A ();//a.i = 10;//Console.WriteLine (a.i);// 直接使用类名调用静态成员//A.i = 10;//Console.WriteLine (A.i);//A.Test ();//B b = new B();B.age = 10;// 在内存中一共有5个区域// 1.堆区 - 需要程序员手动开辟并管理内存// 2.栈区 - 由系统自动完成内存管理// 3.静态区(全局区) - 程序运行过程中内存中的数据一直存在// 4.常量区 - 用于存放常量// 5.代码区 - 存放程序运行所需要的代码}}}*/



0 0