资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,JSE-10(异常处理),本章内容,第一节 异常的原理,第二节 异常的处理,第三节 声明和抛出异常,第四节 自定义异常类,第一节 异常的原理,异常:,在,Java,语言中,将程序执行中发生的不正常情况称为“异常”,异常是一种对程序运行过程中发生错误时进行通知的机制。,如:网络连接失败、用户输入错误或打开文件失败等。,异常以对象的形式出现,不同的异常对象中封装了相应的错误信息,异 常,1 public class TestException,2 public static void main(String args),3 System.out.println(Hello World!);,4,5 int n=Integer.parseInt(args0);,6 System.out.println(n=+n);,7 ,8,命令行执行:,java TestException 164 正常,java TestException abc NumberFormatException,java TestException ArrayIndexOutOfBoundsException,示例,TestException类,异常的分类,Java,语言提供了两大类异常:,编译时异常(受检异常),运行时异常(非受检异常),编译时异常:指程序中必须接受检查和处理的异常,由,Exception,类表示。,运行时异常:程序中可以不接受检查和处理,或致命性错误异常,由,RuntimeException,类或,Error,类表示。,大家应该也有点累了,稍作休息,大家有疑问的,可以询问和交流,异常的堆栈式抛出机制,为保证程序正常执行,代码必须对可能出现的异常进行处理。,第二节 异常的处理,常见异常,java.lang.RuntimeException,ClassCastException,ArrayIndexOutOfBoundsException,NullPointerException,ArithmeticException,。,java.io.IOExeption,EOFException,java.lang.ClassNotFoundException,java.lang.InterruptedException,java.io.,java.sql.SQLException,异常的处理方式之一:捕获处理异常,可使用trycatchfinally语句捕获异常,避免程序不正常终止,语法:,try,catch(),*finally,可使用多个,catch子句捕获多个异常,try-catch,示例,TestException类,1 public class TestException,2 public static void main(String args),3 try,4 int n=Integer.parseInt(args0);,5 System.out.println(n=+n);,6 catch(NumberFormatException e),7 System.out.println(,捕获第一个异常:,+e);,8 System.out.println(e.getMessage();,9 ,10 System.out.println(Hello World!-end);,11 ,12,多,catch,示例,TestException类,1 public class TestException,2 public static void main(String args),3 try,4 int n=Integer.parseInt(args0);,5 System.out.println(n=+n);,6 catch(NumberFormatException e),7 System.out.println(,捕获第一个异常:,+e);,8 System.out.println(e.getMessage();,9 catch(ArrayIndexOutOfBoundsException e),10 System.out.println(,捕获第二个异常:,+e);,11 catch(Exception e),12 System.out.println(“,捕获其他可能的所有异常:,+e);,13 ,14 System.out.println(Hello World!-end);,15 ,16,finally,示例,TestException类,1 public class TestException,2 public static void main(String args),3 try,4 int n=Integer.parseInt(args0);,5 System.out.println(n=+n);,6 catch(NumberFormatException e),7 System.out.println(,捕获第一个异常:,+e);,8 System.out.println(e.getMessage();,9 return;,10 catch(ArrayIndexOutOfBoundsException e),11 System.out.println(,捕获第二个异常:,+e);,12 catch(Exception e),13 System.out.println(,捕获其他可能的所有异常:,+e);,14 finally /,保证该块的语句总是被执行,15 System.out.println(,最终块,);,16 ,17 System.out.println(Hello World!-end);,18 ,19,练 习,编写,TestException类,,,在,main方法中,接收两个命令行参数,将它们转换为整数,并用第二个数除以第一个数,打印结果。,在命令行运行程序,给出两个参数,测试以下情况,观察运行结果:,其中某个参数不是数字,第二个参数为,0,提示:,分别接收两个参数的语句为:,int,n1=,Integer.parseInt,(,args,0);,int,n2=,Integer.parseInt,(,args,1);,改写TestException类,的,main方法,在其中捕获可能发生的异常,。,运行并测试各种异常情况,确认是否均被捕获。,第三节 声明抛出异常,声明抛出异常,声明抛出异常是,Java,中处理异常的第二种方式,如果一个方法,(,中的语句执行时,),可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。,在方法声明中用,throws,语句可以声明抛出异常的列表,,throws,后面的异常类型可以是方法中产生的异常类型,也可以是它的父类,。,声明抛出异常举例:,public void read file)throws ,/,读文件的操作可能产生类型的异常,fis=new(file);,.,声明抛出异常,(2),import java.io.*;,public class Test6_4,public static void main(String args),Test6_4 t=new Test6_4();,try,t.readFile();,catch(IOException e),public void readFile()throws IOException,in=new(my);,int b;,b=in.read();,while(b!=-1),System.out.print(char)b);,b=in.read();,in.close();,有可能找不到指定的文件,所以抛出异常,在方法头部声明抛出,调用了一个声明抛出非运行时异常的方法,继续向上抛,交给调用者处理,方法体内可能抛出非运行时异常,调用声明抛出非运行时异常的方法,声明抛出异常,(3),重写方法声明抛出异常的原则,重写方法不能抛出比被重写方法范围更大的异常类型。在多态的情况下,对,methodA(),方法的调用,-,异常的捕获按父类声明的异常处理。,public class A,public void methodA()throws IOException,public class B1 extends A,public void methodA()throws ,public class B2 extends A,public void methodA()throws Exception,/,报错,人工抛出异常,Java,异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要人工创建并抛出。,首先要生成异常类对象,然后通过,throw,语句实现抛出操作,(,提交给,Java,运行环境,),。,IOException e=new IOException();,throw e;,可以抛出的异常必须是,Throwable,或其子类的实例。下面的语句在编译时将会产生语法错误:,throw new String(want to throw);,第四节 自定义异常类,创建自定义异常类,一般地,用户,自定义异常,类都是,RuntimeException,的子类。,自定义异常类通常需要编写几个重载的构造器。,自定义的异常通过,throw,抛出。,自定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型。,用户自定义异常类,MyException,,用于描述数据取值范围错误信息。用户自己的异常类,必须继承,现有的异常类。,class MyException extends Exception,static final long serialVersionUID=1L;,private int idnumber;,public MyException(String message,int id),super(message);,this.idnumber=id;,public int getId(),return idnumber;,创建自定义异常类,使用自定义异常类,public class Test6_5,public void regist(int num)throws MyException,if(num 0),throw new MyException(“,人数为负值,不合理”,3);,else,System.out.println(,登记人数,+num);,public void manager(),try,regist(100);,catch(MyException e),System.out.print(,登记失败,出错种类,+e.getId();,System.out.print(,本次登记操作结束,);,public static void main(String args),Test6_5 t=new Test6_5();,t.manager();,异常处理,5,个关键字,捕获异常,抛出异常,声明异常,try,catch,finally,执行可能产生异常的代码,捕获异常,无论是否发生异常,代码总被执行,throw,异常的生成阶段:手动抛出异常对象,throws,异常的处理方式:声明方法可能要抛出的各种异常类,例如:上游排污,下游治污,练习,3,public class ReturnExceptionDemo,static void methodA(),try,System.out.println(,进入方法,A);,throw new RuntimeException(,制造异常,);,finally,System.out.p
展开阅读全文