首页 / 知识
关于不可知的语言:什么时候方法应该是静态的?
2023-04-14 12:07:00

When should a method be static?另外,静态方法与实例方法相比在性能上有什么优势吗? 我最近遇到了以下内容:http://www.cafeaulait.org/course/week4/22.html:
我会对Stack Overflow社区对此的反馈非常感兴趣。 当方法不属于实例时,使它们成为静态方法。不要费力进行微优化。 您可能会发现有很多私有方法可能是静态的,但是总是从实例方法(或彼此)中调用。在那种情况下,它并不重要。但是,如果您想真正地测试您的代码,并可能在其他地方使用它,则可能需要考虑在不同的,不可实例化的类中创建这些静态方法。 方法是否是静态的,更多的是设计方面的考虑,而不是效率方面的考虑。静态方法属于一个类,非静态方法属于一个对象。如果您有Math类,则可能有一些静态方法来处理加法和减法,因为这些是与Math相关的概念。但是,如果您有Car类,则可能有几种非静态方法来更改齿轮和转向,因为这些方法与特定的汽车相关联,而不是与一般的汽车概念相关联。 静态方法的另一个问题是为它们编写单元测试非常麻烦-至少在Java中是如此。您不能以任何方式模拟静态方法。谷歌测试博客上有一篇关于这个问题的文章。 我的经验法则是仅在没有外部依赖项(例如数据库访问,读取文件,电子邮件等)的情况下编写静态方法,以使它们尽可能简单。 只需记住,每当编写静态方法时,您就在编写一种不灵活的方法,该方法无法非常轻松地修改其行为。 您正在编写过程代码,因此,如果有必要进行过程编程,则可以这样做。如果不是,则可能应该是实例方法。 这个想法来自Steve Yegge的一篇文章,我认为这是一篇有趣而有用的文章。 @jagmal我认为您在某处有一些电线-您列出的所有示例显然都不是静态方法。 静态方法应该完全处理抽象的属性和类的概念-静态方法绝不应该与实例特定的属性相关(大多数编译器会大喊大叫)。 以汽车为例,速度,行驶公里数显然与属性相关。在汽车级别考虑时,变速和速度计算是属性相关的-但请考虑从汽车继承的carModel类:在这一点上,它们可以成为静态方法,因为所需的属性(例如车轮直径)可以定义为该级别的常量。 从性能角度来看,C ++静态方法可能比非虚拟实例方法稍快,因为不需要" this"指针来传递给该方法。反过来,由于不需要VMT查找,因此两者都比虚拟方法快。 但是,它可能会降低噪音-特别是对于允许不必要的参数传递进行优化的语言。 将方法设为静态时要考虑的另一件事是,任何能够看到该类的人都可以调用静态方法。而当方法是实例方法时,只有那些有权访问实例的人才能调用该方法。 这是有关String.Format为什么是静态的相关讨论,它将突出一些原因。 |
最新内容
相关内容
linux命令是什么语言?
linux命令是什么语言?,系统,环境,代码,传播,管理,语言,操作系统,源码,自由,部分,dos和linux的命令行里面用的是什么语言?1、DOS/Windows/Linuxlinux查看性能的命令?
linux查看性能的命令?,系统,情况,信息,数据,状态,指标,第一,分析,命令,宏观,linux查看cpu个数和核心数linux怎么查看cpu的个数?我们一起来了解linux改语言命令行?
linux改语言命令行?,系统,环境,工具,密码,概念,地方,软件,通信,管理,国际,linux命令行下怎样改变语言将内容改为:LANG=zh_CN.UTF-8LANGUAGE=zh_linux命令行c语言?
linux命令行c语言?,代码,系统,工具,环境,工作,保险,发行,命令,文件,终端,linux终端下如何进行C语言编译1、在Linux下面,如果要编译一个C语言源c语言在linux命令?
c语言在linux命令?,系统,工作,管理,命令,保险,基础,环境,信息,文件,语言,linux系统的命令是什么linux常用命令有pwd命令、cd命令、ls命令、catlinux编写c语言命令?
linux编写c语言命令?,系统,基础,环境,代码,盘面,保险,百度,情况,数据,工具,在Linux系统中,如何运行一个C语言程序?编译。由.c文件生成.o文件,写linux性能测试命令?
linux性能测试命令?,数据,系统,工具,标准,设备,地址,情况,基础,网络,环境,如何排除linux系统的读写缓存进行磁盘性能测试chkdsk。chkdsk的全称linux命令3d性能?
linux命令3d性能?,系统,工具,实时,百分比,信息,分析,软件,情况,网站,建设,Linux常用性能诊断命令详解1、第二行信息依次为:进程总数、运行中的linux改变语言命令?
linux改变语言命令?,系统,管理,网上,官方网站,情况,服务,中文,语言,命令,终端,linux命令行下怎样改变语言将内容改为:LANG=zh_CN.UTF-8LANGUAGEc语言编译linux命令?
c语言编译linux命令?,代码,工具,环境,系统,基础,保险,百度,语言,源程序,文件,Linux中,运行一个C语言程序如何运行1、编译。由.c文件生成.o文件linux性能管理命令?
linux性能管理命令?,工具,系统,信息,状态,网络,情况,工作,时间,短信,平均,linux性能监控工具有哪些1、开源网络监控工具:NetXMS NetXMS提供了企linux性能调参命令?
linux性能调参命令?,工具,工作,信息,网络,分析,系统,地址,实时,管理,状态,在linux中top命令的具体用法是什么?1、top命令用于显示系统运行的进