new 和 static 的理解

来源:互联网 发布:内网端口映射软件 编辑:程序博客网 时间:2024/06/18 15:25
对于一个类中的方法和变量,我们无法保证当我们想使用它时他在内存当中一定是存在的,这个时候就要借助static将他存储到静态内存区域,以保证我们想使用的时候随时都能调到,哪怕这个类没有被执行到。
比如某一个Activity还没有开始他的生命周期,就要调里面的参数或者方法。
当然还有另外一种方法,就是实例化方法所在的对象,new。
现在来看呢,首先是每次使用均需要实例化不太方便,然后就是在实际应用当中不太方便,
比如参数在某一个Activity中不可能直接将这个Activity实例;
再一个就是当一个类中只有一个静态方法,总方法却有很多的情况下,实例化这个类就会为每一个方法或者变量开辟内存,也是很耗费内存的。
所以说在这种情况下是static比较好;
然后就是如果大量使用static修饰方法或者变量,可能会导致程序启动过慢,或者无用内存大量开销,所以在static与new之间的平衡点,还需要我们自己去衡量。
一般来说一定会用到的方法或者变量,我们用static来修饰,比如一些工具类或者一些不希望打扰到他整体的一些类,若果是这个类已经被实例,那么就可以直接调用,不需要new,
只有在内存弹性开销,让他随着生命周期来开始和结束,并不会影响到整个类的内存创建二过度开销的情况下,我们采用new。

补充2017-03-01:
举个例子:
public finalArrayList<SingleItemInfo>mineItemInfos=newArrayList<>();
public static finalArrayList<SingleItemInfo>mineItemInfos=newArrayList<>();

同一个集合声明的时候一个static的区别

在一个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...这种递增的形式,原因就是因为声明集合是是在静态存储区,独立存在,不受生命周期的影响。

momo制作。
1 0
原创粉丝点击