java.lang.StackOverflowError
来源:互联网 发布:反向传播算法 推导 编辑:程序博客网 时间:2024/06/13 02:55
项目中遇到这个bug,栈溢出。
错误信息如下:
可以看到 47行与36行交替执行,出现此错误的原因是,递归调用导致函数层级过多,最后栈溢出。
比如,下面这段代码:
private static Context context;private SpUtils instance; public static SpUtils getInstance(Context context) { setContext(context); if (instance == null) { sp = context.getSharedPreferences("pp_db", Context.MODE_PRIVATE); instance = new SpUtils(); } return instance; } private static void setContext(Context context){ getInstance(context).context=context; }
上面代码的思路大抵是考虑到静态成员不能访问非静态成员,但却造成另一个更大的问题,形成了递归。
针对上面的递归,可以修改如下:
private Context context;private SpUtils instance; private SpUtils(Context context) { this.context=context; } public static SpUtils getInstance(Context context) { if (instance == null) { sp = context.getSharedPreferences("pp_db", Context.MODE_PRIVATE); instance = new SpUtils(context); } return instance; }
这其实牵涉到初始化及类的加载顺序问题。一般来说,静态方法不能访问非静态成员,值得注意的是,构造也可以看成是static方法,虽然它没有加static修饰。类是在任何static成员被访问时加载的。[参考资料:java编程思想第四版7章145页7.9初始化及类的加载]
0 0
- java.lang.StackOverflowError翻译
- java.lang.StackOverflowError
- java.lang.StackOverflowError Exception
- java.lang.StackOverflowError
- java.lang.StackOverflowError
- java.lang.StackOverflowError
- java.lang.StackOverflowError
- Java.lang.StackOverflowError
- java.lang.StackOverflowError
- java.lang.StackOverflowError
- java.lang.StackOverflowError
- java.lang.StackOverflowError
- java.lang.StackOverflowError
- Android java.lang.StackOverflowError
- java.lang.StackOverflowError
- 异常:java.lang.StackOverflowError
- java.lang.StackOverflowError错误
- java.lang.StackOverflowError
- Struts2—入门
- 基础练习 特殊回文数
- 关于NDK环境变量的问题
- C++primer 第三章笔记 初稿
- java Future 接口介绍
- java.lang.StackOverflowError
- 转载 STM32的bootloader IAP编程
- iOS动画——流光文字
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- Android studio改变状态栏颜色,实现全局美感
- 移植JAVA WEB应用到gradle+cargo问题总结 win8.1q
- MySQL
- MySQL