繁体   English   中英

在Activity中声明最终变量并在onCreate方法上实例化它之间有什么区别?

[英]What is the difference between declaring a final variable in an Activity and instantiating it on the onCreate method?

这个:

public class LoadingActivity extends Activity  {

      final private ContactManager cm = new ContactManager(this);
      ...

与这个:

public class LoadingActivity extends Activity {

    private ContactManager cm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_loading);
       cm = new ContactManager(this);
       ...

我了解final的含义,该变量将无法重新实例化,但是我不确定要使用哪种模式以及这会如何影响垃圾收集器? 我猜想在第二个版本中,我可以使用onDestroy通知垃圾收集器我已经完成了变量。 那有意义吗? 根本需要吗?

在Android的组件类(例如,特定情况下ActivityService ),只使用final对于那些你不需要的情况下-plus-初始化方法this 从那些组件的基类继承的方法(例如Activity )可能直到从onCreate()方法调用super.onCreate()之后super.onCreate()

因此,在上面显示的两个示例中,第二个是正确的。

一般来说,在Java中,除非要使用实例,否则最好不要使用this 建议使用方法1的构造函数,但不使用活动构造函数,因此模式2在Android代码方面是正确的。

如果需要使变量为final,则需要将其包装在另一个Java类中,在其中可以使用构造函数正确地初始化变量。

在第一种情况下,您已将cm变量声明为final,因此无法为该变量定义任何新值。 即现在你不能写cm = xyz。

在第二种情况下,您可以随时更改cm的值或使用某些参数等对其进行初始化。

在您的情况下,第二种方法最有效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM