资源描述
/,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第十三章,-,使用异常处理程序错误,回顾,/,public interface Introduceable,public String detail();,public void introduction(),private void showMessage();,void speak();,Java,接口中的方法必须是,public,Java,接口中不能有方法体实现,编译器会自动加上,public,修饰符,请指出下列,Java,代码中的错误。,回顾,/,public class Teacher implements Introduceable,public void check(int x,int y),if(,MAX,=,MIN,),int m=0;,m=,MAX,;,MAX,=,MIN,;,MIN,=m;,System.,out,.println(,最大值是,:+,MAX,+“,最小值是:,+,MIN,);,else,System.,out,.println(,最大值是,:+,MAX,+“,最小值是:,+,MIN,);,请指出下列,Java,代码中的错误。,public interface Introduceable,int MAX=233;,int MIN=122;,public void check();,public class Text,public static void main(String args),Introduceable,i=new,Introduceable,();,i.check();,学习目标,掌握,Java,的异常处理机制,运用,try,、,catch,、,finally,处理异常,运用,throw,抛出异常,运用,throws,声明异常,/,生活中的异常,正常情况下,小王每日开车去上班,耗时大约,30,分钟,/,但是,异常情况迟早要发生!,一路畅通,堵车!,撞车!,程序中的异常,/,public class Hello,public static void main(String args),System.out.print(,请输入课程代号,(1,至,3,之间的数字,):);,Scanner in=new Scanner(System.in);,int courseCode=in.nextInt();/,从键盘输入整数,switch(courseCode),case 1:,System.out.println(C#,编程,);,break;,case 2:,System.out.println(Java,编程,);,break;,case 3:,System.out.println(SQL,基础,);,输入:,2,输出:,Java,编程,输入:,B,程序中断运行!,正常情况:,异常情况:,什么是异常,异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序,Java,异常分为两大类:,错误,(,Error,):是指,JVM,系统内部错误、资源耗尽等严重情况。程序员对此错误一般无能为力。,例外,(,Exception,):则是指因编程错误或偶然的外在因素导致的一般性问题,例如:,除数为,0,要打开的文件并不存在,在访问数组时,数组的下标值超过了数组容许的范围。,原本预期用户由键盘输入的是整数,但用户输入的却是英文字母。,/,异常!,程序运行,程序中断运行,什么是异常,面对异常该怎么办呢?通常情况下,我们会这样处理:,设计良好的程序应该在异常发生时提供处理这些错误的方法,使程序不会因为异常的发生而阻断或产生不可见的结果。,Java,程序的执行过程中如果出现异常事件,可以生产一个异常类对象,该异常对象封装了异常事件的信息并将信息提交给,Java,运行时系统,这个过程称为抛出,(throw),异常。当,Java,运行时系统接收到异常对象时,会寻找能处理这个异常的代码并把当前异常对象交给其处理。这个过程称为捕获(,catch,)异常。,/,绕行或者等待,请求交警解决,堵车!,撞车!,生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活,/,Java,内置异常类的结构,9,Object,Throwable,Error,Exception,ClassNotFoundException,SQLException,RuntimeException,NullPointerException,ArithmeticException,/,常见的异常类,-1,10,异常,描述,Exception,用户程序可捕捉的异常体系结构的根类,RuntimeException,java.lang,包中多数异常的基类,ArithmeticException,算术异常,如除以,0,IllegalArgumentException,方法收到非法参数,ArrayIndexOutOfBoundsException,数组下标出界,NullPointerException,空指针异常(试图访问,null,对象的引用),SecurityException,试图违反安全性,InputMismatchException,输入不匹配异常,ClassNotFoundException,不能加载请求的类,/,常见的异常类,-2,11,异常,描述,NumberFormatException,从字符串到数字格式的非法转换,AWTException,AWT,中的异常,IOException,I/O,异常的根类,FileNotFoundException,不能找到文件,EOFException,文件已经结束,IllegalAccesException,对类的访问被拒绝,NoSuchMethodException,请求的方法不存在,InterruptedException,线程中断,什么是异常处理,Java,编程语言使用异常处理机制为程序提供了错误处理的能力,/,程序中预先想好了,对付异常的处理办法,异常!,程序运行,处理完毕,程序继续运行,对异常进行处理,Java,中如何进行异常处理,Java,的异常处理是通过,5,个关键字来实现的:,try,、,catch,、,finally,、,throw,、,throws,/,捕获异常,catch,try,finally,执行可能产生,异常的代码,捕获异常,无论是否发生异常,,代码总能执行,手动抛出异常,抛出异常,throw,声明异常,声明方法可能要,抛出的各种异常,throws,try/catch,块,7-1,使用,try/catch,块捕获异常,分为三种情况:,/,try,catch,try/catch,块后的代码段,public void method(),try,/,代码段,(,此处不会产生异常,),catch,(,异常类型,ex),/,对异常进行处理的代码段,/,代码段,第一种情况,try/catch,块,7-2,使用示例模拟第一种情况:,/,public class Exception,public static void main(String args),System.out.print(,请输入课程代号,(1,至,3,之间的数字,):);,Scanner in=new Scanner(System.in);,try,int courseCode=in.nextInt();,switch(courseCode),case 1:,System.out.println(C#,编程,);,break;,case 2:,System.out.println(Java,编程,);,break;,case 3:,System.out.println(SQL,基础,);,catch,(Exception ex),System.out.println(,输入不为数字,!);,System.out.println(,欢迎提出建议,!);,输入:,2,Java,编程,欢迎提出建议,!,控制台输出,try/catch,块,7-3,使用,try/catch,块捕获异常,分为三种情况:,/,try,catch,异常类型匹配,try/catch,块后的代码段,进入,catch,块,public void method(),try,/,代码段,1,/,产生异常的代码段,2,/,代码段,3,catch,(,异常类型,ex),/,对异常进行处理的代码段,4,/,代码段,5,第二种情况,产生异常对象,程序继续执行,异常是一种特殊的对象,,类型为java.lang.Exception或其子类,发生异常,try/catch,块,7-4,使用示例模拟第二种情况:,/,public class Exception,public static void main(String args),System.out.print(,请输入课程代号,(1,至,3,之间的数字,):);,Scanner in=new Scanner(System.in);,try,int courseCode=in.nextInt();,switch(courseCode),case 1:,System.out.println(C#,编程,);,break;,case 2:,System.out.println(Java,编程,);,break;,case 3:,System.out.println(SQL,基础,);,catch,(Exception ex),System.out.println(,输入不为数字,!);,ex.printStackTrace();,System.out.println(,欢迎提出建议,!);,输入:,B,输入不为数字!,异常堆栈信息,欢迎提出建议!,控制台输出,try/catch,块,7-5,printStackTrace,的堆栈跟踪功能显示出程序运行到当前类的执行流程,/,public class Exception1,public static void main(String args),System.out.print(,请输入课程代号,(1,至,3,之间的数字,),:,);,Scanner in=new Scanner(System.in);,try,int courseCode=in.nextInt();,/,此处代码省略,catch,(Exception ex),System.out.println(,输入不为数字!,);,ex.printStackTrace();,System.out.println(,欢迎提出建议,!);,java.util.InputMismatchException,at java.util.Scanner.throwFor(,Scanner.java:840,),at java.util.Scanner.next(,Scanner.java:1461,),at java.util.Scanner.nextInt(,Scanner.java:2091,),at java.util.Scanner.nextInt(,Scanner.java:2050,),at s2jsp.sg.ch05.Exception,1,.main(,Exception,1,.java:23,),异常类型,异常堆栈信息,在此方法中抛出了异常,try/catch,块,7-6,使用,try/catch,块捕获异常,分为三种情况:,/,try,catch,异常类型不匹配,try/catch,块后的代码段,程序中断运行,发生异常,public void method(),try,/,代码段,1,/,产生异常的代码段,2,/,代码段,3,catch,(,异常类型,ex),/,对异常进行处理的代码段,4,/,代码段,5,第三种情况,产生异常对象,try/catch,块,7-7,使用示例模拟第三种情况:,/
展开阅读全文