2014-03-13 17 views
2

this.C()如何工作?方法C是非静态的,所以它必须通过实例调用。这是指当前对象,但是它是什么对象以及它是如何创建的?我没有明确创建一个对象,因此不会编译暗中创建一个幕后?...调用方法时,“this”如何在Java中工作?

public class MainActivity extends Activity { 
public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     this.C(); 


    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if(id ==R.id.action_search){ 
      this.openSearch(); 
     } 
     else if (id == R.id.action_settings) { 
      // openSettings(); 
     } 
     return super.onOptionsItemSelected(item); 
    } 
    public void sendMessage(View view){ 
     Intent intent = new Intent(this, DisplayMessageActivity.class); 
     EditText editText = (EditText) findViewById(R.id.edit_message); 
     String message= editText.getText().toString(); 
     intent.putExtra(EXTRA_MESSAGE, message); 
     startActivity(intent); 

    } 
    public void C(){ 
} 
    public void openSearch(){ 
     getActionBar().hide(); 
    } 

} 
+10

编译!=执行代码。 –

+6

如果您没有创建对象,则该方法未被调用。比喻:仅仅因为建筑师制定了蓝图并不意味着建造房屋。 –

+1

你甚至打电话给B? –

回答

1

对于首次启动活动时的Android,onCreate由Android OS调用。这是你应该编写代码来初始化所有视图和变量的地方。在this.c()的情况下 - 或者只是c() - Android会自动调用它,因为它在onCreate方法中。此外,由于c()是类的一部分,因此运行时类的实例隐式引用“this”。

我建议了解android应用程序的生命周期。它会帮助你开发出好的应用程序。 http://developer.android.com/training/basics/activity-lifecycle/starting.html

+0

很好的信息,但只是为了确保我明白,对象创建的确切程度如何?我提供的代码中没有任何内容创建对象。通常,当您编译和运行代码时,main会在您使用new关键字创建对象的位置调用。然后该类的构造函数被调用(很像OnCreate被调用的方式)。但是我又没有创建一个对象,它是在作品后面自动完成的? – user2644819

+0

如果你打开你的Manifest文件并查看MainActivity部分,你应该看到它下面:' '这表明当应用程序打开时,MainActivity将成为第一个被调用的活动,从而导致onCreate函数被执行并创建该活动的实例。 – Parnit

+0

所以onCreate()方法是创建实例的原因?onCreate()听起来很像类的构造函数,但构造函数实际上并不创建实例,它只是初始化东西。 – user2644819

-1

我希望我正确地理解你的问题。

onCreate方法中,您已经有了一个this指针,它在被调用时给出。不知道来电者从哪里得到它,反正也无所谓。

+0

嗨,请让我知道我的回答有什么问题,以便我可以改进它! -shares – mafu