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

Android中非静态getSharedPreferences无需实例化即可调用的疑问

Android Context方法调用原理解答

核心结论

你观察到的现象并没有违反Java基础规则,本质是Android框架封装和隐含关键字带来的调用错觉,具体原因如下:

  • 你书写这段代码的位置,通常是在Activity、Service等Android系统组件内部,这类组件的继承链本身就包含ContextWrapper:以Activity为例,继承关系为 Activity → ContextThemeWrapper → ContextWrapper → Context,也就是说你写代码所在的类本身就是ContextWrapper的子类
  • 当你在类内部直接调用父类的非静态方法时,Java会自动隐含this前缀指向当前类的实例,你写的getSharedPreferences()完整写法是this.getSharedPreferences("i", Context.MODE_PRIVATE),本质还是通过实例调用非静态方法
  • 这类系统组件的实例化不需要开发者手动执行,Android框架会在组件启动流程中自动完成实例创建、上下文绑定等操作,不需要你手动new ContextWrapper()创建对象

代码修正

你记忆中的调用方法参数存在错误,正确的写法如下:

// 第二个参数为SharedPreferences访问模式,常用MODE_PRIVATE表示仅当前应用可读写该配置文件
SharedPreferences shared = getSharedPreferences("i", Context.MODE_PRIVATE);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:54:00