1.什么是异常
异常情况是指程序在运行时,可能由与外部系统的条件变更(与我们一厢情愿所设想的不一设)而导致程序可能会出错的情况。简单来说就是程序运行中不正确的情况。
2.java中异常以什么样的形式存在?
异常以类的形式在java中存在。
3.异常的继承机制
从上面这幅图可以看出,Throwable是java语言中所有错误和异常的超类(万物即可抛)。它有两个子类:Error、Exception。
Error和Exception最大的区别就是Error的异常不能通过程序处理,一般只能放着不管。Exception 的异常可以通过程序来解决,它又分为两种CheckedException(受检异常),一种是UncheckedException(不受检异常)。其中CheckException发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。而UncheckedException发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的,难以排查,我们一般都需要纵观全局才能够发现这类的异常错误,所以在程序设计中我们需要认真考虑,好好写代码,尽量处理异常,即使产生了异常,也能尽量保证程序朝着有利方向发展。
4.异常的处理方式
4.1try...catch
try指“尝试”执行可能出现异常的代码,如果成功,则乎略备用方案,即(B)区的代码;但如失败,代码会catch(捕获)到一个异常对象,放弃(A)计划,开始执行(B)计划!
try catch结构的异常处理提供了这样一种机制:如果代码执行成功,程序流程正常,(B)块的代码将不会执行;如果执行时(A)代码前的语句出现异常,(A)代码将不会执行,程序跳转到(B)代码块开始执行,同时,可(B)代码块中可以得到Exception类型变量ef对这个异常对象的引用,可以调用ef. printStackTrace();方法打印出异常的详细细信息;这为程序从错误中恢复提供了可行的手段。
public class Text { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入数据"); int a=scanner.nextInt(); int b=scanner.nextInt(); try { int num=a/b; System.out.println("正确"); } catch (Exception e) { System.out.println("输入的除数不能为0"); e.printStackTrace(); } } }
4.2try....catch....finally
那这些必须关闭的资源应该放在那里呢?放在try中,不行吧,如果出现异常,那try中的代码就不会执行了,如果放在catch中,那如果ctach捕获的异常不一样,那也不会执行,所以java就给我们准备了这样一个东西,这就是finally块,finally块表示程序不管是否发生异常,总会执行.现在我们把上面的代码进行优化:
public class Text { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入数据"); int a=scanner.nextInt(); int b=scanner.nextInt(); try { int num=a/b; System.out.println("正确"); } catch (Exception e) { System.out.println("输入的除数不能为0"); e.printStackTrace(); }finally{ System.out.println("我会出来吗"); } } }
程序报了异常后finally里的语句任然输出。
4.3throw方法
在方法声明的位置上使用 throws
关键字抛出,谁调用我这个方法,我就抛给谁。抛给 调用者
来处理。
这种处理异常的态度:上报。
public class Text {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a=scanner.nextInt();
try {
jue(a);
} catch (Myyicahng myyicahng) {
myyicahng.printStackTrace();
}
}
public static void jue(int a) throws Myyicahng{
if(a>=0&&a<=100){
System.out.println("输入成功");
}else{
System.out.println("分数必须在0—100之间");
throw new Myyicahng();
}
}
}