经过本章的学习能够达到一下目标:java
item 了解异常的产生原理面试
掌握异常处理语句的基本格式bash
掌握throw和throws关键字的做用学习
能够自定义异常spa
了解Exception与RuntimeException的区别code
了解断言的做用orm
认识异常: 关于被除数不能为0的说明: 被除数为0在数学上的解法是无穷大,对于计算机来讲,若是是无穷大,则意味着内存将所有被占满。 cdn
在java中异常处理的语句:对象
try{
//有可能出现异常的语句
int temp = i / j;//此处会产生异常
System.out.println("两个数字相除结果: " + temp);
}catch (ArithmeticException e) { //异常类 异常对象
// TODO: 编写异常的处理语句
System.out.println("出现异常来:" + e);
}catch (Exception e) {
// TODO: 编写异常的处理语句
}finally {
//必定会运行的程序代码
}
复制代码
从程序的运行结果能够清楚地发现,由于程序中加入了异常处理代码,因此当有异常发生后,整个程序也不会由于异常的产生而中断执行。blog
异常类的继承结构
在整个java的异常结构中,实际上有两个类最经常使用的类,分别是Exception和Error,这两个类都是Throwable的子类, 以下图:
Exception:通常表示的是程序中出现的问题,能够直接使用try...catch处理。 Error:通常指的是JVM错误,程序中没法处理。 通常状况下,开发者习惯于将Exception和Error统称为异常,而算术异常、数字格式异常等都属于Exception的子类。
java的异常处理机制
在整个java的异常处理中,实际上也是按照面向对象的方式进行处理,处理的步骤以下: 1.一旦产生异常,则首先会产生一个异常类的实例化对象。 2.在try语句中对此异常对象进行捕捉。 3.产生的异常对象与catch语句中的各个异常类型进行匹配,若是匹配成功,则执行catch语句中的代码。
通常在开发时,无论出现任何异常时,均可以直接使用Exception进行处理,这样会比较方便。
那么问题来啦? 可不能够直接使用Throwable? 首先使用Throwable捕获异常,这在代码中没有任何问题,由于Throwable捕获都范围是最大的。但通常开发中是不会直接使用Throwable进行捕获的,对于Throwable来讲有Exception、Error两个子类,Error类自己不须要程序处理,而程序中须要处理的只是Exception,因此不必使用Throwable。 对于一个程序来讲,若是有多个异常最好分别进行捕获,而不要直接使用Exception捕获所有异常。
了解throws与throw关键字
在定义一个方法时可使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理,throws使用格式以下。
public 返回值类型 方法名称(参数列表...) throws 异常类{}
复制代码
throw关键字
与throw关键字不一样的是,能够直接使用throw关键字人为地抛出一个异常,抛出时直接抛出异常类的实例化对象便可。
注意:finally语句块的编写要求
finally做为异常的统一出口,因此在此语句块的编写中尽量不要出现像throw或return这样的语句,这样能够避免没必要要的问题出现。
Exception类与RuntimeException类
在java面试中常常会问Exception类与RuntimeException类的区别。 咱们来看下边的代码。
public static void main(String[] args) throws Exception{
String str = "123";
int temp = Integer.parseInt(str);
System.out.println(temp*temp);
}
复制代码
咱们看一下parseInt方法
public static int parseInt(String s) throws NumberFormatException
复制代码
方法throws 在声明时使用throws关键字,可是在方法调用时并无使用try...catch进行处理,这是为何呢?看一下NumberFormatException类的继承关系,
Exception--RuntimeException--lllegalArgumentException--NumberFormatException
复制代码
Exception在程序中必须使用try--catch进行处理。 RuntimeException能够不使用try--catch进行处理,可是若是有异常产生,则异常将由JVM进行处理。 提示:对于RuntimeException的子类最好也使用异常处理机制。 虽然RuntimeException的异常能够不用try...catch进行处理,可是若是一旦处理异常,则确定会致使程序中断执行,因此,为了保证程序在出错后依然能够执行,因此在开发代码时最好使用try...catch的异常处理机制进行处理。
自定义异常类 在java中已经提供了大量的异常类,可是这些异常类有时也很难知足开发者的要求,因此用户能够根据本身的须要来定义本身的异常类。定义异常类只须要Exception类便可。
断言
在JDK1.4以后,java中增长类断言的功能。断言是确定某一个结果的返回值是正确的,若是最终此结果的返回值是错误的,则经过断言检查确定会提示错误信息。断言的定义格式以下
assert boolean 表达式
assert boolean 表达式:详细的信息
复制代码
开发中不提倡使用断言。