语言中,静态方法和非静态方法你懂多少?

来源本人CSDN博客:http://blog.csdn.net/qiulongtianshi/article/details/7292730

欢迎您莅临指导,共同交流,共同进步。

 问题来源:昨天给八期的师弟辅导机房收费系统的时候,发现一个有意思的问题。就是Bll和Dal层,D层是静态方法,B层调用D层的方法的时候,直接调用。

           当时我看到这个问题,感觉按照常规的思维来想这个问题,肯定是先new一下D层,然后再调用。这个问题仔细想想还真有点不知所措。

           经过一番了解:

           一、方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用 实例化方法需要new了以后才可以使用。。。。我们真的理解了吗?

          二、从实际的项目开发说起,这个问题的答案是这样的:

                  开发项目中把BLL和DAL分开,在BLL调用DAL的代码。        

 一、在DAL中使用静态方法,不创建实例直接调用(大概有很多人都使用这种方式开发 )       

  1. class DAL  
  2. {  
  3. public static string GetUserName(...);  
  4. }  
  5. 在BLL中调用:  
  6. DAL.GetUserName();  

二、在DAL中使用实例方法,采用静态成员模式(或Singleton)通过实例来调用:

  1. class DAL  
  2. {  
  3. public static readonly DAL dal = new DAL();  
  4. public string GetUserName(...);  
  5. }  
  6. 在BLL中调用:  
  7. DAL.dal.GetUserName();  

三、在DAL中使用实例方法,每次调用之前先创建DAL对象的实例:

  1. class DAL  
  2. {  
  3. public string GetUserName(...);  
  4. }  
  5. 在BLL中调用:  
  6. DAL dal = new DAL();  
  7. dal.GetUserName();  

          上述实例分析: 

                  开发方式一:我以为在一些情况下(比如调用多个数据库、GetUserName(...)内部处理操作部分)会出现线程安全的嫌疑。这种开发方式不用New出对象,所以很普遍。

                  开发方式二:应该多是应用在cs模式下,DAL在整个项目只会有一个对象存在,如果出现在B/S 我想不能兼容多种问题情况。而且也有线程安全的问题。

                  开发方式三:应该是普遍使用的,能够兼容各种问题,也不会有线程不安全的嫌疑出现。

从内存分析

        因为上面的问题一起下面的问题,当程序运行了一会,报Connection超过了最大连接数。这个问题是怎么回事?

        原因:最大的区别在于内存。静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。

        任何语言都是对内存和磁盘的操作,至于是否面向对象,只是软件层的问题,底层都是一样的,只是实现方法不同。静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快,而且静态内存是有限制的,太多了程序会启动不了。  

        静态方法和非静态方法对比总结:

 

       ①静态成员属于类所有,非静态成员属于类的实例所有。

  每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;

  非静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。 

 

        总括:实例化方法使用和稳妥,静态方法少使用

你可能感兴趣的:(静态方法)