静态类 - static


 静态构造函数:
 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值