第7章Java异常处理

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

try/catch/finally
在try/catch块后加上finally块,可以确保无论是否发生异 常,finally块中的代码总能被执行
try 块
有异常
无异常 catch 块
finally 块
try/catch块
import java.util.Scanner; 输入:2 0 public class Test1 { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("请输入两个整数:"); try{ int x=input.nextInt(); int y=input.nextInt(); int result=x/y; System.out.println("相除的结果为:"+result); }catch(ArithmeticException e){ System.out.println("除数不能为0!"); } finally { System.out.println("程序结束!"); 除数不能为0! } 控制台输出 程序结束! } }
try/catch 块后的代码段
try/catch块
import java.util.Scanner; 输入:2 0 public class Test1 { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("请输入两个整数:"); try{ int x=input.nextInt(); int y=input.nextInt(); int result=x/y; System.out.println("相除的结果为:"+result); System.out.println("程序结束!"); }catch(NullPointerException e){ System.out.println("除数不能为0!"); } } 程序中断运行 }
上机练习
编写一个程序TestException1,处理数组下标越界异常 ( ArrayIndexOutOfBoundsException)
在try块中,编写数组代码
在catch块中,捕获数组越界异常,并且打印异常信息
在finally块中,打印一条语句
public class TestException1 { public static void main(String[] args) { int[] a={1,2,3,4,5,6,7,8,9,10}; try{ for(int i=0;i<=100;i++){ System.out.println(a[i]); } }catch(Exception e){ System.out.println("数组下标越界"); System.out.println(e); }}}
什么是异常
异常就是在程序的运行过程中所发生的不正常的事件,它 会中断正在运行的程序
程序运行 异常! 程序中断运行
面对异常该怎么办呢?通常情况下,我们会这样处理:
堵车! 绕行或者等待
撞车!
请求交警解决
生活中,我们会根据不同的异常进行相应的处 理,而不会就此中断我们的生活
什么是异常处理
Java编程语言使用异常处理机制为程序提供了错误处理的 能力
程序中预先想好了 对付异常的处理办法
程序运行
异常!
对异常进行处理
处理完毕,程序继续运行
Java中如何进行异常处理
Java程序出现异常时,会自动产生一个相应的异常类对象。 我们可以捕获该异常对象,然后进行相应的处理。 Exception是所有异常类的父类。 Java异常处理的3个关键字: try、catch、 finally
import java.util.Scanner; public class Test1 { public static void main(String[] args) { Scanner input=new Scanner(System.in); 输入:2 A System.out.println("请输入两个整数:"); try{ 进入第一个 int x=input.nextInt(); catch块 int y=input.nextInt(); 输出: int result=x/y; 输入不是数字! System.out.println("相除的结果为:"+result); 程序结束! } catch (InputMismatchException e1) { System.out.println("输入不是数字!"); 输入:5 0 } catch(ArithmeticException e2){ System.out.println("除数不能为0!"); 进入第二个 } catch (Exception e) { catch块 System.out.println("错误原因:"+e); 输出: }finally { 除数不能为0! System.out.println("程序结束!"); 程序结束! } } 在安排catch语句的顺序时,首先应该捕获最特殊的异常, } 然后再逐渐一般化,即先子类后父类
import java.util.InputMismatchException; import java.util.Scanner; public class Text1 { public static void main(String[] args) {int[] score={80,85,90}; Scanner input=new Scanner(System.in); System.out.println("请输入要查询的课 程序号:"); try {int i=input.nextInt(); int result=score[i-1]; System.out.println("课程名称\t成绩"); if(i==1)System.out.print("大学英语\t"); else if(i==2)System.out.print("网页设 计\t"); else if(i==3)System.out.print("Java语 言\t"); System.out.println(result); } catch (InputMismatchException e1) {System.out.println("输入不是数字!");} catch(ArithmeticException e1){ System.out.println("除数不能为0!"); } catch (Exception e) { System.out.println("错误原因:"+e); }finally {
try/catch块
第三种情况:异常类型不匹配 发生异常 try 产生异常对象
public void method(){ try { // 代码段 1 // 产生异常的代码段 2 // 代码段 3 } catch (异常类型 e) { // 异常处理代码段4 } // 代码段5 }
catch
异常类型不匹配 程序中断运行
try Байду номын сангаас能产生 异常的代码 捕获异常
catch
finally
无论是否发生异常, 代码总能执行
try/catch块
使用try/catch块捕获异常,分为三种情况:
第一种情况:没有异常 try //代码段 try { // 代码段(如果没有产生异常) } catch (异常类型 e) { // 对异常进行处理的代码段 } // 代码段
try
产生异常对象
异常类型匹配
catch
继续执行
try/catch 块后的代码段
try/catch块
import java.util.Scanner; 输入:2 0 public class Test1 { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("请输入两个整数:"); try{ int x=input.nextInt(); int y=input.nextInt(); int result=x/y; System.out.println("相除的结果为:"+result); System.out.println("程序结束!"); }catch(ArithmeticException e){ System.out.println("除数不能为0!"); } } 除数不能为0! 控制台输出 }
try/catch块
使用try/catch块捕获异常
第二种情况:捕获到产生的异常 public void method(){ try { // 代码段 1 // 产生异常的代码段 2 // 代码段 3 } catch (异常类型 e) { // 异常处理代码段4 } // 代码段5 }
异常是一种特殊的对象,类型为 java.lang.Exception或其子类
多重catch块
一段代码可能会引发多种类型的异常 当引发异常时,会按顺序来查看每个 catch 语句,并执 行第一个与异常类型匹配的catch语句 执行其中的一条 catch 语句之后,其后的 catch 语句将 发生异常 被忽略
产生异常对象 try public void method(){ try { // 代码段 catch // 产生异常(异常类型2) 与异常类型1不匹配 } catch (异常类型1 ex1) { catch // 异常处理代码段 } catch (异常类型2 ex2) { 与异常类型2匹配 // 异常处理代码段 catch } catch (异常类型3 ex3) { 程序继续执行 // 异常处理代码段 } try/catch 块后的代码段 // 代码段 }
第7章 Java异常处理
生活中的异常
正常情况下,小王每日开车去上班,耗时大约30分钟
一路畅通
但是,异常情况可能要发生!
堵车!
撞车!
程序中的异常
import java.util.Scanner; public class Test1 { 正常情况: public static void main(String[] args) { Scanner input=new Scanner(System.in); 输入:10 2 输出: System.out.println("请输入两个整数:"); 相除的结果为5 int x=input.nextInt(); 程序结束 int y=input.nextInt(); int result=x/y; 异常情况: System.out.println("相除的结果为:"+result); System.out.println("程序结束"); 输入:2 0 程序中断运行! } }
多重catch块 2-2
上机练习
编写一个程序TestException2,在一个数组中存储一 个学生的3门课成绩,从键盘输入要选择查询的课程序 号(1~3),输出对应的课程名称和成绩。 考虑程序中可能出现的异常,并利用多catch块进行异 常处理。
上机练习
要求给程序添加异常处理代码
import java.util.Scanner; public class TestException2 { public static void main(String[] args) { int[] score={80,85,90}; Scanner input=new Scanner(System.in); System.out.println("请输入要查询的课程序号:"); int i=input.nextInt(); int result=score[i-1]; System.out.println("课程名称\t成绩"); if(i==1)System.out.print("大学英语\t"); else if(i==2)System.out.print("网页设计\t"); else if(i==3)System.out.print("Java语言\t"); System.out.println(result); } }
catch
try/catch 块后的代码段
try/catch块
import java.util.Scanner; 输入:10 2 public class Test1 { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.println("请输入两个整数:"); try{ int x=input.nextInt(); int y=input.nextInt(); int result=x/y; System.out.println("相除的结果为:"+result); System.out.println("程序结束!"); }catch(ArithmeticException e){ System.out.println("除数不能为0!"); } } 相除的结果为5 控制台输出 } 程序结束! 算术异常
相关文档
最新文档