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);
...