static你虽安静腼腆,却不太容易搞定……

static这个妹子,如果你想泡上她,真的得需要动脑力,而不是动每个男人都会的体力……

(2014-2-4声明:我在分析static时写到“当然也可以先创建对象,再通过对象来调用”,这是极其错误的!实验证明:对于静态成员,只能通过类名.静态成员名来调用,而无法通过一个具体的对象引用来调用,因为静态成员是不属于某一个对象的,而是属于某一个类的,对我的失误特此道歉!我又更深入地分析了静态变量,在我的另一篇文章中,敬请阅读……)

一:这个妹子的个性……

从内存分析上看,静态变量会被存放在静态存储区中(注意区分java中存放静态变量和字符串常量的data segment,c#中所有的静态成员都存放在静态存储区中,不要搞混了)。静态方法和静态变量呢都不属于任何一个对象,而是属于一个整个的类。像非静态的成员变量会单独属于一个对象,创建几个对象,在每个对象中都会包含这个成员变量,但静态变量就在静态存储区中,它在整个程序运行过程中,独一份!

从一段程序理解静态变量不属于任何一个对象:




如上图所示,静态变量sid存在于静态存储区中(图片中所写的data segment系我的失误,应该就是静态存储区),每次new Person时,因为构造方法中有sid ++;所以每new出一个人,其sid的值都会加1。

二:怎么同static妹子搭讪呢……

1)对于静态变量和静态方法,只能用类名.变量名/类名.方法名来调用。如果调用静态变量名和静态方法时,在同一个类中,则可以省去类名,即直接写其变量名或方法名,即可实现调用。(补充……静态变量属于类变量,不属于任何一个方法,在C#中,一个方法内定义一个静态变量是编译报错的!如何理解这一点呢?这样想……方法内的局部变量在方法执行完后会自动销毁,但静态变量在程序运行中就独一份,销毁不了也不能销毁,所以编译器就不让它被定义在方法内……)

2)为何非静态变量或静态方法必须要创建对象后才能调用呢……

之前我们说过静态变量和静态方法不属于任何一个对象,是个公用的,所以不创建对象就能使用呀。但非静态的可就不行了……非静态的都存在于自己的单独的对象中才能被使用,所以你不创建对象,怎么能使用这些非静态的变量和方法呀……

3)为何静态的方法中不能直接调用非静态的变量,必须创建对象后才能调用……

静态的方法就是不针对于任何一个对象,没有任何一个对象可以托付终身,但非静态的变量必须存在于一个对象中,所以,你在这样一个没有任何对象的方法中想要直接调用非静态的变量,那非静态的变量肯定不会听你的话,因为人家连个调用它的对象也没有呀,所以此时必须要在非静态的方法中new出一个对象,然后用这个对象去调用非静态的方法才行……比如我们大家最熟悉的static void main(string[] args)

最后,泡妹子,真的需要头脑,泡上之后,才再去考虑自己的体力如何呢……

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值