commonruntimeexception错误怎么捕获
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了commonruntimeexception错误怎么捕获相关的知识,希望对你有一定的参考价值。
JAVA 子线程中的运行时异常(RuntimeException)捕获 转载2019-04-24 15:21:08
Zebul博
码龄9年
关注
转自:https://www.cnblogs.com/chenfei0801/archive/2013/04/23/3039286.html
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked exception处理掉。这一点是通过java.lang.Runnable.run()方法声明(因为此方法声明上没有throw exception部分)进行了约束。但是线程依然有可能抛出unchecked exception(如运行时异常),当此类异常跑抛出时,线程就会终结,而对于主线程和其他线程完全不受影响,且完全感知不到某个线程抛出的异常(也是说完全无法catch到这个异常)。JVM的这种设计源自于这样一种理念:“线程是独立执行的代码片断,线程的问题应该由线程自己来解决,而不要委托到外部。”基于这样的设计理念,在Java中,线程方法的异常(无论是checked还是unchecked exception),都应该在线程代码边界之内(run方法内)进行try catch并处理掉.换句话说,我们不能捕获从线程中逃逸的异常。
看下面的例子:
复制代码
复制代码
运行结果:
从运行结果中,我们可以看到的是,这个异常在main线程中没有catch到,即
永远不会执行到。
问题来了,我们如果需要捕获其线程的unchecked异常时该怎么办?Java SE5之后,我们可以通过Executor来解决这个我问题。为了解决这个问题,我们需要修改Executor产生线程的方式。Thread.UncaughtExceptionHandler是java SE5中的新接口,它允许我们在每一个Thread对象上添加一个异常处理器。(UncaughtExceptionHandler)。Thread.UncaughtExceptionHandler.uncaughtException()方法会在线程因未捕获的异常而面临死亡时被调用。下面这个例子简单的演示了如何使用UncaughtExceptionHandler
public class ExceptionThread2 implements Runnable
@Override
public void run()
Thread t = Thread.currentThread();
System.out.println("run() by" + t);
System.out.println("eh=" + t.getUncaughtExceptionHandler());
throw new RuntimeException("抛出运行时异常");
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
运行结果
从上述的运行结果中可以看到,未捕获的异常是通过uncaughtException来捕获的。
按照上述的实例,我们可以按照具体的情况,逐个地设置处理器。但是如果我们知道将要在代码的所有地方都是用相同的异常处理器,那么更简单的方式是在Thread类中设置一个静态域,并将这个处理器设置为默认的未捕获异常处理器。看下面的例子:
这个默认的处理器只有在线程不存在非默认的异常处理器时才会调用。 在运行时,系统会检查线程是否有属于自己的异常处理器,如果发现没有,就去检查相应的线程组是否有专有的异常处理器,如果发现也没有,再调用默认的异常处理器。 参考技术A 您好,CommonRuntimeException错误是一种常见的运行时异常,它可以由多种原因引起,比如空指针异常、类型转换异常、数组越界异常等。要捕获这种错误,最好的方法是使用try-catch语句,将可能出现异常的代码放在try块中,然后在catch块中捕获异常,并采取相应的措施来处理异常。此外,还可以使用finally块来确保在捕获异常后,一定会执行某些操作,以确保程序的正确性。 参考技术B CommonRuntimeException错误可以通过捕获异常来捕获,即使用try…catch块来捕获并处理该异常。你也可以创建一个统一的异常处理机制来处理所有出现的异常,然后根据不同的类型进行不同的处理。 参考技术C RuntimeExceptionruntimeException在java中是不被检查的,如何让抛出的runtimeException能够捕获到,并进行相应的处理。try //调用可能出现run...
python错误和异常处理怎处理你知道么
异常处理
什么是异常?
首先要清楚,什么是异常,异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下
python的异常处理
异常是由错误触发的,那么错误有哪些情况呢?
1.语法错误:
2.逻辑错误
异常的种类
在平时编码过程中,常见的异常有以下这些:
当然,还有其他异常,这里就不做过多演示。出现异常,我们肯定想到要处理,不然程序就直接报错崩溃了。其实我们一直在处理异常,只是没有发现,比如要判断你输入的内容是不是数字,我们以前是这么判断的:
在这里if就是在处理异常,但是,如果我还有其他程序也要运行,那就要写成这样了:
这时候,你会发现,程序写的很长,可读性差,如果有十个这样的输入,那这个程序就没法看了,这时候,python提供了一种异常处理的方法try…except…
part1 基本语法
现在用这套方法来处理上面的异常,看看效果怎么样:
这样一看代码简洁了很多啊,效果很完美
part2 异常只能用来处理指定的异常情况,其他情况不会处理。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以价位:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~
我们可以试一下,把错误类型改成别的,看看会怎样:
看来错误类型还要对应才行。
part3 多分支
这时候,有人就会觉得,万能异常这么厉害,我还要写什么其他异常的,全部用这个不就好啦?这个怎么说呢,要分两点来看吧:
1.如果你想要的效果是,无论什么异常,你都直接无视或者说用一种处理机制,那么就直接用吧,没问题,
2.如果你要根据异常类型处理不同机制,那还得用多分支的方式,
当然,你可以结合多分支和万能异常一起使用啊,这样多分支的健壮性会更好、
part5 异常的其他结构
下面来看看异常处理的其他结构:
part6 主动触发异常
我们学过主动触发异常用的是raise,下面看一下能不能捕获:
part7 自定义异常
如果你想自定义一个异常,也是可以的。异常是什么,就是一个类嘛,那我们就定义一个异常类看看:
报错了,看错误提示,再看看type错误是怎么写的,原来要继承一个叫BaseException的类,再试一下:
完美了,成了。
part8 断言
断言可以说就是if的一种简写,直接看例子吧:
如果判断不正确:
这个完全可以用if写:
效果完全一样
part9 try…except…的好处和用法:
try…except…就是取代了if的那种方法,让你的代码在保证可读性的情况下,还增强了健壮性,提高了容错率,使用这种方法:
1.把错误处理和你的主逻辑分开了
2.代码更容易组织,更清晰,复杂的任务更容易实现
3.更安全了,不会因为一些小错误导致程序崩溃
但是要清楚的一点是,if和try…except…都是python中处理异常的方法,不要学了try就说if和异常处理没有关系了。其次,学完这个后发现try…except…很强大,是不是每一段代码都可以加这个处理异常,就不用管报错了,这是肯定不行的,try…except…还是要慎重使用,首先try…except是你附加给你的程序的一种异常处理的逻辑,与你的主要的工作是没有关系的,这种东西加的多了,会导致你的代码可读性变差,然后异常处理本就不是你混乱逻辑的保姆,只有在错误发生的条件无法预知的情况下,才应该加上try…except
python福利教程领取方式:
1、点赞+评论(勾选“同时转发”)
2、关注小编。并私信回复关键字【19】
(一定要私信哦~点击我的头像就能看到私信按钮了)
以上是关于commonruntimeexception错误怎么捕获的主要内容,如果未能解决你的问题,请参考以下文章
DNS配置错误 无法上网是啥原因?我各种DNS都试了可就是没办法上网 怎
win10安装oracle11g时 出现这个错误incomplete distance tree怎