知识大全 什么时候考虑使用静态

Posted

篇首语:早晨要撒你种,晚上也不要歇你手。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 什么时候考虑使用静态相关的知识,希望对你有一定的参考价值。

  静态方法不用new对象可以直接调用

   与类相关与对象无关

   不需要对象的 轻 方法

   工厂方法

  如果某个方法是用频率较高 或者方法本身通用性较强 无需初始化类成员变量 则可以使用静态方法 那样方便 速度也快

  可以直接拿来就用的方法 就算是静态的

  肯定不涉及具体对象 因为静态方法内 是无法直接使用任何非静态成员的

  (1)制作工具

  ( )可以当作"作局"对象或方法来使用

  (1)重载"操作符"

  ( )C# 中的扩展方法(配合C# 的扩展事件 引领C#向 动态语言 的方向发展)

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

  静态方法不用创建实例就可调用 比较简单从面向对象的角度上来说 在抉择使用实例化方法或静态方法时 应该根据是否该方法和实例化对象具有逻辑上的相关性 如果是就应该使用实例化对象  反之使用静态方法

  我是把静态类当做全局变量和全局函数的整合对象来用的

  全局累加时用

  不需要生成对象的

  经常频繁使用的

  工具类里的(如SqlHelper)

  适当地使用static方法本身并没有什么 当一个人从来不懂使用多态 接口设计时 很自然地会滥用static方法

  个人理解在多个类中需要调用并且是与对象无关的方法可设为静态方法 方便调用

  所有对象共有的方法

  再不关系到任何于特定对象相关的操作

  比如学生的年龄就是学生的相关

  修改学生的年龄就不适合用静态方法

  一般来说 如果你的方法里没有用到this关键字

  那就适合用静态方法

  通常通用的类中一些常用的方法可以设计为静态类

  只要是没有用到类的状态信息 只从参数获取信息的都可以为静态的

  可以实现某些特殊的设计模式 如Singleton

  由于没有this指针 可以把某些系统API的回调函数以静态函数的形式封装到类的内部

  可以封装某些算法 比如数学函数 如ln sin tan等等 这些函数本就没必要属于任何一个对象 所以从类上调用感觉更好

  总之 从OOA/OOD的角度考虑 一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的

  静态方法与非静态方法最明显的区别就是如果某个方法是公共静态的 那么可以直接通过类名 方法名的方法来调用 而公共实例方法则需要事先实例化对象 然后才能调用

  这些各种说法 基本上都是正确的 但是 其中绝大多数是讲了 静态 和 实例 的区别 以及静态方法的特征

  很少有说到何时或是为什么要使用静态的

  静态包括静态类和静态成员(静态方法 和 静态属性) 既然搜索出来的这些说的都是静态成员(基本上说的都是静态方法) 那么我也就先仅对静态方法谈一谈自己的看法

  上中学数学 尤其是平面几何的时候 老师经常讲 定义 与 性质 的区别 性质 只是它表现出来的特征而已 而 定义 才是真正的决定性的东西

  我觉得 静态方法的 定义 当然是 static 关键字了 没有用到this指针 这一点才是静态方法的首要 性质 (本质特征) 像什么【共通】【全局】【单例模式】呀 那都是它的应用场景 或是说使用静态方法来达到的目的

  那么说到 何时该使用静态方法 其实是困扰很多程序员的苦恼问题 不明白这一点 也从一个侧面反映出对OO思想的理解不够 就很可能通过滥用静态方法已达到在面向对象的语言中继续进行面向过程的编程 这是很可怕的

  其实 方法是否涉及具体类的实例 或者简单的说是否涉及 数据 (如果使用就要用到this指针)是决定是否使用静态方法的根部要因 然而 判断是否涉及到 数据 也是要看当前设计思路的 有时候不够OO的设计 可能会将本该设计到数据的实例方法 从 数据相关 变成 数据无关 (与OO不同 面向过程的编程就是将 方法 与 数据 分开)在这样的设计思路下 你会发现怎么什么动作都是与数据无关的呢?恩 这就该开始滥用静态方法了

  本想举一个好一点的例子 但是时间匆忙 就简短说一下 Log 吧 有人认为写日志是一个工具在干活 应该是 Log debug( );

  有人认为 日志记录器是个 小精灵 应该有血有肉 Log logger = new Log();   logger debug( );

  可能你会认为 这要取决于Log类以及debug方法的复杂程度

  也许你会认为 这要看Log类中是否有 数据 比如 输出Level

  也许还有其他理由

  而我觉得可以说是仁者见仁智者见智 也可以看做是不同的编程风格 也可以 总之 需要细细体会了

  追加一个稍好一些的例子 检查 TextBox 是否输入了数据 如果没有 则依据某一个ID 从配置文件中读取一句话(错误信息) 然后弹出 并将此 TextBox 的底色置成红色 再将焦点放到上面去

  如果你不希望这一系列的操作(大概 行代码)每次都要写一遍 你就会设法把它提炼为 共通

  方法一 (静态)

  C#代码

  public class Checker

  

  public static void CheckEmpty(TextBox textBox)

  

  if (textBox Text Length == )

  

  string msg = Properties ReadMessage( );

  MessageBox Show(msg);

  textBox BackColor = Color Read;

  textBox Focus();

  

  

  

  Checker CheckEmpty(textBox );

  方法二 (实例)

  C#代码

  public class MyTextBox : TextBox

  

  public void CheckEmpty()

  

  if (this Text Length == )

  

  string msg = Properties ReadMessage( );

  MessageBox Show(msg);

  this BackColor = Color Read;

  this Focus();

  

  

  

  MyTextBox textBox = new MyTextBox();

  

  textBox CheckEmpty();

  因为Swing使用的很少 所以就用WinForm的控件来举例子了 所以代码是C#的 其实没有关系 所有OO语言在这一点上都是一样的

  如果你不觉得【扩展】SDK的控件有多么恐怖 或者应为其他原因已经对其扩展了 那么我更推荐使用实例方法(方法二) 理由吗 对控件的检查本来就是和控件自身(Text属性)息息相关的 是活生生的

cha138/Article/program/ASP/201311/21666

相关参考

知识大全 oracle中的游标使用静态游标

  游标是构建在PL/SQL中用来查询数据获取记录集的指针它让开发者一次访问结果集中一行记录  在oracle中提供了两种游标静态游标ref游标  静态游标静态游标是在编译的时候就被确定然后把结果集复

PEG指标的应用

PEG指标的应用PEG指标弥补了静态市盈率指标在判断股票投资价值时的缺陷,不但考虑了本会计报告期的财务状况,同时也考虑了过去几年企业盈利的增长情况,以及未来几年企业的发展机遇。PEG指标同时也弥补了动

知识大全 我跟一个一个喜欢的女孩表白了,但她说考虑考虑,我第一次问她的时候她啥都没说

我跟一个一个喜欢的女孩表白了,但她说考虑考虑,我第一次问她的时候她啥都没说!明天给她买早餐,晚上看场电影就清楚了,女孩子是矜持的这个跟同意有毛线区别刚跟喜欢的女孩表白,她说让她考虑一下。最好主导一些共

知识大全 独自一人的时候就很成熟稳重,与人相处的时候,就总去迎合别人,很佩服那些不用考虑别人感受的人

独自一人的时候就很成熟稳重,与人相处的时候,就总去迎合别人,很佩服那些不用考虑别人感受的人真诚待人,善待他人,与人为善就好,好人会有好报的,南无大愿地藏王菩萨。如何与不注重别人感受的人相处对方不注重别

知识大全 做事的时候怎样才能让自己大脑险考虑一下,我每当一遇到事情就和木头人一样,像是傻子,哎

做事的时候怎样才能让自己大脑险考虑一下,我每当一遇到事情就和木头人一样,像是傻子,哎!不要着急做出反应,慢点总比呆住好如何让一个人讲话的时候像大人一点,做事的时候考虑一下自己的想法别人的想法,要怎么样

知识大全 异地恋的男朋友在我准备回家的几天里,突然发朋友圈说到,你走的时候没考虑我,你回来也不是以前的我

异地恋的男朋友在我准备回家的几天里,突然发朋友圈说到,你走的时候没考虑我,你回来也不是以前的我?什你走的时候,可能没考虑你男友的感受,或者没有充分征求他的意见,他自己可能感觉被你忽视了,因此心生怨恨,

居室餐厅装修有哪些重要环节需考虑?

居室餐厅装修有哪些重要环节需考虑?现代人在家庭装修的时候越来越重视餐厅的设计,如果居住条件允许会安排单独的餐厅,在对餐厅进行设计的时候,很多朋友觉得选择精美的餐桌椅是最重要的,其实不然,餐厅想要装修的

选择卧室窗帘要从哪些方面来考虑?

窗帘是卧室中必不可少的物件,但是选择的时候,很多人感觉无从下手,而千差万别的窗帘市场更让我们眼花缭乱。这里告诉大家一些选窗帘的时候需要考虑的方面,一定能够帮助你做出正确的选择。窗帘材质有很多,棉质、纱

知识大全 ASP.NET伪静态的实现及伪静态的意义

ASP.NET伪静态的实现及伪静态的意义  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

什么是调节系统的静态特性曲线?对静态特性曲线有何要求?

  调节系统的静态特性曲线即在稳定状态下其负荷与转速之间的关系曲线。  调节系统静态特性曲线应该是一条平滑下降的曲线,中间不应有水平部分,曲线两端应较陡。如果中间有水平部分,运行时会引起负荷的自发摆动