关于静态方法和实例方法的一些误区。
一、 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。
事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
二、 静态方法在堆上分配内存,实例方法在堆栈上。
事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。
三、 实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。
事实上如果一个方法与他所在类型的实例无关,那么它就应该是静态的,决不会有人把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。实际上上你可以把所有的实例方法都写成静态的,将实例作为参数传入即可。
有些方法看似与所在的实例无关,如IComparer.Compare方法,但实际上每一个实现这个接口的类都只会负责自己类型实例的比较,这是C#1.x规范中没有泛型所带来的历史遗留问题。
大部分静态方法是与类的实例有关的,如各种Parse方法,他做成静态的原因是他没有实例作为参数。其他的大多是出于语义或者其他目的的考虑。
静态方法是通过类名直接访问,实例方法是通过类的实例访问
具体什么时候用什么方法,你看看这里吧
http://topic.csdn.net/t/20060711/14/4873123.html
我觉得这个应该是很随意的事情,软件开发,程序编写都是很随意的事情,没有什么太大的区别,基本上根据个人喜好.如果都按步就班的话,也就没有什么创造了,你的水平也永远提高不了.
区别很简单:静态方法不需要实例化就可以通过类名直接访问类中定义的方法,具体形式如:类名.方法名
而实例化时必须使用new关键字,具体格式如:
ArrayList one=new ArrayList();
这就是一个实例化.
怎么感觉楼上的回答没有说出精髓啊..
我来个精髓的..呵呵..
他们使用的时候..表象上看是一个需要实例化
一个不需要..
其实他们最最重要的区别不在这里..
对于静态方法和一些静态的东西..譬如说静态变量啊什么的..这些是程序开始运行的时候就一直存在于内存里的..而对象的话..只有在实例化之后才会被放进内存...
所以譬如一些比较小的工具方法..使用频率非常的高时..可以放在内存里以备方便调用..
而一些不经常使用的..和一些数据量比较大的..还有一些非常耗内存的..譬如操作数据库的sqlcommond对象等等...都是非常消耗内存的..这些一定不能弄成静态的..不能让他们一直占着内存..并且实例化之后一定要清空这些对象..让他占用一下然后就清除掉..
了解这些对象对于硬件方面产生的负荷之后..才能写出好的程序..
静态是类的,实例是对象的.oo的观点就是静态成员就是类所有对象所具备的特点,而实例成员是每个对象自有的实现,是不一样的.比如说每个人都有头发,眼睛,耳朵,名字,性别,年龄,身高等等.这些都是静态的,但是每个人的这些属性是不一样的,这些不同的属性就是实例化.所以也可以说静态方法不需要依赖类当中的属性,静态方法本身就可以封闭的完成一个功能,而实例的方法更多会用到类中的属性.
静态方法在它一启动的时候就实例化了,因而静态内存是连续的,而且静态内存是有限制的;而实例方法是在程序运行中生成内存的,实例申请的是离散的空间.静态方法大多用的数据连接上.