异常的其他概念

本章目标
掌握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,肯定是错误的
  }
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值