首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 傳遞 Context 到普通類時的空指針陷阱:賦值順序顛倒

     編輯:程式設計綜合問答

錯誤代碼

public class LocalStorage {
    Context ctx;
    public LocalStorage(Context c) {
        c = ctx; // 錯誤:將未初始化的 ctx 賦值給參數 c,導致 ctx 仍為 null
    }
}

正確寫法

public class LocalStorage {
    Context ctx;
    public LocalStorage(Context c) {
        ctx = c; // 正確:將傳入的 Context 賦值給成員變量
    }
}

原理解析

  • Java 參數傳遞是**值傳遞**(引用的值)。
  • c = ctx 意為「將成員變量 ctx(默認 null)的引用賦值給局部參數 c」,參數 c 變為 null,成員 ctx 不變。
  • ctx = c 意為「將參數 c 持有的引用賦值給成員變量 ctx」,成員 ctx 指向有效 Context。

最佳實踐

  1. 成員變量命名用 mContext 或 context,參數用 context,IDE 自動生成構造器可避免低級錯誤。
  2. 構造器中添加非空斷言:this.ctx = Objects.requireNonNull(context, "Context must not be null");。
  3. 若類為單例或長期持有,使用 Application Context 避免內存洩漏:ctx = context.getApplicationContext();。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved