java 异常
Posted 流星雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 异常相关的知识,希望对你有一定的参考价值。
一.异常
概念
程序在执行过程中,出现的非正常的情况,最终会导致JVM的不正常停止。错误并不是异常,而是脱离程序员控制的问题。
层次
Exception类是所有异常类的父亲。
Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。
Exception类和Error是 Throwable 类的子类:
Error:严重错误,无法通过处理的错误,只能事先避免,好比绝症。
Exception:异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。常用方法
1.public void printStackTrace():打印错误输出流,就是打印异常的详细信息。
2.public String getMessage():返回关于发生的异常的详细信息,就是提示错误原因。异常分类
编译时期异常:checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。
运行时期异常:runtime异常。 运行时异常是可能被程序员避免的异常,,运行时异常可以在编译时被忽略。捕获异常
使用 try 和 catch 关键字可以捕获异常。try/catch 代码块里放可能异常的代码。它们不能单独使用。
语法:try{ 编写可能会出现异常的代码 }catch(异常类型 e){ 处理异常的代码 }
演示:
try{ int i =1 /0; }catch(ArithmeticException e){ System.out.println("兄弟,零不能 为被除数"); } System.out.println("路过");
运行输出结果:
兄弟,零不能为被除数 路过
多重捕获块
一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。
语法:try{ 编写可能会出现异常的代码 }catch(异常类型 e1){ 处理异常的代码 }catch(异常类型 e2){ 处理异常的代码 }catch(异常类型 e3){ 处理异常的代码 }
释:
1.可以在try语句后面加无数个catch块。
2.如果try代码中发生异常,异常被抛给第一个 catch 块。
3.如果抛出异常的数据类型与相仿的异常类型相匹配,它在这里就会被捕获。
4.如果不匹配,它会被传递给第二个 catch 块。
5.如此,直到异常被捕获或者通过所有的 catch 块。throw/throws
如果需要在程序中自行抛出异常,就是将这个异常对象告知给调用者,则应使用throw语句
格式:throw new 异常类名(参数);
可以使用 throw 语句实现如下代码:
public class ThrowDemo { public static void main(String[] args) { int[] arr = {2,4,52,2}; int index = 4; int element = getElement(arr, index); System.out.println(element); System.out.println("了结"); } public static int getElement(int[] arr,int index){ 【判断索引是否越界】 if(index<0 || index>arr.length-1){ 【判断条件如果满足,方法已经无法继续运算。 会将异常告知给调用者。此时就用异常来解决。】 throw new ArrayIndexOutOfBoundsException("越界了~"); } int element = arr[index]; return element; }
指明此方法执行时,可能会抛出的异常类型。如果一个方法没有捕获到一个编译时期异常,那么该方法必须使用throws关键字来声明并让调用者去处理。throws要放在方法的尾部。
格式:修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
演示:
public class ThrowsDemo { public static void main(String[] args) throws FileNotFoundException { read("a.txt"); } 【此功能有问题会报告给调用者,反之】 public static void read(String path) throws FileNotFoundException { if (!path.equals("a.txt")) { throw new FileNotFoundException("木有"); } } }
注:
要是该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,就用逗号隔开。finally
1.finally要创建在catch代码块后面执行的代码块。
2.无论是否发生何事,finally代码块中的代码总会被执行。
演示:try{ int i =1 /0; }catch(ArithmeticException e){ throw new ArithmeticException("兄弟,零不能为被除数"); }finally{ System.out.println("我不管,我就要执行。"); } System.out.println("路过");
运行输出结果:
【报错异常】Exception in thread "main" java.lang.ArithmeticException: 兄弟,零不能为被除数 我不管,我就要执行。
注:
finally不能单独使用。
以上是关于java 异常的主要内容,如果未能解决你的问题,请参考以下文章
Android Java:在 onCreateView() 中返回空视图的片段
java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段