什么状况下使用静态方法?和实例方法的区别?

一、在加载时机和占用内存上,静态方法和实例方法是同样的,在类型第一次被使用时加载。调用的速度基本上没有差异。
二、方法不可能在堆或者堆栈上分配内存,方法做为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。
方法占不占用更多内存,和它是否是static没什么关系。
由于字段是用来存储每一个实例对象的信息的,因此字段会占有内存,而且由于每一个实例对象的状态都不一致(至少不能认为它们是一致的),因此每一个实例对象的全部字段都会在内存中有一分拷贝,也由于这样你才能用它们来区分你如今操做的是哪一个对象。
但方法不同,不论有多少个实例对象,它的方法的代码都是同样的,因此只要有一份代码就够了。所以不管是static仍是non-static的方法,都只存在一份代码,也就是只占用一分内存空间。
一样的代码,为何运行起来表现却不同?这就依赖于方法所用的数据了。主要有两种数据来源,一种就是经过方法的参数传进来,另外一种就是使用class的成员变量的值……
三、若是一个方法与他所在类的实例对象无关,那么它就应该是静态的,而不该该把它写成实例方法。因此全部的实例方法都与实例有关,既然与实例有关,那么建立实例就是必然的步骤,没有麻烦简单一说。安全

固然你彻底能够把全部的实例方法都写成静态的,将实例做为参数传入便可,通常状况下可能不会出什么问题。性能

从面向对象的角度上来讲,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具备逻辑上的相关性,若是是就应该使用实例化对象 反之使用静态方法。这只是从面向对象角度上来讲的。线程

若是从线程安全、性能、兼容性上来看 也是选用实例化方法为宜。对象

相关文章
相关标签/搜索