静态方法

来源:互联网 发布:淘宝助理 一单多号 编辑:程序博客网 时间:2024/05/14 12:07

静态方法效率高,不用实例化就可以使用,这是他的优点
缺点是面向对象编程的好处享受不到了,因为不能使用抽象或虚的方法进行扩展和多态了

 

静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。 
静态方法不用创建实例就可调用,比较简单从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象 反之使用静态方法。这只是从面向对象角度上来说的。 
如果从线程安全、性能、兼容性上来看 也是选用实例化方法为宜。 

静态方法是类所具有的一种行为表现,实例方法是对象所具有的行为表现。
一般将工具类的方法置为static

1、大家都以为“实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单”
事实上如果一个方法与他所在类的实例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。 当然你完全可以把所有的实例方法都写成静态的,将实例作为参数传入即可,一般情况下可能不会出什么问题。
从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象 反之使用静态方法。这只是从面向对象角度上来说的。 如果从线程安全、性能、兼容性上来看 也是选用实例化方法为宜。
2、大家都以为“ 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。”
事实上,他们都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
3、大家都以为“ 静态方法在堆上分配内存,实例方法在堆栈上”
事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。
方法占不占用更多内存,和它是不是static没什么关系。
因为字段是用来存储每个实例对象的信息的,所以字段会占有内存,并且因为每个实例对象的状态都不一致(至少不能认为它们是一致的),所以每个实例对象的所以字段都会在内存中有一分拷贝,也因为这样你才能用它们来区分你现在操作的是哪个对象。
但方法不一样,不论有多少个实例对象,它的方法的代码都是一样的,所以只要有一份代码就够了。因此无论是static还是non-static的方法,都只存在一份代码,也就是只占用一份内存空间。
同样的代码,为什么运行起来表现却不一样?这就依赖于方法所用的数据了。主要有两种数据来源,一种就是通过方法的参数传进来,另一种就是使用class的成员变量的值……

 

不好的地方:
1,对面向对象语言中,可能破坏了面向对象的结构,因为使用静态类或者静态方法,就失去了extend的特征了。
2,对于系统架构来说,可能感觉起来不是很合理。
3,在高并发的情况中,容易导致数据出错(此项未验证,只是推测。因为是全局的。)


好的地方:
1,感觉使用起来方便一些
2,不用重复的new一大堆对象,和销毁。可能在性能上略有提升。(but:但是会占据一定的内存空间)

原创粉丝点击