黑马程序员--静态方法和静态类
静态 | 实例(非静态) |
static关键字 | 不需要static关键字 |
使用类名调用 | 使用实例对象调用 |
在静态方法中可以访问静态成员 | 在实例方法中:可以直接访问静态成员 |
在静态方法中,不可以直接访问实例成员,需要创建对象,通过对象调用 | 在实例方法中,可以直接访问实例成员 |
调用前初始化 |
实例化对象时初始化 |
class Myclass { //以下为非静态成员 public int num; public Myclass() { } public void Func() { num1++; } //以下为静态成员 public static int num1; static Myclass()//静态构造方法只调用一次,在第一次创建对象的时候调用 { Myclass.num1 = 10;//为静态字段初始化 } public static void Func1() { num1++; } } class Program { static void Main(string[] args) { //如何调用,非静态的通过实例对象调用 //Myclass c=new Myclass(); // c.num=0; //静态成员的调用,直接由"类名.成员名"调用 // Myclass.num1=0; //值的变化 //非静态的 Myclass m1=new Myclass();//先调用静态构造方法,再调用实例构造方法 Myclass m2=new Myclass(); // m1.num=100; // Console.WriteLine(m2.num);//结果为0 //静态的就是全局的 m1.Func(); m2.Func(); Myclass.Func1(); Console.WriteLine("静态字段num1:" + Myclass.num1);//结果为3 Console.ReadKey(); } }
程序云运行时,内存分为三大模块。第一个模块是线程栈内存(方法运行时使用的内存),第二个模块是托管堆内存,第三个模块静态存储区,专门存储静态数据,从开始创建到程序运行结束的时候才释放数据。
所以静态区是指支撑整个程序运行时的一些方法或字段数据等需要一直驻留在内存中,使用一块静态存储区存放这些数据。从第一次访问这个类开始创建对象,只会创建一次,并在程序结束后才会释放。我们在开发的时候,尽量少用静态字段,而采用静态方法,因静态字段一直占用内存,很容易让程序崩溃掉。
例子:
calss Programe{
static List<string> ls=new List<string>();
static void Main(string[] args){
int i=0;
while(i++>=0){
s.Add("0000000000");
}
}
}
运行后,程序崩溃,电脑蓝屏了。
静态构造方法
静态构造方法初始化静态字段,静态构造方法也叫类的构造方法。整个程序的执行,会首先执行类的静态构造方法。然后才会执行实例的构造方法。静态构造方法只执行一次。
静态类
语法:用static关键字表示静态类,
static class 类名{
}
注意事项:静态类中只能定义静态成员 静态类中只能有一个静态构造函数
为什么要有静态类:因某些功能需要频繁的调用,如果每次调用都创建对象,则会消耗资源,需要频繁调用垃圾回收器,造成性能上的损失。所以我们采用了静态类,比如Console类
我叫小小菜,想要成为一棵大大包心菜.