java中异常报错如图:
main:表示main方法线程;
java.util.InputMismatchException:表示打印当前异常类型;
下面为可能出错行数,有些还有原因:by:***
java中提供了异常解决机制,帮助处理异常情况:
异常解决办法:
第一种:try catch(try catch finally)
异常解决结构:
try{
//可能出现异常的代码段
}catch(匹配的异常){
解决办法//执行的代码段
}
异常解决执行过程:
try{
//可能出现异常的代码段
}catch(匹配的异常){
解决办法
//执行的代码段
}catch(匹配的异常){
解决办法
//执行的代码段
}catch(匹配的异常){
解决办法
//执行的代码段
}
执行顺序:
1、执行try块中的内容 如果有异常
2、匹配下面所有catch块 如果匹配到 执行对应catch中的 内容跳过整个try-catch,执行后续代码
3、如果没有对应的catch匹配, jvm处理该异常
注意事项:
1、一般情况下 我们会在多重catch中最后添加一个Exception,拍捕获未知异常,统一处理
2、Exception捕获应该放到catch最后,因为异常会从第一个catch开始匹配,如果第一个是Exception,那么会导致
Exception捕获所有异常,因为Exception是所有异常的父类
try{
//可能出现异常的代码段
}catch(匹配的异常){
解决办法
//执行的代码段
}catch(匹配的异常){
解决办法
//执行的代码段
}catch(匹配的异常){
解决办法
//执行的代码段
。。。。。
}finally{
//执行代码
}
执行顺序
第二种:throws (throw)
throws: 抛 出很多
抛出异常,不解决。 解决异常的一种方式,听天由命 统一交由jvm解决
在方法的形参列表之后 通过 throws 对外抛出异常,这个异常可以是一个 也可以很多。
throws 抛出运行时异常时 调用该方法是 可以不对抛出的异常进行处理,因为运行时异常只有程序执行期间才能捕获
在方法后添加throws关键词 用来向上抛出异常信息:
运行时异常:
调用异常方法时 不会报错 ,所以很难判定是否存在异常。
检查时异常:
程序调用时会报错:
解决方案:
1、继续向上抛 简单 但是不能解决问题
2、手动try-catch 复杂 但是用户体验度好 能精准定位到问题出错的地方
throw:
定义在方法里面 和throws一起使用
不要将throw产生的异常 try-catch
很多时候。jdk提供的异常都不满足场景需要,所以需要自己创建一个自定义异常:
自定义异常:
1、让当前类继承 Exception
2、编写空构造器以及带参构造程序异常:所有的异常类都是java.lang.Exception的子类;
java.util.InputMismatchException:由Scanner抛出,表明获取的标记与期望类型的模式不相匹配,或者该标记超出期望类型的范围。
java.lang.IllegalStateExceptiom:在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。
java.lang.ArithmeticException:当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
java.lang.NullPointerException:当应用程序试图在需要对象的地方使用 null
时,抛出该异常。这种情况包括:
调用 null
对象的实例方法。
访问或修改 null
对象的字段。
将 null
作为一个数组,获得其长度。
将 null
作为一个数组,访问或修改其时间片。
将 null
作为 Throwable
值抛出。
java.lang.ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常。例如,以下代码将生成一个 ClassCastException
:
Object x = new Integer(0); System.out.println((String)x);