静态方法和非静态方法的区别:
一般来说习惯于先new一个目标对象在调用对应的方法,但在很多时候也会直接调用静态方法,这两者的用法看似差不多,很多时候仅仅图个方便直接使用静态方法调用。这里记录一下两者的区别.
内存上分析:
在使用静态方法的过程中,尤其是大量代码运行过程中会在较大并发过程中更容易出现OOM之类的问题,因为静态方法是在程序一开始就会加载进内存,这也是为何可以直接在程序中直接调用静态方法的原因,而实例化方法是在程序中调用的时候才会加载进内存,所以可以看到静态方法很快,但是太多会占用内存
任何语言底层都是对内存和磁盘的操作,面向对象只是针对软件层的问题,底层都一样.静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快,而且静态内存是有限制的,太多了程序会启动不了。
静态方法和非静态方法对比总结:
①静态成员属于类所有,非静态成员属于类的实例所有。
②每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;
非静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。
总括:大家对这个问题都有一个共识:那就是实例化方法更多被使用和稳妥,静态方法少使用。如果从线程安全、性能、兼容性上来看也是选用实例化方法为宜。
网友评论