




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章 Java异常处理,本章要点,Java异常的概念 Java异常的处理机制 异常的捕获、处理和抛出 用户自定义异常,8.1 异常的概念及分类,8.1.1 什么是异常 8.1.2 Java异常分类,8.1.1 什么是异常?,Java把错误分为两类: 一类是非致命性的,通过某种修正后程序还能继续执行,这类错误称作异常: 负数开平方 读取不存在的文件,另一类是致命性的,即程序遇到了严重的不正常状态,不能简单地恢复执行,这就是错误: JVM内部错误 操作系统错误 内存溢出,二、异常的产生及处理过程,Java提供了异常处理机制,在Exception类中定义了程序产生异常的条件; 对待异常通常并不结束
2、程序,而是转去执行某段代码处理这个异常,设法恢复程序继续执行;,当程序中发生异常时,称程序产生了一个异常事件,相应地生成异常对象; 生成的异常对象传递给Java运行时系统;,异常产生和提交的过程称为抛出异常; 异常发生时,Java运行时系统从生成对象的代码块开始,沿方法的调用栈逐层回溯,寻找相应的处理代码,并把异常对象交给该方法处理,这一过程称为捕获异常。,excp1,ArithmeticException,int x;,x=x/0,0 x6b46, x=x/0 , ,异常对象,0 x6b92,0 x6b46,0 x6b46,0 x6b92, ,异常处理类,抛 出 异 常,捕 获 异 常,Ja
3、va类库所有的包中都定义了异常类和错误类; Exception 类是所有异常的父类; Error 类是所有错误的父类,这两个类同时又是 Throwable 的子类。,异常和错误类的层次结构,示例8-1,public class Test public static void main(String args) String friends = lisa,bily,kessy; for(int i=0;i5;i+) System.out.println(friendsi); System.out.println(nthis is the end); ,C:JavaExamjavac Test.j
4、ava C:JavaExamjava Test lisa bily kessy Exception in thread main java.lang.ArrayIndexOutOfBoundsException at Test.main(Test.java:5),自动显示异常信息; 指明异常的种类:RuntimeException 出错的位置;,8.2 Java异常处理机制,8.2.1 捕获异常 8.2.2 声明抛弃异常 8.2.3 人工抛出异常,8.2.1 捕获异常,对所发生的异常进行的处理就是异常处理; 异常处理的重要性在于,程序不但能发现异常,还要捕获异常。,使用 try 语句括住可能抛
5、出异常的代码段; 用 catch 语句指明要捕获的异常及相应的处理代码。,try / 此处为抛出具体异常的代码 catch(ExceptionType1 e) / 抛出ExceptionType1异常时要执行的代码 catch(ExceptionType2 e) / 抛出ExceptionType2异常时要执行的代码 catch(ExceptionTypek e) / 抛出ExceptionTypek异常时要执行的代码 finally / 必须执行的代码 ,其中,ExceptionType1,ExceptionType2,.,ExceptionTypek是产生的异常类型。 根据发生异常所属的类
6、,找到对应的catch语句,然后执行其后的语句序列。 不论是否捕获到异常,总要执行finally后面的语句。,public String getMessage( ) 用来得到有关异常事件的信息 public void printStatckTrace( ) 用来跟踪异常事件发生时执行堆栈的内容,public class Test public static void main(String args) String friends =lisa,bily,kessy; try for(int i=0;i5;i+) System.out.println(friendsi); catch(java.
7、lang.ArrayIndexOutOfBoundsException e) System.out.println(index err); System.out.println(nthis is the end); ,public class Test public static void main(String args) String friends =lisa,bily,kessy; for(int i=0;i5;i+) System.out.println(friendsi); ,运行结果,C:JavaExamjavac Test.java C:JavaExamjava Test li
8、sa bily kessy Exception in thread main java.lang.ArrayIndexOutOfBoundsException at Test.main(Test.java:5),Java程序处理异常的原则,对于Error和RuntimeException,可以在程序中捕获,但不是必须; 对于IOException及其违例,必须在程序中进行捕获和处理。,import java.io.*; public class TestIOException public static void main(String args) FileInputStream in=new
9、 FileInputStream(me.txt); int b; b = in.read(); while(b!= -1) System.out.print(char)b); b = in.read(); in.close(); ,try FileInputStream in=new FileInputStream(me.txt); int b; b = in.read(); while(b != -1) System.out.print(char)b); b = in.read(); in.close(); ,catch(IOException e) System.out.println(e
10、); finally System.out.println(Its ok!); ,运行结果,C:JavaExamjava TestIOException java.io.FileNotFoundException: me.txt (系统找不到指定的文件。) Its ok! C:JavaExamjava TestIOException lesson 17 long long age,there lived a king!Its ok!,总结,try / 此处为抛出具体异常的代码 catch(ExceptionType1 e) / 抛出ExceptionType1时要执行代码 ,8.2.2 声明抛
11、弃异常,如果一个方法可能产生某种异常,但该方法并不对这个异常进行处理,而由方法的调用者负责处理这个异常,则该方法应被声明抛弃这种异常; methodName(arguList) throws ,public void readFile( ) throws IOException FileInputStream in; in = new FileInputStream(myfile.txt); int b = in.read(); while(b!= -1) System.out.print(char)b); b = in.read( ); in.close( ); ,public class
12、Test public static void main(String args) Test t = new Test( ); try t.readFile(); catch(IOException e) System.out.println(e); System.out.println(退出!); ,运行结果,8.2.3 人工抛出异常,人工创建异常对象 通过 throw 将其抛出(Java运行环境) IOException e = new IOException( ); throw e; 注意: 抛出的异常对象必须是Throwable或其子类的实例,8.3 用户自定义异常,自定义异常类必须继
13、承Throwable类或其子类; 自定义异常类的对象永远不会自动抛出,只能人工创建并抛出。,class MyException extends Exception private int idnumber; public MyException(String message,int id) super(message); this.idnumber=id; public int getId( ) return idnumber; ,public class Test public void regist(int num) throws MyException if(num 0) throw n
14、ew MyException(人数为负值,不合理,3); System.out.println(登记人数+num); ,public MyException(String message,int id) super(message); this.idnumber=id; ,public void manager( ) try regist(-100); catch(MyException e) System.out.println(登记出错,类别:+e.getId(); System.out.println(本次登记操作结束); ,登记出错,类别:3 本次登记操作结束,public stati
15、c void main(String args ) Test t=new Test( ); t.manager( ); ,1. 下列描述中,正确的是,try代码段和其后跟随的catch代码段之间可以有间隔的代码; finally代码段中不可以有try和catch代码段; finally代码段在异常出现的情况下不被执行; 每个catch代码段声明其能处理的一种特定类型的异常。,2. 在横线处填上正确的语句,if( t = null ) throw new ;,NullPointerException( ),第9章 Java控制台应用程序设计,本章要点,Java命令行参数和系统属性 标准I/O,文
16、件I/O,9.1 Java命令行参数,9.1.1 Java命令行参数 9.1.2 系统属性,9.1.1 Java命令行参数,java 命令行参数String数组 main( ) args接收; 命令行参数以空格或双撇号作为分隔符,public class Test public static void main(String args) for ( int i = 0; iargs.length; i+ ) System.out.println(args + i + = + argsi); ,java Test lisa bily Mr Brown,args0 = Lisa args1 = b
17、ily args2 = Mr Brown,9.1.2 系统属性,在Java中,系统属性起到替代环境变量的作用; 系统属性可以将运行时Java程序的相关信息参数化机制 系统属性: 属性名+属性值+映射关系,Enumeration接口,public interface Enumeration / 判断基础容器是否有下一元素 public boolean hasMoreElements( ); / 返回基础容器的下一元素 public Object nextElement( ); ,import java.util.Properties; import java.util.Enumeration;
18、Properties ps = System.getProperties( ); Enumeration pn = pertyNames( );,创建一个Properties的对象ps,包含了所有的系统属性,返回Enumeration类型表示的所有系统属性名,while ( pn.hasMoreElements() ) String pName = (String) pn.nextElement(); String pValue = ps.getProperty(pName); System.out.println(pName + - + pValue); ,判断Enumerati
19、on类型对象中是否有下一元素,返回下一元素的值,运行结果,9.2 数据输入/输出,9.2.1 标准I/O操作 9.2.2 文件I/O操作,9.2.1 标准I/O操作,用户与程序的交互方式: 用户键盘标准输入设备输入数据 程序终端端口标准输出设备输出数据 控制台应用程序 输入/输出标准 I/O 或控制台 I/O,java.lang.System类,System.out 向标准输出写出数据 Syste.in 从标准输入读入数据 System.err 错误信息的输出,InputStreamReader isr = new InputStreamReader(System.in); BufferedR
20、eader br = new BufferedReader(isr);,用于从字符输入流中读取文本; 创建一个BufferedReader对象从键盘逐行读入数据,1. InputStreamReader类可以将读取的字节数据转换为字符数据; 2. 创建一个用于接收从键盘输入的字符数据的对象,总结,在这里,程序将标准输入流(System.in)串接到一个InputStreamReader上,而后又将其串接到一个BufferedReader上,把键盘输入的内容经过处理显示在屏幕上。,try / 每读入一行后向显示器输出 s = br.readLine(); while( !s.equals() S
21、ystem.out.println(Read: + s); s = br.readLine(); br.close(); / 关闭输入流 catch (IOException e) / 捕获可能的异常 e.printStackTrace();,运行结果,9.2.2 文件I/O操作,在对一个文件进行I/O操作之前,必须先获得有关这个文件的基本信息,例如文件能不能被读取,能不能被写入,绝对路径是什么,文件长度是多少,等等。 类java.io.File提供了获得文件基本信息及操作文件的一些工具。,创建一个新File对象,可使用以下构造方法: File myFile;myFile=new File(T
22、est.java); 或 myFile=new File(E:ex, Test.java ); File myDir=new File(E:exTest.java);File path=new Fle(E:ex); File path=new Fle (path,Test.java );,使用何种构造方法经常要由其他被访问的文件对象来决定。 例如,当在应用程序中只用到一个文件时,那么使用第一种构造方法最为实用;但如果使用了一个共同目录下的几个文件,则使用第二或第三种构造方法会更方便。 创建File类的对象后,可以应用其中的文件测定相关方法来获取文件的信息。,与文件名相关的方法,String g
23、etName( ):获取文件名; String getPath( ):获取文件路径; String getAbsolutePath( ):获取文件绝对路径; String getParent( ):获取文件父目录名称; boolean renameTo(File newName):更改文件名,成功则返回true,否则返回false。,文件测定方法,boolean exists():文件对象是否存在 boolean canWrite():文件对象是否可写 boolean canRead():文件对象是否可读 boolean isFile():文件对象是否是文件 boolean isDirectory():文件对象是否是目录 boolean isAbsolute(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025水泥供销合同范文
- 新员工入职手册计划
- 学习意愿与课堂参与度提升计划
- 教学设施与环境优化计划
- 2025年标准合同范本下载「合同」
- 财务调查核实计划
- 2025星空娱乐轰趴馆合作合同
- 2025建筑施工安全生产合同
- 2025茶叶采购销售合同模板
- 人教版初中历史与社会八年级上册 1.1 亚非大河文明 古代埃及 教学设计
- GB/T 4857.2-2005包装运输包装件基本试验第2部分:温湿度调节处理
- 医护服务礼仪培训
- GB 1886.239-2016食品安全国家标准食品添加剂琼脂
- 复杂肘关节骨折脱位的诊治课件
- 2023全球宏观展望(英文)-高盛
- 5w2H分析法培训教材课件
- 七大浪费培训资料课件
- JJF1637-2017 廉金属热电偶校准规范-(高清现行)
- 简约复古风夏洛蒂勃朗特《简爱》作品简介名著读后感PPT课件
- DGTJ08-2128-2021 轨道交通及隧道工程混凝土结构耐久性设计施工技术标准
- 中水、纯水系统简介
评论
0/150
提交评论