new 和 static 的理解

    xiaoxiao2021-03-25  277

    对于一个类中的方法和属性,我们无法保证当我们想使用它时他在内存当中一定是存在的,这个时候我们有两种方式去处理

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

     

    转载请注明原文地址: https://ju.6miu.com/read-216.html

    最新回复(0)