静态构造函数:
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.代码区 - 存放程序运行所需要的代码
}
}
}
*/