异常与垃圾回收_第1页
异常与垃圾回收_第2页
异常与垃圾回收_第3页
异常与垃圾回收_第4页
异常与垃圾回收_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章第五章 Java 基本类是作为基本类是作为 AWT 的扩展而开发的的扩展而开发的 Swing 是是 JFC 下的一组类,提供轻量级可视下的一组类,提供轻量级可视化组件,可用于创建美观的化组件,可用于创建美观的 GUI Swing 容器有两类:顶级容器、中间容器容器有两类:顶级容器、中间容器 Swing标签既可以显示文本也可以显示图像标签既可以显示文本也可以显示图像 Swing文本组件文本组件 Swing中用于选择性输入的常用组件中用于选择性输入的常用组件 菜单是菜单是GUI中非常有用的一部分中非常有用的一部分 了解异常的定义了解异常的定义 了解异常的分类了解异常的分类 掌握掌握 try、

2、catch 和和 finally 语句的用法语句的用法 掌握掌握throw、throws子句的用法子句的用法 掌握如何定义自己的异常掌握如何定义自己的异常 了解了解 Java 的垃圾收集机制的垃圾收集机制 运行时发生的错误称为异常。处理这些运行时发生的错误称为异常。处理这些异常就称为异常处理。异常就称为异常处理。 一旦引发异常,程序将突然中止一旦引发异常,程序将突然中止,且控且控制将返回操作系统。制将返回操作系统。 发生异常后此前分配的所有资源都将保发生异常后此前分配的所有资源都将保留在相同的状态,这将导致资源漏洞留在相同的状态,这将导致资源漏洞。 Java异常处理机制采用一个统一和相对简异常

3、处理机制采用一个统一和相对简单的单的抛出和处理抛出和处理错误的机制。如果一个方错误的机制。如果一个方法本身能法本身能引发引发异常,当所调用的方法出现异常,当所调用的方法出现异常时,调用者可以异常时,调用者可以捕获捕获异常使之得到处异常使之得到处理;也可以理;也可以回避回避异常,这时异常将在调用异常,这时异常将在调用的堆栈中向下传递,直到被处理。的堆栈中向下传递,直到被处理。所有异常类型都是所有异常类型都是内置类内置类Throwable的的子类子类用于用于Java运行时系运行时系统统来显示与运行时系来显示与运行时系统本身有关的错误统本身有关的错误用于用户程序可能用于用户程序可能捕获的异常,也是捕

4、获的异常,也是用来创建用户异常用来创建用户异常类型子类的类。类型子类的类。ErrorError类对象由类对象由JavaJava虚拟机生成并抛出;虚拟机生成并抛出;ExceptionException类对象由应用程序处理或抛出。类对象由应用程序处理或抛出。异常异常说明说明RuntimeException java.lang包中包中多数异常的基类多数异常的基类 ArithmeticException 算术错误,如除以算术错误,如除以 0 IllegalArgumentException 方法收到非法参数方法收到非法参数 ArrayIndexOutOfBoundsException 数组下标出界数组

5、下标出界 NullPointerException 试图访问试图访问 null 对象引用对象引用 SecurityException 试图违反安全性试图违反安全性 ClassNotFoundException不能加载请求的类不能加载请求的类异常异常说明说明AWTException AWT 中的异常中的异常 IOException I/O 异常的根类异常的根类 FileNotFoundException 不能找到文件不能找到文件 EOFException 文件结束文件结束 IllegalAccessException 对类的访问被拒绝对类的访问被拒绝 NoSuchMethodException

6、请求的方法不存在请求的方法不存在 InterruptedException 线程中断线程中断 由五个关键字由五个关键字 try、catch、throw、throws 和和 finally 处理。处理。 Java 中可用于处理异常的两种方式:中可用于处理异常的两种方式:自行处理自行处理:可能引发异常的语句封入在:可能引发异常的语句封入在 try 块内,而处理异常的相应语句则封入在块内,而处理异常的相应语句则封入在 catch 块内。块内。回避异常回避异常:在方法声明中包含:在方法声明中包含 throws 子句,子句,通知潜在调用者,如果发生了异常,必须由通知潜在调用者,如果发生了异常,必须由调用

7、者处理。调用者处理。 public class ExceptionDemo public static void main(String args) try int c= calculate(9,0); System.out.println(c); catch (Exception e) System.err.println(发生异常:发生异常: + e.toString(); e.printStackTrace(); static int calculate(int a, int b) int c = a/b; return c; 调用函数调用函数calculate,将引发一个异常将引发一个

8、异常在在catch块中处块中处理异常理异常输出输出结果结果 单个代码片段可能会引起多个错误。单个代码片段可能会引起多个错误。 可提供多个可提供多个 catch 块块分别处理各种异常类型分别处理各种异常类型。. . .try catch(ArrayIndexOutOfBoundsException e) catch(Exception e) .ArrayIndexOutOfBoundsException类为类为 Exception 类的子类,但是如果异常类的子类,但是如果异常属于属于ArrayIndexOutOfBoundsException类将执行第一个类将执行第一个 catch 块,之后控制

9、块,之后控制将转向将转向try/catch块之后的语句,所以始终不会执行第二个块之后的语句,所以始终不会执行第二个 catch 块。块。 class Catch22 public static void main(String args) try String num=args0; int numValue=Integer.parseInt(num);System.out.println(平方为平方为 +numValue*numValue); catch(ArrayIndexOutOfBoundsException ne) System.out.println(未提供任何参数!未提供任何参数!

10、); catch(NumberFormatException nb) System.out.println(不是数字!不是数字!); 输出输出结果结果 有时,块的一部分引起一个错误,而整个有时,块的一部分引起一个错误,而整个块可能又引起另一个错误。块可能又引起另一个错误。在此情况下,在此情况下,需要将一个异常处理程序嵌套到另一个中。需要将一个异常处理程序嵌套到另一个中。 在使用嵌套的在使用嵌套的try块时,块时,将先执行内部将先执行内部 try 块,块,如果没有遇到匹配的如果没有遇到匹配的 catch 块,则将检查外块,则将检查外部部 try 块的块的 catch 块。块。 确保了在出现异常时

11、所有清除工作都将确保了在出现异常时所有清除工作都将得到处理得到处理 与与 try 块一起使用块一起使用 无论是否出现异常,无论是否出现异常,finally块都将运行块都将运行finallycatch 块块finally异常异常没有异常没有异常try 块块class FinallyDemo int no1,no2; FinallyDemo(String args) try no1 = Integer.parseInt(args0); no2 = Integer.parseInt(args1); System.out.println(相除结果为相除结果为 +no1/no2); catch(Arit

12、hmeticException i) System.out.println(不能除以不能除以 0); finally System.out.println(Finally 已执行已执行); public static void main(String args) new FinallyDemo(args); 输出输出结果结果 异常是通过关键字异常是通过关键字 throw 抛出,抛出,程序可以程序可以用用throw语句引发明确的异常。如:语句引发明确的异常。如: try if(flag0) throw new NullPointerException(); throw语句的操作数一定是语句的操作

13、数一定是Throwable类类类类型或型或Throwable子类类型的一个对象。子类类型的一个对象。 如果一个方法可能导致一个异常但不处理它,如果一个方法可能导致一个异常但不处理它,此时要求在方法声明中包含此时要求在方法声明中包含 throws 子句,子句,通知潜在调用者,如果发生了异常,由调用通知潜在调用者,如果发生了异常,由调用者处理。者处理。 一个一个throws子句列举了一个方法可能引发的子句列举了一个方法可能引发的所有异常类型。所有异常类型。 这对于除这对于除Error或或RuntimeException及它们子类及它们子类以外类型的所有异常是必要的。以外类型的所有异常是必要的。cl

14、ass ThrowsDemo static void throwOne() throws IllegalAccessException System.out.println(在在throwOne中中.); throw new IllegalAccessException(非法访问异常非法访问异常); public static void main(String args) try throwOne(); catch(IllegalAccessException e) System.out.println(捕获捕获+e); 在该方法中没有处在该方法中没有处理异常,只是声明理异常,只是声明可能引发

15、的异常可能引发的异常在在throwOne方法方法的调用函数中捕的调用函数中捕获并处理异常获并处理异常 内置异常不可能始终足以捕获所有错误,内置异常不可能始终足以捕获所有错误,因此需要用户自定义的异常类因此需要用户自定义的异常类 用户自定义的异常类应为用户自定义的异常类应为 Exception 类类(或者(或者Exception 类的子类)的子类类的子类)的子类 创建的任何用户自定义的异常类都可以创建的任何用户自定义的异常类都可以获得获得 Throwable类定义的方法类定义的方法class ArraySizeException extends NegativeArraySizeExceptio

16、n ArraySizeException() super(“您传递的是非法的数组大小您传递的是非法的数组大小”); 该类是该类是Exception的子类的子类class UserExceptionDemo int size, array;UserExceptionDemo(int s) size = s;try checkSize();catch(ArraySizeException e) System.out.println(e); void checkSize() throws ArraySizeException if(size 0) throw new ArraySizeExcepti

17、on();array = new intsize;for(int i = 0; i size; i+) arrayi = i+1; System.out.print(arrayi+ ); public static void main(String arg) new UserExceptionDemo(Integer.parseInt(arg0); 输出输出结果结果 垃圾收集是可将分配给对象但不再使用的垃圾收集是可将分配给对象但不再使用的内存回收或释放的过程内存回收或释放的过程 Java 将自动释放不再使用的内存将自动释放不再使用的内存 如果一个对象没有指向它的引用或将其赋如果一个对象没有指向

18、它的引用或将其赋值为值为 null,则此对象将适于进行垃圾收集则此对象将适于进行垃圾收集 垃圾收集器将作为优先级低的单独线程垃圾收集器将作为优先级低的单独线程运行运行 可通过下列方式关闭应用程序中的垃圾可通过下列方式关闭应用程序中的垃圾收集收集 java noasyncgc 如果关闭了垃圾收集,程序极有可能会如果关闭了垃圾收集,程序极有可能会因为内存在某个时刻耗尽而失败因为内存在某个时刻耗尽而失败 Java 提供了一种与提供了一种与 C+ 语言中的析构器语言中的析构器相似的方式,可用于在控制返回操作系相似的方式,可用于在控制返回操作系统前完成清除过程统前完成清除过程 如果存在如果存在 finalize(),它将在垃圾收集前被它将在垃圾收集前被执行一次,而且每个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论