静态方法 &singleton模式--(摘抄csdn论坛,作者:hhhh63(hhhh63))
2004-09-02 21:16
417 查看
从底层来说,编译完成后主要是两个部分,一是CPU指令,这一部分包含各种方法;二是数据,也就是程序定义的各种类型的变量。运行程序实例化一个对象时,按如下方式分配内存:
1。在程序启动时将静态数据和静态方法放入堆内存中。
2。第一次实例化对象时将其它方法放入代码段中。
3。每次实例化对象时将其它数据放入栈内存中。
实例化同一个对象时,上述1、2项不动,只是再加一个第3项即可。销毁一个实例的时候,如果还有其它的实例存在,就只释放该实例的栈数据段(上述第3项)。
根据以上原理回答您的问题
静态方法和数据一般都是Public型的,用于类的极普遍的事物处理,可以在程序的任意地方调用,在整过程序运行过程中始终占用计算机内存,一搬少用。如果一个程序中的各个对象都用一个数据库的话,可以使用静态方法连接。
单件模式的实例销毁时可以释放所有的非静态方法和数据,,如果把这个类的所有方法都设计为静态的,这些方法将一直占用内存,浪费资源,不可取。
在new一个对象时,只是加一个数据段,并不重新加载方法和静态变量。
最后说一个变量传送的问题,网上很多朋友在回答类之间参数传递时都说用静态变量,我认为这种方法不好,本来加类的目的就是为了封装,如果用一个类似于全局变量的静态变量作为参数就大大削弱了封装的意义。
实际上,系统和应用程序对内存的管理相当复杂.
=======================下面摘自思归的文字
从表面上看,静态(static)成员可以通过 类名.成员名 来直接调用,而实例(instance)成员需要生成一个对象后才能调用。同一个操作,性能当然静态成员好
但其实区别是跟对象设计有关的,一般来说实例成员跟实例的状态有关,某个方法的调用可能需要访问当前对象的状态,并改变其状态,从而影响其他方法的结果
而静态成员是跟类本身有关,与单独的实例状态无关。但静态成员不要太多了,否则就沦为以前的procedural programming风格了,也许对象需要重新设计或重构。
静态成员往往会在多线程下操作,需要做同步化控制
1。在程序启动时将静态数据和静态方法放入堆内存中。
2。第一次实例化对象时将其它方法放入代码段中。
3。每次实例化对象时将其它数据放入栈内存中。
实例化同一个对象时,上述1、2项不动,只是再加一个第3项即可。销毁一个实例的时候,如果还有其它的实例存在,就只释放该实例的栈数据段(上述第3项)。
根据以上原理回答您的问题
静态方法和数据一般都是Public型的,用于类的极普遍的事物处理,可以在程序的任意地方调用,在整过程序运行过程中始终占用计算机内存,一搬少用。如果一个程序中的各个对象都用一个数据库的话,可以使用静态方法连接。
单件模式的实例销毁时可以释放所有的非静态方法和数据,,如果把这个类的所有方法都设计为静态的,这些方法将一直占用内存,浪费资源,不可取。
在new一个对象时,只是加一个数据段,并不重新加载方法和静态变量。
最后说一个变量传送的问题,网上很多朋友在回答类之间参数传递时都说用静态变量,我认为这种方法不好,本来加类的目的就是为了封装,如果用一个类似于全局变量的静态变量作为参数就大大削弱了封装的意义。
实际上,系统和应用程序对内存的管理相当复杂.
=======================下面摘自思归的文字
从表面上看,静态(static)成员可以通过 类名.成员名 来直接调用,而实例(instance)成员需要生成一个对象后才能调用。同一个操作,性能当然静态成员好
但其实区别是跟对象设计有关的,一般来说实例成员跟实例的状态有关,某个方法的调用可能需要访问当前对象的状态,并改变其状态,从而影响其他方法的结果
而静态成员是跟类本身有关,与单独的实例状态无关。但静态成员不要太多了,否则就沦为以前的procedural programming风格了,也许对象需要重新设计或重构。
静态成员往往会在多线程下操作,需要做同步化控制
相关文章推荐
- 在Android中写了一个udp通讯的工具类,用了单例模式和静态方法,这么写的风险是什么?
- 设计模式之"工厂方法"模式
- 五种单件模式之Singleton的实现方法详解
- C# “Singleton” 模式四种实现方法
- Java代理模式(静态模式&动态模式简介)
- 浅学设计模式之单例<singleton>模式 .
- java中static的特点&&静态变量和静态方法分别有什么特点
- 代理模式,简单(静态)工厂模式,单例模式,模板方法模式个人理解
- 为什么要用单例模式而不是静态方法
- 单例模式与静态方法的比较
- ios oc中的静态方法和实例方法、单例模式
- PHP中的设计模式-简单工厂,静态工厂,工厂方法,抽象方法的关系
- Python静态方法实现单实例模式
- [Java]构造方法私有化-->单例模式
- JAVA设计模式(3) —<创建型>单例模式(Singleton)
- Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
- 编译静态expect现undefined reference to `openpty' 错误解决方法
- 【设计模式】原型模式&模板方法模式
- 设计模式之静态工厂、工厂方法和抽象工厂的联系与区别
- 简单工厂模式 (Simple Factory Pattern) / 静态工厂方法(Static Factory Method)模式