Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在活动中声明最终变量和在onCreate方法上实例化它之间有什么区别?_Java_Android_Android Activity - Fatal编程技术网

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

Java 在活动中声明最终变量和在onCreate方法上实例化它之间有什么区别?,java,android,android-activity,Java,Android,Android Activity,这: 与此相比: public class LoadingActivity extends Activity { final private ContactManager cm = new ContactManager(this); ... 我理解final的含义,变量将无法重新实例化,但是我不确定使用哪种模式以及这将如何影响垃圾收集器?我猜在第二个版本中,我可以使用onDestroy通知垃圾收集器我已经处理完变量。这有意义吗?需要吗?在Android组件类的特定情

这:

与此相比:

public class LoadingActivity extends Activity  {

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

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

在Android组件类的特定情况下(例如,
活动
服务
),仅在不需要
的情况下使用
最终
-plus初始值设定方法。从这些组件的基类继承的方法(例如,
Activity
)在
super之后才能工作。从
onCreate()
方法调用onCreate()


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

在Android组件类的特定情况下(例如,
活动
服务
),仅在不需要
的情况下使用
最终
-plus初始值设定项方法。从这些组件的基类继承的方法(例如,
Activity
)在
super之后才能工作。从
onCreate()
方法调用onCreate()


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

在第一种情况下,您已将cm变量声明为final,因此无法为此变量定义任何新值。i、 e现在您无法写入cm=xyz

在第二种情况下,您可以随时更改cm的值或使用一些参数等重新初始化它


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

在第一种情况下,您已将cm变量声明为final,因此无法为此变量定义任何新值。i、 e现在您无法写入cm=xyz

在第二种情况下,您可以随时更改cm的值或使用一些参数等重新初始化它


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

一般来说,在Java中,在您有一个实例可以使用之前,使用
这个方法是不好的。对于方法一,建议使用构造函数,但活动构造函数不是这样使用的,所以模式2在Android代码中是正确的


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

一般来说,在Java中,除非有一个实例可以使用,否则使用
这个
是不好的。对于方法一,建议使用构造函数,但活动构造函数不是这样使用的,所以模式2在Android代码中是正确的


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

@ZahanSafallwa:只有在安全的情况下才能将对象(例如,本例中的
this
)移交给另一个类时,才引用该对象。在这种情况下,
活动
服务
super.onCreate()之后才准备就绪*可能*`
ContactManager
不会对构造函数中接收到的
活动执行任何操作,除非这样做是安全的,但我们不知道这一点,
ContactManager
将来可能会更改。因此,只有当我们知道在
super.onCreate()
之后可以安全地创建
ContactManager
,并将
活动传递给它时,才可以创建它。在活动类中声明时实例化变量是否正确?在我看来,活动的变量声明部分在某种程度上就像一个构造函数,不是吗?@Guy:“在活动类中声明时实例化变量是否正确?”——只要数据不依赖于活动实例本身(
this
),就完全可以了,就像在普通Java类中一样。@commonware得到了它!;-)@ZahanSafallwa:仅在可以安全地将对象移交给另一个类时才引用该对象(例如,本例中为
this
)。在这种情况下,
活动
服务
super.onCreate()之后才准备就绪*可能*`
ContactManager
不会对构造函数中接收到的
活动执行任何操作,除非这样做是安全的,但我们不知道这一点,
ContactManager
将来可能会更改。因此,只有当我们知道在
super.onCreate()
之后可以安全地创建
ContactManager
,并将
活动传递给它时,才可以创建它。在活动类中声明时实例化变量是否正确?在我看来,活动的变量声明部分在某种程度上就像一个构造函数,不是吗?@Guy:“在活动类中声明时实例化变量是否正确?”——只要数据不依赖于活动实例本身(
this
),就完全可以了,就像在普通Java类中一样。@commonware得到了它!;-)问题表示理解了
final
的含义问题表示理解了
final
的含义
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);
       ...