对于一个类中的方法和属性,我们无法保证当我们想使用它时他在内存当中一定是存在的,这个时候我们有两种方式去处理
1:将当前对象实例化出来,然后调用对象里面的方法或者属性。
2:将对象中的方法和属性声明成static
这个时候我们就要区分什么时候去new一个对象比较好,什么时候去声明成静态比较好
当一个类中总方法有很多,但我们经常使用的其中某一个方法或者某几个方法的情况下,实例化这个类就会为每一个方法或者变量开辟内存,徒增内存开销。这也就是为什么工具类多常用static的原因。
当一个类不经常被用到,这个时候就在使用的时候去new,这样就不会无故增加很多无用的,占用静态存储空间的类和方法了。 如果大量使用static修饰方法或者变量,可能会导致程序启动过慢,或者无用内存大量开销,所以在static与new之间的平衡点,还需要我们自己去衡量。
一般来说一定会用到的方法或者变量,我们用static来修饰,比如一些工具类或者一些不希望打扰到他整体的一些类,若果是这个类已经被实例,那么就可以直接调用,不需要new。
只有在内存弹性开销,让他随着生命周期来开始和结束,并不会影响到整个类的内存创建二过度开销的情况下,我们采用new。
补充2017-03-01:
同一个集合声明的时候一个static的区别:
public finalArrayList<SingleItemInfo>mineItemInfos=newArrayList<>(); public static finalArrayList<SingleItemInfo>mineItemInfos=newArrayList<>();在一个Activity中声明这个集合
@Override protected voidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_special_business_choise); for(inti =0; i <6; i++) { mineItemInfos.add(newSingleItemInfo(i,"我的卡", R.drawable.icon_my_card,true, CardListActivity.class,"myCard")); } }
都在onCreate中执行添加六条数据的操作
如果是第一种声明,那么每次进入都是六条数据,以为此集合随着Activity的生命周期的创建而创建,销毁而销毁。
如果是第二种声明,那么每次进入就会出现6、12、18、24...这种递增的形式,原因就是因为声明集合是是在静态存储区,独立存在,不受生命周期的影响。