`

Thread.UncaughtExceptionHandler简单小实践

阅读更多
在Java 的异常处理机制中:
如果抛出的是Exception异常的话,必须有try..catch..进行处理,属于checked exception。
如果抛出的是RuntimeException异常的话,则不是必须进行try..catch..异常处理,发生异常之后将由JVM进行处理,属于unchecked exception。
注意:为了保证程序的健壮性,建议抛出RunntimeException异常,也使用try..catch..进行处理。

这两者最本质的区别在于设计者认为使用者是否能够并且应该处理这个异常。

Java 异常的分类:
基类为:Throwable
Error 和 Exception 继承于Throwable
RuntimeException和IOException等继承Exception
其中,Error和RuntimeException及其子类属于unchecked exception, 而其他异常为checked exception。

Error类描述了Java运行系统中的内部错误以及资源耗尽的情形,应用程序不应该抛出这种类型的对象(一般是由Java虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在我们在程序设计时,应该更关注Exception体系。

RuntimeExcption体系,包括错误的类型转换,数组越界访问和试图访问空指针等等。如果出现RuntimeException,那么一定是你自己的错误。

其他非RuntimeExcetpion(IOException等等),这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。

package com;

public class ThreadDemo implements Thread.UncaughtExceptionHandler {

	@Override
	public void uncaughtException(Thread t, Throwable e) {
		StackTraceElement[] stes = e.getStackTrace();
		for (StackTraceElement stackTraceElement : stes) {
			String className = stackTraceElement.getClassName();
			String fileName = stackTraceElement.getFileName();
			int lineNumber = stackTraceElement.getLineNumber();
			String methodName = stackTraceElement.getMethodName();
			System.out.println("Exception in thread \"" + t.getName() + "\" "
					+ e + "\n" + "at " + className + "." + methodName + "("
					+ fileName + ":" + lineNumber + ")");
		}
	}

	public static void main(String[] args) {
		Thread.setDefaultUncaughtExceptionHandler(new ThreadDemo());
		int a = 1 / 0;
		new Thread() {
			public void run() {
				int b = 2 / 0;
			};
		}.start();
	}
}

分享到:
评论

相关推荐

    java、杀死启动进程、定时执行程序、隐藏黑窗口(dos窗口)、线程异常死亡(保活)

    Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { public void uncaughtException(Thread t, Throwable e) { System.out.println("Thread " + t.getName() + " died with ...

    安卓异常捕捉弹窗

    在Android中,开发者可以使用全局的`Thread.UncaughtExceptionHandler`来捕获那些未被处理的异常。默认情况下,系统会显示一个简单的错误报告并终止应用。但是,为了提供更好的用户体验和错误报告,我们可以自定义这...

    android捕获全局异常,CrashHandler完整工程源码

    1. **创建自定义CrashHandler类**:首先,我们需要创建一个继承自`Thread.UncaughtExceptionHandler`的类,例如`CrashHandler`。在这个类中,我们需要覆写`uncaughtException`方法,这是处理未捕获异常的关键。在该...

    android崩溃日志保存SDCARD-本地阅读-并发送email

    在Android中,我们可以重写`Thread.UncaughtExceptionHandler`来实现这一点。创建一个全局的异常处理器类,如下: ```java public class CrashHandler implements Thread.UncaughtExceptionHandler { // 保持对...

    Java多线程之多线程异常捕捉

    首先,我们需要创建一个实现了`Thread.UncaughtExceptionHandler`接口的类,这个接口定义了一个`uncaughtException`方法,当线程因未捕获的异常而终止时,该方法会被调用。 ```java class ...

    Android异常处理最佳实践

    public static Thread.UncaughtExceptionHandler defaultUncaughtExceptionHandler; @Override public void onCreate() { super.onCreate(); mContext = this; // 获取默认的异常处理器 ...

    OS进程管理最终强化版(Java)

    Java的`try-catch-finally`结构可以捕获并处理异常,而在多线程环境下,`Thread.UncaughtExceptionHandler`可以定义全局的未捕获异常处理器,确保即使在异常情况下也能优雅地处理错误。 总之,“OS进程管理最终强化...

    java实现的电风扇

    可以使用try-catch-finally结构,或者使用Thread.UncaughtExceptionHandler来捕获和处理未捕获的异常。 通过分析这个"java实现的电风扇"项目,我们可以深入理解Java多线程的原理和实践,这对于开发高并发、实时性强...

    Android app 闪退弹框 CrashUI当 Android app内发生exception

    当Android应用在运行时遇到未被捕获的异常(Exception),系统会默认终止应用并显示一个简单的错误信息,这对于用户来说并不友好。因此,开发者通常会自定义CrashUI来提供更友好的错误反馈和调试信息。 首先,我们...

    JAVA多线程教程[归类].pdf

    Java提供了`Thread.UncaughtExceptionHandler`接口来处理未捕获的异常。 理解并熟练掌握Java多线程是Java开发者必备的技能之一,这不仅涉及到程序的并发执行,还关系到程序的稳定性和性能优化。通过学习和实践,...

    Android 本地日志记录

    例如,我们可以创建一个名为`TestCrashHandler`的类,继承自`Thread.UncaughtExceptionHandler`,并在其中捕获并记录异常信息。同时,我们还需要将这个自定义的异常处理器设置为应用的默认处理器,以覆盖系统的默认...

    安卓日志分析崩溃拦截相关-动态错误提示效果Android.rar

    2. **Thread.UncaughtExceptionHandler**:这是Java线程处理未捕获异常的默认接口。在Android中,我们可以自定义这个处理器,提供友好的错误提示,并记录崩溃信息。 3. **崩溃报告**:在捕获到异常后,通常会将错误...

    安卓,线程池的使用 ,封装

    2. 异常处理:封装线程池时,应添加异常处理机制,例如通过`Thread.UncaughtExceptionHandler`捕获并处理线程中的未捕获异常,防止应用崩溃。 3. 请求队列管理:选择合适的任务队列类型,如`ArrayBlockingQueue`、`...

    CrashHandler android异常处理

    - 首先,创建一个实现`Thread.UncaughtExceptionHandler`接口的类,例如`CrashHandler`。 - 在`uncaughtException`方法中,收集异常信息(包括异常类型、堆栈轨迹、设备信息等)。 - 存储异常信息,通常选择将...

    模拟多进程并发

    使用Thread.UncaughtExceptionHandler可以捕获并处理未捕获的线程异常。 9. **性能监控与调优**:开发者需要使用如JVisualVM等工具来监控线程状态,分析CPU和内存使用,以便优化并发程序的性能。 综上所述,这个...

    android线程池demo

    线程池还提供了异常处理机制,可以通过`Thread.UncaughtExceptionHandler`来捕获并处理任务执行过程中抛出的未捕获异常。 ### 总结 `android线程池`是Android应用中进行多线程操作的重要工具,它可以帮助我们更有效...

    AndroidCustomCrash:自定义安卓的crash处理

    // 或者,你可以选择重启应用,但这不是最佳实践,因为用户可能无法理解发生了什么 restartApplication(); } } ``` 2. 设置自定义的`UncaughtExceptionHandler` 在应用启动时,你需要将自定义的`...

    Android开发的面试题.zip

    在Android开发领域,面试通常会涉及多个层面的知识,包括但不限于基础概念、UI设计、性能优化、网络编程、数据...通过深入理解和实践这些知识点,开发者可以更好地适应Android平台的变化,为用户提供更优秀的应用体验。

Global site tag (gtag.js) - Google Analytics