常见的Error和Exception

13 阅读2分钟

OutOfMemoryError:

当应用程序尝试加载过大的图像、创建过多的对象或者执行其他内存密集型操作时,可能会遇到内存溢出错误。

为了避免这种情况,开发者应该优化内存使用,例如通过使用内存缓存、压缩图像、及时释放不再使用的资源等方式。

StackOverflowError:

当应用程序递归调用层次太深,导致栈内存耗尽时,会发生栈溢出错误。

为了避免这种情况,开发者应该检查代码中的递归调用,并确保有适当的终止条件。

SQLiteDiskIOException:

当数据库操作因为磁盘I/O问题而失败时,会发生这种错误。

为了处理这种情况,开发者应该在执行数据库操作时捕获相应的异常,并给予适当的反馈。

NetworkOnMainThreadException:

当在主线程(UI线程)中进行网络操作时,会发生这种错误,因为网络操作可能会阻塞主线程,导致界面无响应。

为了避免这种情况,开发者应该使用异步任务(如AsyncTask、IntentService、Loader或者使用RxJava等)来处理网络操作。

ActivityNotFoundException:

当尝试启动一个没有找到或者没有注册的Activity时,会发生这种错误。

为了避免这种情况,开发者应该在启动Activity之前检查意图是否可以被解析。

FileNotFoundException:

当尝试打开不存在的文件时,会发生这种错误。

为了处理这种情况,开发者应该在尝试打开文件之前检查文件是否存在。

SQLiteConstraintException:

当尝试违反数据库约束(如唯一性约束)时,会发生这种错误。

为了避免这种情况,开发者应该确保在插入或更新数据库时遵守所有的约束。

ClassNotFoundException:

当尝试加载一个不存在的类时,会发生这种错误。

为了避免这种情况,开发者应该确保类名和包名正确无误。

NoClassDefFoundError:

当编译时类是可用的,但在运行时找不到类的定义时,会发生这种错误。

这通常发生在依赖库没有正确打包到APK中时,确保构建配置正确是避免这种情况的关键。

RuntimeExceptions(虽然通常被认为是异常,但它们也是运行时的错误):

包括空指针异常(NullPointerException)、数组越界异常(ArrayIndexOutOfBoundsException)等。

这些错误通常是由于程序逻辑错误或者不恰当的输入导致的,应该通过代码审查和测试来避免。