onCreate 中的成员对象实例化与声明期间的成员对象实例化

Dou*_*ass 4 java android class object android-studio

我基本上是在询问这两种方法之间的区别:

public class myClass extends AppCompatActivity {
    private objectType mObject = new objectType();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //do stuff with mObject
Run Code Online (Sandbox Code Playgroud)

和

public class myClass extends AppCompatActivity {
    private objectType mObject;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        mObject = new ObjectType();
Run Code Online (Sandbox Code Playgroud)

我希望我说得够清楚了。我很难理解什么时候我们想要选择一个而不是另一个。

Dee*_*eeV 5

从功能上来说,没什么。

第一个将在创建 Activity 对象时创建(new myClass()被调用)。Android 系统会在创建过程中的某个时间点执行此操作。

第二个将在系统最终调用时创建onCreate()。

如果您有一个Context在构造函数中需要 a 的对象,那么问题就来了。例如,您可以这样做:

public class myClass extends AppCompatActivity {
    private objectType object = new objectType(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //do stuff with object
Run Code Online (Sandbox Code Playgroud)

并且应用程序会突然崩溃,因为您很可能会尝试从Context尚不存在的资源中提取资源。(请记住,此时尚未创建 Activity)。

因此,如果您的对象确实必须使用Context,那么您必须在onCreate被调用时或之后创建它。