9java语言第6天(异常)

上传人:野鹰 文档编号:2872377 上传时间:2017-07-28 格式:PPT 页数:26 大小:920.50KB
返回 下载 相关 举报
9java语言第6天(异常)_第1页
第1页 / 共26页
9java语言第6天(异常)_第2页
第2页 / 共26页
9java语言第6天(异常)_第3页
第3页 / 共26页
9java语言第6天(异常)_第4页
第4页 / 共26页
9java语言第6天(异常)_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《9java语言第6天(异常)》由会员分享,可在线阅读,更多相关《9java语言第6天(异常)(26页珍藏版)》请在金锄头文库上搜索。

1、1,异常处理,2,异常,运行时发生的错误如除0溢出、数组越界、文件找不到等称为异常。处理这些异常就称为异常处理。 一旦引发异常,程序将突然中止,且控制将返回操作系统,发生异常后此前分配的所有资源都将保留在相同的状态,这将导致资源漏洞。.在Java编程语言中,异常类定义程序中可能遇到的轻微的错误条件。可以编写代码来处理异常并继续程序的执行,而不让程序中断。,3,系统异常分类,java.lang.Throwable是所有异常类的父类。Error类对象由Java虚拟机生成并抛出;代表系统严重错误,一般程序不处理这类错误Exception类对象由应用程序处理或抛出。用于用户程序可能捕获的异常,也是用来

2、创建用户异常类型子类的类。RuntimeException:运行时程序故障,例如被零除、数组下标越界等。这些错误可能在任何方法中产生,并且良好的程序应该可以避免这些错误。IOException类异常,java要求程序中必须有相应的异常处理代码,4,异常处理,如果方法中没有处理异常,那么这个异常就被抛出到调用方法中。一直到异常被处理如果到main()还没处理,则中断程序,5,异常处理,try可能出现异常的代码;catch(异常类名 e)处理不同类型异常;catch(异常类名 e)处理不同类型异常;finally总是执行;,6,catch,某catch的执行条件是:首先在try中发生了异常异常的类

3、型与catch要捕捉的一致多个catch共存注意顺序,子类在前,父类在后,try catch(Exception e) catch(ArrayIndexOutOfBoundsException e) ,ArrayIndexOutOfBoundsException类为 Exception 类的子类,父类可以指向子类对象,若发生越界异常,前一个catch已经捕捉,后一个catch无意义,7,finally,若存在finally,则不考虑异常是否被捕获,总是执行finally块。 除非用System.exit()终止程序,否则finally总被执行Try或者catch中的return不能阻止fina

4、lly的执行,finally会在return 之前执行。异常的产生往往会中断应用程序的执行,而在异常产生前,可能有些资源未被释放,这时可通过finally指定无论异常产生与否都会被执行的语句,8,嵌套的 try - catch 块,有时,块的一部分引起一个错误,而整个块可能又引起另一个错误。在此情况下,需要将一个异常处理程序嵌套到另一个中。 在使用嵌套的try块时,将先执行内部 try 块,如果没有遇到匹配的 catch 块,则将检查外部 try 块的 catch 块。,9,抛出异常,程序在运行过程中如果出现异常,系统可抛出异常。但也可以根据程序的检测结果用throw语句主动抛出异常,if(c

5、ount=0) throw new Exception(“数目不正”);if(count0) throw new MyProjException(“计数错误”);,10,向上抛出异常,如果某个方法自己不处理异常,可以向上抛出异常。子方法抛出异常,主方法处理异常形式:函数返回值类型 函数名(参数)throws 异常类型1,异常类型2,函数体;子类在覆盖父类带throws子句的方法时,子类方法声明中的throws子句不能出现父类对应方法中没有的异常类型,即子类方法抛出的异常不会超过父类定义的范围,11,常见异常及其用途 2-1,12,常见的异常及其用途 2-2,13,用户自定义异常对象,系统预定义

6、异常类代表了程序运行过程中可能产生的绝大多数异常。如果希望记录和应用相关的错误信息,则可创建自己的异常类。该类的定义和普通类无太大区别,只需继承Exception 类(或者Exception 类的子类)的子类即可。例如:,public class M extends Exception ,StringBuffer类,缓冲字符串类StringBuffer与String类相似,它具有String类的很多功能,甚至更丰富。它们主要的区别是StringBuffer对象可以方便地在缓冲区内被修改,如增加、替换字符或子串。与Vector对象一样,StringBuffer对象可以根据需要自动增长存储空间,故

7、特别适合于处理可变字符串。当完成了缓冲字符串数据操作后,可以通过调用其方法StringBuffer.toString( )或String构造器把它们有效地转换回标准字符串格式。,(1)创建StringBuffer对象,用多种方法创建StringBuffer对象。,public class StrBufferSet public static void main(String args)StringBuffer s1=new StringBuffer( );s1.append(Hello,Java!);System.out.println(s1= +s1);StringBuffer s2=new

8、 StringBuffer(10 );s2.insert(0, Hello,Java!);System.out.println(s2=+s2);StringBuffer s3=new StringBuffer(Hello,Java!);System.out.println(s3=+s3); ,程序运行结果如图所示, 为StringBuffer的对象插入和追加字符串可以在StringBuffer对象的字符串之中插入字符串,或在其之后追加字符串,经过扩充之后形成一个新的字符串,方法有:append和insert,调用形式如下:s1.append(s2)-将字符串s2加到s1之后。s1.insert

9、(int offset,s2)-在s1从起始处offset开始插入字符串s2。,StringBuffer类的常用方法,获取和设置StringBuffer对象的长度和容量的方法有:length、capacity、setlength,调用形式如下:s1.length( )-返回s1中字符个数。s1. capacity ( )-返回s1的容量,即内存空间数量。通常会大于length( )s1. setlength (int newLength )-改变s1中字符的个数,如果newLength大于原个数,则新添的字符都为空();相反,字符串中的最后几个字符将被删除。, 获取和设置StringBuffe

10、r对象的长度和容量,显示确定字符串的长度和容量,并改变字符串的长度。,public class StrLen public static void main(String args)StringBuffer s1=new StringBuffer(Hello,Java!);System.out.println(The length is+s1.length( );System.out.println(The allocated length is+s1.capacity( );s1.setLength(100);System.out.println(The new length is+s1.l

11、ength( );,程序运行结果如图所示,读取StringBuffer对象中的字符的方法有:charAt和getChar。设置字符及子串的方法有:setCharAt、replace;删除字符及子串的方法有:delete、deleteCharAt。调用形式如下:s1.setCharAt(int index,char ch)-用ch替代s1中index位置上的字符。s1.replace(int start,int end,s2)-s1中从start(含)开始到end(不含)结束之间的字符串以s2代替。s1.delete(int start,int end)-删除s1中从start(含)开始到end

12、(不含)结束之间的字符串。s1.deleteCharAt(int index)-删除s1中index位置上的字符。, 读取和改变StringBuffer对象中的字符,改变字符串的内容。,public class StrChange public static void main(String args)StringBuffer s1=new StringBuffer(Hallo,Java!);s1.setCharAt(1, e);System.out.println(s1);s1.replace(1,5, i);System.out.println(s1);s1.delete(0,3);Sys

13、tem.out.println(s1);s1.deleteCharAt(4);System.out.println(s1); ,程序运行结果如图所示,StringBuilder类别,+会产生一个新的String实例,如果您的程序对这种附加字符串的需求很频繁,并不建议使用+来进行字符串的串接。,如果有繁频作字符串附加的需求,使用StringBuilder会让程序的效率大大提升。,StringBuilder builder = new StringBuilder(); for(int i = 0; i 10000; i+) builder.append(String.valueOf(i);,Str

14、ingBuilder builder = new StringBuilder(); for(int i = 0; i 10000; i+) builder.append(i);,StringBuilder是J2SE 5.0才新增的类别,在J2SE 5.0之前的版本若有相同的需求,类是使用java.lang.StringBuffer。,StringBuilder类别,StringBuilder被设计为与StringBuffer具有相同的操作接口,在单机非多线程(Multithread)的情况下使用StringBuilder会有较好的效率,因为StringBuilder没有处理同步(Synchronized)问题;StringBuffer则会处理同步问题。,如果您的StringBuilder会在多线程下被操作,则要改用StringBuffer,让对象自行管理同步问题。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号