黑马程序员技术交流社区

标题: C# 中的静态成员和非静态成员 [打印本页]

作者: 于振发    时间: 2013-10-2 20:19
标题: C# 中的静态成员和非静态成员
    为什么调用一个类中的静态成员就不用实例化这个类呢?  为什么调用一个非静态成员就必须要实例化这个类呢
      同是定义的一个类?差距怎么就这么大呢? 为什么加了个static 就截然不同了? 请各路英雄豪杰,纷来指教!

作者: lgh521911    时间: 2013-10-2 21:10
这个问题我也不太懂,但是我也学习了,还要深入的去看看,问过度娘了,找到了这个

非静态成员的存在依赖于实例,所以也可可以称为实例成员。

类中的成员包括:

数据成员:
数据成员可以分静态变量、实例变量两种.
静态成员:静态成员变量是和类相关联的,可以作为类中"共"有的变量(是一个共性的表现),他不依赖特定对象的存在,访问的时候通过类名加点操作符加变量名来访问.
实例成员:实例成员变量是和对象相关联的,访问实例成员变量依赖于实例的存在.

函数成员:
方法可以主要分为静态方法,实例方法
静态方法:静态方法是不属于特定对象的方法,静态方法可以访问静态成员变量,静态方法不可以直接访问实例变量,可以在实例函数调用的情况下,实例变量做为参数传给静态方法。静态方法也不能直接调用实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用实例方法,但可以调用静态方法。
实例方法:一个实例方法的执行与特定对象关联,他的执行需要一个对象存在。实例方法可以直接访问静态变量和实例变量,实例方法可以直接访问实例方法、和静态方法,静态方法的访问方式为类名加点操作符加变量名。当多个实例对象存在时,内存中并不是存在美个特定的实例方法的拷贝,而是,相同类的所有对象都共享每个实例方法的一个拷贝(实例方法只占用“一套”空间)。
希望能帮助你,我会关注,马群里其他的看法,不求加分,只求进步,高风亮节哦
作者: 七里香    时间: 2013-10-2 21:12
这是由于他们的加载方式不同,静态成员在程序开始的时候就会加载到内存里面,所以能够直接调用,而非静态成员并不占用类存,只有当你实例化一个对象的时候才会在内存中开辟出一块空间给对象所以不能够直接调用。
关于为什么加static就完全不同,我只能说这是c#语言的规范。没别的解释。如果c#要定义另一个关键字作为静态声明关键字,你也得用。。。{:soso_e103:}
作者: SunshineGirl    时间: 2013-10-11 10:18
亲,有同学给你回答了,设置成已解决,这样才能加分。
作者: lgh521911    时间: 2013-10-11 11:53
黑马蔡红微 发表于 2013-10-11 10:18
亲,有同学给你回答了,设置成已解决,这样才能加分。

亲,老师,这个家伙很懒,估计技术分够了,小样儿的就不回来了哦:L
作者: ˋ初°见    时间: 2013-10-11 12:31
静态属于类,而非静态属于对象,所以调用静态时,只需要类名来调用,而调用非静态需要先new一个对象,通过对象来调用。
作者: 夏闯富    时间: 2013-10-12 10:46
本帖最后由 夏闯富 于 2013-10-12 10:49 编辑

静态类与非静态类的用途是有区别的,包含不与特定对象关联的类   通常使用静态类。
反之则用非静态类。
静态类的特点:
仅包含静态成员。
不能被实例化。
是密封的。
不能包含实例构造函数。

因此创建静态类与创建仅包含静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化
非静态类特点与之相反
作者: 无风的风    时间: 2013-10-13 16:20
根据我找的资料以及加上的自己的理解:
首先;数据成员可以分静态变量、非静态变量两种.
静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.

非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中..

当然, 一个类中也可以包含静态成员和非静态成员,类中也包括静态构造函数和非静态构造函数..

希望能帮到你~·

作者: lgh521911    时间: 2013-10-14 19:23
lgh521911 发表于 2013-10-2 21:10
这个问题我也不太懂,但是我也学习了,还要深入的去看看,问过度娘了,找到了这个

非静态成员的存在依赖于 ...

这个我今天也是刚刚复习到这里,还迷糊着呢,不断的在看我这个回复。。呵呵,大家一起学习,多谢给分,我这个榆木疙瘩脑袋什么时候才能开窍~~
作者: aihuahuaxx    时间: 2013-10-15 18:03
我的理解,静态的存放于栈中,只要你运行的时候就一直存在,你什么时候都可以调用的。

但是非静态的就要把对象给实例化之后就是放在堆上面,这样在能使用。

个人理解。
作者: ˋ初°见    时间: 2013-10-15 19:31
静态成员属于类本身,所以不需要实例调用,而是直接用类名调用。实例成员属于当前对象,所以需要对象来调用实例成员。
作者: 追溯客    时间: 2013-10-15 21:25
如果问题解决,请及时把分类修改为“已解决”,黑马有你更精彩!

作者: 硬别    时间: 2013-10-16 13:24

非静态成员的存在依赖于实例,所以也可可以称为实例成员。

类中的成员包括:

数据成员:
数据成员可以分静态变量、实例变量两种.
静态成员:静态成员变量是和类相关联的,可以作为类中"共"有的变量(是一个共性的表现),他不依赖特定对象的存在,访问的时候通过类名加点操作符加变量名来访问.
实例成员:实例成员变量是和对象相关联的,访问实例成员变量依赖于实例的存在.

函数成员:
方法可以主要分为静态方法,实例方法
静态方法:静态方法是不属于特定对象的方法,静态方法可以访问静态成员变量,静态方法不可以直接访问实例变量,可以在实例函数调用的情况下,实例变量做为参数传给静态方法。静态方法也不能直接调用实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用实例方法,但可以调用静态方法。
实例方法:一个实例方法的执行与特定对象关联,他的执行需要一个对象存在。实例方法可以直接访问静态变量和实例变量,实例方法可以直接访问实例方法、和静态方法,静态方法的访问方式为类名加点操作符加变量名。当多个实例对象存在时,内存中并不是存在美个特定的实例方法的拷贝,而是,相同类的所有对象都共享每个实例方法的一个拷贝(实例方法只占用“一套”空间)。

作者: 追溯客    时间: 2013-10-25 11:12

同学给你加分了!好好学习!蔡蔡和叶叶在黑马等着你!黑马有你更精彩!快点为了当土豪努力吧!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2