第九章总结

9.1异常概述

Java 中的异常又称为例外,是一个在程序执行期间发生的事件,它中断正在执行程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类,这可以让程序具有极好的容错性且更加健壮。 

在 Java 中一个异常的产生,主要有如下三种原因:

  1. Java 内部错误发生异常,Java 虚拟机产生的异常。
  2. 编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。
  3. 通过 throw 语句手动生成的异常,一般用来告知该方法的调用者一些必要信息。


Java 通过面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法会产生代表该异常的一个对象,并把它交给运行时的系统,运行时系统寻找相应的代码来处理这一异常。

我们把生成异常对象,并把它提交给运行时系统的过程称为拋出(throw)异常。运行时系统在方法的调用栈中查找,直到找到能够处理该类型异常的对象,这一个过程称为捕获(catch)异常。

 
public class Nineone {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int result =3/0;
		System.out.println(result);
		
		
		
		
		
 
	}
 
}//例题9.1

 
public class Nineone {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str ="lili";
		System.out.println(str + "年龄是:");
		int age = Integer.parselent("20L");
		System.out.println(age);
		
		
		
		
		
 
	}
 
}//例题9.2

9.2:异常的抛出与捕获 

Java 的异常处理通过 5 个关键字来实现:try、catch、throw、throws 和 finally。try catch 语句用于捕获并处理异常,finally 语句用于在任何情况下(除特殊情况外)都必须执行的代码,throw 语句用于拋出异常,throws 语句用于声明可能会出现的异常。


Java 的异常处理机制提供了一种结构性和控制性的方式来处理程序执行期间发生的事件。异常处理的机制如下:

在方法中用 try catch 语句捕获并处理异常,catch 语句可以有多个,用来匹配多个异常。

对于处理不了的异常或者要转型的异常,在方法的声明处通过 throws 语句拋出异常,即由上层的调用方法来处理。

 9.2.1:抛出异常

9.2.2:捕捉异常

try{

//代码块

}catch (Exceptiontype1){

catch (xceptiontype2)

}

....

finally{

//程序代码块}

处理完后9.1代码运行结果

 
 
public class Nineone {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
		
		int result =3/0;
		System.out.println(result);
		}catch(ArithmeticException e) {
			
			System.out.println("算法异常");
			
		}
		
		
		
		
 
	}
 
}//例题9.1

 

修改后9.2代码

1.

 
public class Nineone {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str ="lili";
		System.out.println(str + "年龄是:");
		int age = Integer.parseInt("20");
		System.out.println(age);
		
		
		
		
		
 
	}
 
}//例题9.2

 2.

 
public class Nineone {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		try {
		
		
		String str ="lili";
		System.out.println(str + "年龄是:");
		int age = Integer.parseInt("20L");
		System.out.println(age);
		
		}catch (Exception e) {
			
			System.out.println("program over");	
 
		}finally {
		
		
	System.out.println("程序异常");	
 
	}
	}
}//例题9.2

 

 9.3:Java常见的异常类

红色为常见异常

常见的异常类

异常类说明
CalssCastException类型转换异常
ClassNotFoundException未找到相应类异常
AritchmeticException算数异常
ArrayIndexOutOfBoundsException数组下标越界异常
ArrayStoreException数组中包含不兼容的值抛出的异常
SQLException操作数据库异常类
NullPointerException空指针异常
NoSuchFieldException字段未找到异常
NoSuchMethodException方法未找到抛出的异常
NumberFormatException字符串转换为数字抛出的异常
NegativeArraySizeException数组元素个数为负数抛出的异常
StringIndexOutOfBoundsException字符串索引超出范围抛出的异常
IOException输入输出异常
IllegalAcessException不允许访问某类异常
InstantiationException当应用程序试图使用Class类中的newInstance()方法重创建一个类得实例,而指定的类的对象无法被实例化时,抛出该异常
EOFException文件已结束异常
FileNotfoundException文件未找到异常

9.4: 自定义异常

定义1个exception类继承,这就是自定义异常

括号里是传入参数,super是隐藏方法,作用是调用父类的构造方法打印出错误信息

 
public class MyException extends Exception {    //自定义异常
	
	public MyException (String ErrowMessage) {//输出错误方法
		super(ErrowMessage);//调用父类的构造方法
		
		
	}
	
	
	
		
	
}
//例题9.4

 9.5:在方法中抛出异常

throws 关键字和 throw 关键字在使用上的几点区别如下

  • throws 用来声明一个方法可能抛出的所有异常信息,表示出现异常的一种可能性,但并不一定会发生这些异常;throw 则是指拋出的一个具体的异常类型,执行 throw 则一定抛出了某种异常对象。
  • 通常在一个方法(类)的声明处通过 throws 声明方法(类)可能拋出的异常信息,而在方法(类)内部通过 throw 声明一个具体的异常信息。
  • throws 通常不用显示地捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法; throw 则需要用户自己捕获相关的异常,而后再对其进行相关包装,最后将包装后的异常信息抛出。
     
    public class Tran {
    	
    	static int avg(int number1,int number2) throws MyException {//调用抛到调用avg的地方
    		
    		if(number1<0||number2<0){
    		//System.out.println("不可以使用负数");条件判断
    			
    			throw new MyException("不可以使用负数");//抛出异常给avg
    		}
    		if(number1>100||number2>100){  //判断条件
    			throw new MyException("不可以大于100");
    		}
    		return (number1+number2)/2;//求平均数,返回值
    	
    	}
    	
    	public static void main(String[] args) {//主函数调用方法
    		// TODO Auto-generated method stub
          
    	try {
    		int	result = avg(102,150);
    			System.out.println(result);	
    	} catch (MyException e) {
    		
    		System.out.println(e);	
    	}
     
    	}}
    //例题9.5

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值