关于静态方法和实例方法的一些误区。

转自《关于静态方法和实例方法的一些误区。

一、 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。

    事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。

二、 静态方法在堆上分配内存,实例方法在堆栈上。

    事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。

三、 实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。

    事实上如果一个方法与他所在类型的实例无关,那么它就应该是静态的,决不会有人把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。实际上上你可以把所有的实例方法都写成静态的,将实例作为参数传入即可。

    有些方法看似与所在的实例无关,如IComparer.Compare方法,但实际上每一个实现这个接口的类都只会负责自己类型实例的比较,这是C#1.x规范中没有泛型所带来的历史遗留问题。

    大部分静态方法是与类的实例有关的,如各种Parse方法,他做成静态的原因是他没有实例作为参数。其他的大多是出于语义或者其他目的的考虑。

时间: 2024-10-21 16:45:22

关于静态方法和实例方法的一些误区。的相关文章

Objective-C 关于静态方法与实例方法的转载

Objective-C 关于静态方法与实例方法的转载 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 转载1: http://www.cocoachina.com/bbs/read.php?ti

java静态方法和实例方法的区别

静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名. 方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方式.也就 是说,调用静态方法可以无需创建对象. 静态方法在访问本类的成员时,只允许访问静态成员(即静 态成员变量和静态方法),而不允许访问实例成员变量和实例方法:实例方法则无此限制. 下面几个 例子展示了这一区别. 1.调用静态方法示例. //-----------hasStaticMethod.java-

关于c#静态方法和实例方法的辨析和应用

本文将围绕c#静态方法和实例方法讨论一下.针对一些观点,如:"静态方法是常驻内存", 还有"静态方法比实例方法先装载",做一个辨析.同时讨论下何时用静态方法,何时用实例方法. 前几日,在微软的好友发给我一个链接:<静态方法和实例化方法之间的区别你知道了嘛? 欢迎讨论!! - 问题最终 ...>,然后说这里某些观点需要澄清一下,希望我写一篇blog.我当时读了这篇blog. 文比较短,列举了静态方法和实例方法的几种案例,也没有论点,然后就请大家讨论.后面评

Js类的静态方法与实例方法区分及jQuery拓展的两种方法_javascript技巧

上学时C#老师讲到对象有两类方法,静态方法(Static)和实例方法(非Static),当时不理解静态是为何意,只是强记. 后来从事了前端的工作,一直在对类(即对象,Js中严格来说没有类的定义,虽众所周知,这里还是赘述一番,以免产生歧义)的操作上,严重缺乏整体概念,最近看extetnd中再次提到拓展静态方法与实例方法,故而再次百度,才幡然领悟,其实一直有用,只是不知其专业术语呀,哈哈~ 静态方法,属于类的方法,即类可以直接调用的方法.为类所有实例化对象所共用(但不能用实例对象之间调用),所以静态

一起谈.NET技术,关于c#静态方法和实例方法的辨析和应用

本文将围绕c#静态方法和实例方法讨论一下.针对一些观点,如:"静态方法是常驻内存", 还有"静态方法比实例方法先装载",做一个辨析.同时讨论下何时用静态方法,何时用实例方法. 前几日,在微软的好友发给我一个链接:<静态方法和实例化方法之间的区别你知道了嘛? 欢迎讨论!! - 问题最终 ...>,然后说这里某些观点需要澄清一下,希望我写一篇blog.我当时读了这篇blog. 文比较短,列举了静态方法和实例方法的几种案例,也没有论点,然后就请大家讨论.后面评

js静态方法与实例方法分析_javascript技巧

js静态方法 复制代码 代码如下: function foo(){} // 声明类 foo.method = function(){} // 方法体 使用:foo.method() js实例方法 function foo(){ // 声明类 this.method = function(){ // 方法体 } } 使用:var f = new foo(); f.method();

在何种情况下,使用静态方法和实例方法?

问题描述 在什么情况下,使用静态方法?在情况下,使用实例方法? 解决方案 解决方案二:静态方法:对实例没有访问要求的时候用,属于这个类的类方法.实例方法:使用时必须创建这个对象.也就是要用到对象中方法的时候,反之,本类中的方法将来会被其它类调用的时候.也叫作对象方法.解决方案三:看情况了,项目中一些共通的部分,比如读取配置,写LOG,可以用静态方法.操作比较简单.如果是一个对象要多次被处理,考虑使用实例方法比如.NET中对文件操作有静态的File类和FileInfo类前面都是静态方法,后面是实例

JNI/NDK开发指南(六)——C/C++访问Java实例方法和静态方法

        转载请注明出处:http://blog.csdn.net/xyang81/article/details/42582213         通过前面5章的学习,我们知道了如何通过JNI函数来访问JVM中的基本数据类型.字符串和数组这些数据类型.下一步我们来学习本地代码如何与JVM中任意对象的属性和方法进行交互.比如本地代码调用Java层某个对象的方法或属性,也就是通常我们所说的来自C/C++层本地函数的callback(回调).这个知识点分2篇文章分别介绍,本篇先介绍方法回调,在

静态和实例方法区别-java

静态方法和实例方法的区别主要体现在两个方面:   在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方式.也就是说,调用静态方法可以无需创建对象.   静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法:实例方法则无此限制.   下面几个例子展示了这一区别.   1.调用静态方法示例.   //-----------hasStaticMethod