十大软件培训机构,seo网站建设 厦门,做网站js还是jq,宣武郑州阳网站建设一、异常概述与异常体系结构
Error:Java虚拟机无法解决的严重问题#xff1a; JVM系统内部错误#xff0c;资源耗尽#xff0c;如#xff1a;StackOverflow \OOM堆栈溢出 处理办法#xff1a;只能修改代码#xff0c;不能编写处理异常的代码 Exception:可以处理的异常 JVM系统内部错误资源耗尽如StackOverflow \OOM堆栈溢出 处理办法只能修改代码不能编写处理异常的代码 Exception:可以处理的异常 1空指针访问 2试图读取不存在的文件 3网络连接中断 4数组角标越界 处理异常的最佳时间编译期间 编译时异常----受检异常-----更严重,执行javac.exe命令时可能出现的异常 运行时异常—非受检异常—执行java.exe命令时出现的异常—一般也不用try-catch处理实际开发中 ** 异常的体系结构 ** 常见的异常类型举例说明 /* **************运行时异常************ */
Test
//ArithmeticException
public void test1(){int a2;int b0;System.out.println(a/b);
}Test
//InputMismatchException
public void test2(){Scanner scannernew Scanner(System.in);int scorescanner.nextInt();System.out.println(score);scanner.close();
}Test
//NullPointerException
public void test3(){int[] numnull;System.out.println(num[3]);String strnull;System.out.println(str.length());
}Test
//ArrayIndexOutOfBoundsException
//StringIndexOutOfBoundException
public void test4(){int[] num new int[2];System.out.println(num[3]);String strabc;System.out.println(str.charAt(5));
}Test
//ClassCastException
public void test5(){Object objnew Date();System.out.println(obj);String str(String)obj;
}Test
//NumberFormatException
public void test6(){String strabc;System.out.println(Integer.valueOf(str));
}
二、异常处理机制
1.抓抛模型
抛——程序在正常执行的过程中 一旦出现异常会产生并抛出一个异常类的对象,之后代码不执行 关于异常类对象的产生1系统自动生成的异常对象 2手动生成一个异常对象并抛出throw new 异常名
抓——处理异常的方式 1try-catch-finally (2)throws 往外抛最多抛到main就要处理
2.异常处理方式一try-catch-finally
try{// 可能产生异常的代码
}catch(异常类型1 变量名1){//处理异常的方式1
}catch(异常类型2 变量名2){//处理异常的方式2
}finally{//一定会执行的代码
}说明 1finally是可以省略的 2使用try将可能产生异常的代码包装起来一旦出现异常就会生成一个对应的异常类对象 根据此对象的类型去catch中进行匹配 3一旦try中的异常对象匹配到某一个catch,就会进入catch中进行异常的处理一旦处理完成 就跳出当前的try-catch结构在没有写finally时继续执行其后的代码 4catch中的异常类型如果没有子父类关系则谁声明在上在下无所谓 catch中的异常类型如果满足子父类关系则要求子类一定声明在父类的上面否则会报错 5常用的异常对象处理方式 ①String getMessage() ②e.printStackTrace() 6在try结构中声明的变量出了try结构以后就不能再被调用 ** finally的认识 ** 1finally中声明的语句是一定会被执行的代码即使catch中又出现了异常try中有return,catch种有return语句等 2finally中的语句会在所有return语句执行前被执行 finally中如果有return直接执行finally中的return (3)finally的使用场景 像数据库连接、输入输出流、网络编程Socket等资源 JVM是不能自动回收的需要手动进行资源释放就需要声明在finally中 ** 体会** 1使用try-catch-finally处理编译时异常使得程序在编译时不再报错但运行时仍可能报错 相当于shiyongtry-catch-finally将一个编译时可能出现的异常延迟到运行时出现 2开发中由于运行时异常比较常见所以通常不针对运行时异常编写try-catch-finally 编译时异常一定要考虑异常处理
3.异常处理方式二throws异常类型 写在方法的声明处指明此方法执行时可能会抛出的异常类型。一旦当方法体执行时出现异常仍会在异常代码处生成一个异常类的对象此对象满足throws后的异常类型时就会被抛出。异常代码后续的代码不会再执行。
4.对比两种处理方式
**try-cathch-finally:**真正将异常处理掉了 throws异常类型:只是将异常抛给了方法的调用者并没有真正将异常处理掉 体会 1父类没有抛出异常子类也不能抛异常 2子类抛出的异常不大于父类抛出的异常
5.开发中如何选择使用try-catch-finally还是throws
(1)如果父类中被重写的方法没有throws处理异常则子类重写方法也不能用throws 只能用try-catch-finally (2)执行的方法中先后调用了另外几个方法这几个被调用的方法是递进关系执行的 建议使用throws处理这几个方法执行方法使用try-catch-finally
三、手动抛出异常对象 throw
1.运行时异常可以不在方法声明里throws 2.编译时异常需要在方法声明中抛出
四、用户自定义异常
1.继承现有的异常体系结构RuntimeException,Exception 2.提供序列版本号 3.提供重载的构造器
五、throw和throws的区别
throw:抛出一个异常类的对象生成异常对象的过程声明在方法体内 throws:属于异常处理的一种方式在方法声明处声明