静态类和非静态类的区别

转自:http://joe5456536.blog.163.com/blog/static/8537477320117136658629/

http://www.cnblogs.com/devinzhang/archive/2012/04/27/2473570.html

静态方法与非静态方法区别使用大致如下

● 生命周期(Lifecycle):

静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。

非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。

● 效率

静态方法的使用效率比非静态方法的效率高。

按照上面的概念,只要内存够用,都可以使用静态的。使用静态方法会带来什么问题呢

● 线程安全

静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。

非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。

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

  • 不需要生成对象的  经常频繁使用的  工具类里的(如SqlHelper)
  • 适当地使用static方法本身并没有什么,当一个人从来不懂使用多态、接口设计时,很自然地会滥用static方法。
  • 个人理解在多个类中需要调用并且是与对象无关的方法可设为静态方法,方便调用。
  • 所有对象共有的方法
  • 再不关系到任何于特定对象相关的操作  比如学生的年龄就是学生的相关。  修改学生的年龄就不适合用静态方法。  一般来说,如果你的方法里没有用到this关键字,  那就适合用静态方法
  • 通常通用的类中一些常用的方法可以设计为静态类
  • 只要是没有用到类的状态信息,只从参数获取信息的都可以为静态的
  • 可以实现某些特殊的设计模式:如Singleton
  • 由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部
  • 可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好
  • 总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的
  • 静态方法与非静态方法最明显的区别就是如果某个方法是公共静态的,那么可以直接通过类名.方法名的方法来调用,而公共实例方法则需要事先实例化对象,然后才能调用。
时间: 2024-10-17 21:48:13

静态类和非静态类的区别的相关文章

C# 静态类与非静态类、静态成员的区别

静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明.程序员必须声明一个私有构造器.私有构造器禁止开发者在类的范围之外实例化类的实例.使用私有构造器的效果与使用静态类的效果非常相似.两者的区别在于,私有构造器方式仍然可以从类的内部对

深入理解C# 静态类与非静态类、静态成员的区别

静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明.程序员必须声明一个私有构造器.私有构造器禁止开发者在类的范围之外实例化类的实例.使用私有构造器的效果与使用静态类的效果非常相似. 两者的区别:私有构造器方式仍然可以从类的内部对类

C#基础(七)——静态类与非静态类、静态成员的区别

静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明.程序员必须声明一个私有构造器.私有构造器禁止开发者在类的范围之外实例化类的实例.使用私有构造器的效果与使用静态类的效果非常相似.两者的区别在于,私有构造器方式仍然可以从类的内部对

C# 静态类和非静态类的区别

静态类和非静态类的区别 静态类: static       关键字 调用 类名.方法 在静态方法中只能访问静态成员  在静态类中只能有静态成员 在非静态类中 即可有非静态成员,也可以有静态成员 在静态方法中只能使用静态成员

C# 静态类与非静态类、静态成员的区别分析

静态类静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明.程序员必须声明一个私有构造器.私有构造器禁止开发者在类的范围之外实例化类的实例.使用私有构造器的效果与使用静态类的效果非常相似. 两者的区别:私有构造器方式仍然可以从类的内部对类进

静态类与非静态类、静态成员的区别

GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=521 静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类是自C# 2.0

静态类和非静态类

静态类与非静态类基本相同,但存在一个区别:静态类不能实例化. 也就是说,不能使用 new 关键字创建静态类类型的变量. 因为没有实例变量,所以要使用类名本身访问静态类的成员. 例如,如果名为 UtilityClass 的静态类有一个名为 MethodA 的公共方法,则按下面的示例所示调用该方法: C# UtilityClass.MethodA(); 对于只对输入参数进行运算而不获取或设置任何内部实例字段的方法集,静态类可以方便地用作这些方法集的容器. 例如,在 .NET Framework 类库

.Net中的静态类和非静态类、静态成员和非静态成员

正如标题,这样的资料网上很多,也说的很到位,但是都感觉解释的很多,理论性过强,在这里我简单的总结和概括下他们之间的区别,可以一目了然: 一.静态类和非静态类 Definition: 静态类可以视为类库中都是单一的过程,不存在“状态”的概念: 非静态类是存储有状态的一类操作过程 Summary: 非静态类可以包含静态方法: 静态类只能包含静态方法(不允许有非静态方法的存在) 二.静态方法和非静态方法(实例方法) Priority in Memory When Class Loaded: 类在加载时

转载 C#中静态类和非静态类比较

转载原地址: http://www.cnblogs.com/NothingIsImpossible/archive/2010/07/28/1786706.html C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢? 让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法. 下面我们分四个方面来看看

静态类和非静态类的主要区别

如有雷同,不胜荣幸,若转载,请注明 主要区别在于静态类不能实例化,静态类编译器能够执行检查确保不是偶然的添加实例成员,C#编译器会自动把它标记为sealed,静态类中不能创建非静态的方法.即静态方法中只能创建静态方法,但在非静态类中可以调用静态方法 静态类的主要特性: 1:仅包含静态成员. 2:无法实例化. 3:是密封的. 4:不能包含实例构造函数. 5:非静态类可以包含静态的方法.字段.属性或事件: 6:静态方法和属性不能访问其包含类型中的非静态字段和事件 7:静态方法只能被重载,而不能被重写