异常的其他概念
本章目标
掌握throws与throw关键字的作用
掌握Exception与RuntimeException的区别
可以自定义异常类
了解断言的作用及应用
throws关键字
在定义一个方法的时候可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理 。
throws使用格式
——public 返回值类型 方法名称(参数列表…) throws 异常类{}
使用throws关键字
class Math{
public int div(int i,int j) throws Exception{//本方法中可以不处理异常
int temp = i/j;//此方法有可能产生异常
return temp;//返回计算结果
}
}
public class ThrowsDemo01 {
public static void main(String[] args) {
Math m = new Math();//实例化 Math 对象
try{//因为有 throws ,不管是否有异常,都必须处理
System.out.println("除法操作:"+m.div(10,2));
}catch(Exception e){
e.printStackTrace();//打印异常
}
}
/* 结果:
* 除法操作:5
* */
}
在主方法处使用throws关键字
class Math{
public int div(int i, int j) throws Exception{//方法可以不处理异常
System.out.println("******** 计算开始 ********");
int temp = 0;//声明整型变量
try{
temp = i/j;//如果产生异常,则执行 catch
}catch(Exception e){//捕获异常
throw e;//把异常交给被调用处
}finally{//不管是否产生异常都执行此代码
System.out.println("******** 计算结束 ********");
}
return temp;
}
}
public class ThrowDemo02 {
public static void main(String[] args) {
Math m = new Math();//实例化 Math 对象
try{
System.err.println("除法操作:"+m.div(10, 0));
}catch(Exception e){//进行异常的捕获
System.out.println("异常产生:"+e);
}
}
/* 结果:
* ******** 计算开始 ********
* ******** 计算结束 ********
* 异常产生:java.lang.ArithmeticException: / by zero
* */
}
throw关键字
与throws不同的是,可以直接使用throw抛出一个异常。抛出的时候直接抛出异常类的实例化对象即可。
抛出异常
public class ThrowDemo01 {
public static void main(String[] args) {
try{
throw new Exception("自己抛出的异常!");//抛出异常的实例化对象
}catch(Exception e){//捕获异常
System.out.println(e);
}
}
/* 结果:
* java.lang.Exception: 自己抛出的异常!
* */
}
范例 —— throw与throws的应用
class Math{
public int div(int i,int j) throws Exception{//本方法中可以不处理异常
int temp = i/j;//此方法有可能产生异常
return temp;//返回计算结果
}
}
public class ThrowsDemo02 {
//本方法中的所有异常都可以不使用 try....catch 处理
public static void main(String[] args) throws Exception {
Math m = new Math();//实例化 Math 对象
System.out.println("除法操作:"+m.div(10,2));
}
/* 结果:
* 除法操作:5
* */
}
程序执行流程
Exception与RuntimeException
这两个类的区别如下:
——Exception在程序中是必须使用try…catch进行处理
——RuntimeException可以不使用try…catch进行处理,但是如果有异常产生,则异常将由JVM进行处理
自定义异常类
在Java中已经提供了大量的异常类,但是这些异常类有些时候也很难满足开发者的要求,所以此时用户可以根据自己的需要定义自己的异常类,定义异常类,只需要继承Exception类即可。
class MyException extends Exception{//自定义异常类,继承 Exception 类
public MyException(String msg){//构造方法接收异常信息
super(msg);//调用父类中的构造方法
}
}
public class DefaultException {
public static void main(String[] args) {
try{
throw new MyException("自定义异常。");//抛出异常
}catch(Exception e){//异常处理
System.out.println(e);
}
}
/* 结果:
* J020702.DefaultException.MyException: 自定义异常。
* */
}
断言(assert)
在JDK 1.4之后,Java中增加了断言的功能,那么什么叫断言呢?断言就是肯定某一个结果的返回值是正确的,如果最终此结果的返回值是错误的,则通过断言检查肯定会为用户提示错误信息。断言的定义格式如下所示:
——assert boolean表达式 ;
——assert boolean表达式 : 详细的信息
使用断言
public class Test {
public static void main(String args[]){
int x[] = {1,2,3} ; // 定义一个数组,长度为3
assert x.length == 0 ; // 此处断言数组长度为0,肯定是错误的
}
}
编译程序:javac Test.java
验证程序:java –ea Test
输出断言的提示信息
public class Test {
public static void main(String args[]){
int x[] = {1,2,3} ; // 定义一个数组,长度为3
assert x.length == 0 : "数组长度不为0" ;
// 此处断言数组长度为0,肯定是错误的
}
}