1、Java基础异常处理Java异常处理异常: 程序运行时发生的非正常情况 发生异常 程序意外终止,控制权返回给调用者Java的异常类: Throwable(java异常的根类) Error 系统级错误 一般不能恢复 Exception 程序的实现过程中的异常运行时异常 指在程序运行中不一定要扑获的异常 比如:NullPointerException ArrayIndexOutOfBoundsException ArithmeticException非运行时异常:指程序运行中一定要扑获的异常 比如:SQLException IOException ClassNotFoundExceptionpub
2、lic class TestException public int testException(int a,int b) int arr=1,5,3,8; try System.out.println(arr6); return a/b; catch (ArithmeticException e) System.out.println(分母不能为零n+e.toString(); return -1; catch(ArrayIndexOutOfBoundsException ae) ae.printStackTrace();/打印错误堆栈信息 System.out.println(数组下标越界
3、); return -1; catch(Exception ex) System.out.println(我的任务是扑获前面的catch没有扑获的异常); return -1; finally System.out.println(我是无论如何都要执行的代码); public static void main(String args) TestException test=new TestException(); int result=test.testException(8, 0); if(result-1) System.out.println(运行正常 结果:+result); else
4、 System.out.println(出现异常); System.out.println(程序往下执行); 使用多重catch子句要注意:在前面的异常级别不能大于后者finally是异常处理语句结构的一部分,表示无论什么情况都要执行的模块finally语句的主要作用是在try或catch转到其他部分前做的一些“善后”工作。比如:关闭打开的文件,释放链接、内存等系统资源。throw关键字用来抛出一个异常。程序会在throw语句后立即终止 static void test() try throw new NullPointerException(抛出空指针异常);/抛出一个异常 catch(Nu
5、llPointerException e) System.out.println(扑获空指针异常); throw e;/再次抛出此异常 public static void main(String args) try test(); catch(NullPointerException e) System.out.println(扑获 + e); throws关键字 throws标明方法中可能抛出的各种异常但不处理它,即回避此异常,而交给调用者处理 public class TestExce public static void main(String args) TestEx test=ne
6、w TestEx(); try test.get(1,0); catch(Exception e) e.printStackTrace(); class TestEx public void get(int a,int b) throws Exception int c=a/b; System.out.println(这个方法可能会产生异常,请调用者处理+c); 自定义异常public class TestMyException public void testMyException(int val) throws MyException if (val 0) throw new MyExce
7、ption(出现异常,参数不能小于零); else System.out.println(val); public static void main(String args) TestMyException test=new TestMyException(); try test.testMyException(1); catch (MyException e) System.out.println(e.getMsg(); class MyException extends Exception private String msg; public MyException(String msg)
8、 this.msg = msg; public String getMsg() return this.msg; 垃圾回收 GC在程序的运行时环境中,Java虚拟机提供了一个系统级的垃圾回收器线程,它负责自动回收那些无用对象所占用的内存垃圾回收具有以下特点1. 只有当对象不再被程序中的任何引用变量引用时,它的内存才可能被回收。2. 程序无法迫使垃圾回收器立即执行垃圾回收操作。3. 当垃圾回收器将要回收无用对象的内存时,先调用该对象的finalize()方法,通常不使用 原因你不确定什么时候执行此方法甚至是否会执行此方法 以下两个方法作用相同System.gc(); /运行垃圾回收器 Runti
9、me.getRuntime().gc();public class TestGC SuppressWarnings(unused) public static void testMyFinalize() MyFinalize myFinalize=new MyFinalize(); System.out.println(对象被创建); myFinalize=null; System.gc(); System.runFinalization();/JVM退出时 为还未执行finalize()的对象执行finalize() System.out.println(对象被回收); public sta
10、tic void testMemory() Runtime rt=Runtime.getRuntime(); System.out.printf(JVM为对象分配总内存空间:%d%n,rt.totalMemory(); System.out.printf(JVM中对象可以使用的剩余内存空间:%d%n,rt.freeMemory(); Object objs=new Object20000; for(int i=0;iobjs.length;i+) Object obj=new Object(); objsi=obj; System.out.printf(产生大量的对象后可以使用的剩余内存:%d
11、%n, rt.freeMemory(); objs=null; rt.gc(); rt.runFinalization(); System.out.printf(回收对象后后可以使用的剩余内存:%d%n,rt.freeMemory(); System.out.printf(总内存:%d%n, rt.totalMemory(); public static void main(String args) /testMyFinalize(); testMemory(); class MyFinalize Override protected void finalize() throws Throwa
12、ble System.out.println(调用finalize()的对象的内存地址哈希码值:+this.hashCode(); 作业:1 编写一个类,在main()方法中的try块中抛出Exception异常。传递一个字符串参数 给 Exception的构造器,在catch中扑获此异常,并打印此字符串参数,添加finally子句,打印消息以证明finally中代码得到执行 2 编写一个自定义异常,定义一个接受字符串参数的构造方法,把此字符串保存在属性中 并定义一个获取此字符串的方法,写一个try catch进行测试3 定义一个对象引用并初始化为null,在try-catch中尝试用此引用调用方法
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1