探索java异常处理

经过本章的学习能够达到一下目标: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 异常类{}
复制代码

注意:不要在主方法中使用throws。 主方法为一切的起点,一切的操做也是主方法开始的。因此,若是在主方法中使用throws,则程序出现问题后确定交由JVM进行处理,将致使程序中断。

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 表达式:详细的信息
复制代码

开发中不提倡使用断言。

相关文章
相关标签/搜索