You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API中new关键字使用场景及无new实例化疑问

关于Android中Intent实例化与getIntent()的疑问解答

嘿,作为编程新手碰到这个问题太正常了,我当初刚学Android的时候也纠结过!咱们一步步把这些点说清楚:

为什么有时候实例化对象不用new关键字?

这本质上是创建新对象和获取已存在对象的区别:

  • 当你用new Intent(...)的时候,是主动创建一个全新的Intent实例。比如你要从当前页面跳转到另一个页面,需要自己构造一个包含跳转目标、数据的Intent,这时候就需要用new来生成新对象。
  • 而getIntent()是获取系统已经创建好并绑定到当前Activity的Intent实例。比如当你从Activity A跳转到Activity B时,系统会把A传递过来的Intent对象自动关联到B的实例上,你调用getIntent()只是把这个已经存在的对象拿出来用,自然不需要再用new创建新的。

getIntent()的定义位置——它不属于Intent类!

很多新手会误以为这个方法是Intent类的,但其实它是**Activity类(以及所有继承自Activity的子类,比如AppCompatActivity)的成员方法**。

原因很简单:每个Activity实例在被启动时,都会和一个启动它的Intent绑定在一起,Activity类作为页面的核心类,自然提供了这个方法来让开发者获取到绑定的Intent。举个代码例子:

// 在你的Activity子类中
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // 调用的是当前Activity实例的getIntent()方法
    Intent receivedIntent = getIntent();
    String data = receivedIntent.getStringExtra("key");
}

如果它是Intent类的方法,那写法应该是Intent.getIntent()(静态方法),但实际上Intent类根本没有这个静态方法。

小扩展:这类“获取已存在实例”的设计很常见

在Android开发中,类似的场景还有很多:

  • getApplicationContext():获取全局的Application实例,系统已经初始化好,直接拿就行
  • getSharedPreferences(...):获取已存在的SharedPreferences实例,不用自己new
  • getSystemService(...):获取系统服务的实例,也是系统提前创建好的

这些设计都是为了让开发者不用重复创建实例,同时保证实例的唯一性和正确性。

内容的提问来源于stack exchange,提问作者c75

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:51:48