专业网站建设怎么样,做微网站的公司哪家好呢,网页设计与制作广东开放大学,网站建设游戏开发异常的体系结构
在java的Throwable下有Error和Exception两个子类
Error(错误):程序运行中出现了严重的问题,非代码性错误,无法处理,常见的有虚拟机运行错误和内存溢出等Exception(异常):是由于代码本身造成的问题,可以进行处理,异常一个可以分为运行时异常和编译时异常 运行…异常的体系结构
在java的Throwable下有Error和Exception两个子类
Error(错误):程序运行中出现了严重的问题,非代码性错误,无法处理,常见的有虚拟机运行错误和内存溢出等Exception(异常):是由于代码本身造成的问题,可以进行处理,异常一个可以分为运行时异常和编译时异常 运行时异常(unchecked exception):在Exception类下RuntimeException类以及其下面所有的子类都是运行时异常;运行时异常只有在程序运行时才能被发现,编译期间不能被发现 编译时异常(checked exception):在Exception类下除了RuntimeException类及其子类其他的异常都是编译时异常;如果有编译时异常(异常不被处理)程序不能通过编译
异常的抓抛模型
抓抛模型分为抓和抛两个过程
抛: 程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应有异常类的对象,并将此对象抛出给程序的调用者,一旦抛出对象后其后的代码就不再执行抓:异常的抓取也就是对异常的两种处理方式( try-catch-finally方式和throws异常类型方式) 方式一:try-catch-finally 使用try将可能有问题的代码包裹起来;发生异常后自动生成一个对应类型的异常对象,此后会根据catch中的异常类型匹配,匹配到对应的catch后进入catch中进行异常处理,完成处理后跳出try-catch结构(如果有finally执行finally中代码)继续执行后面的代码
public void fileTest() throws IOException {try{//拿到文件字节流FileInputStream fis new FileInputStream(E:/upload/test2.txt);InputStreamReader isr new InputStreamReader(fis);...}catch(IOException e){//catch声明的异常类型如果没有子父类关系,声明先后没有关系,如果存在子父类关系,则子类声明在父类之前,否则报错....//处理异常//常用异常的处理方法://e.getMessage();//e.printStackTrace();}finally{fis.close();//关闭输入流//像数据库连接,输入输出流,socket等资源,JVM是不能自己回收的,需要自己手动释放,这些资源的释放应该放在finally中}}
注意: 方式二:throws异常类型 发生异常后还会生成一个异常对象;抛出异常对象后不再执行后面的代码,throws只是将异常抛给了方法的调用者,并不能真正的解决异常。 对父类的方法重写抛出异常 子类抛出的异常不能大于父类抛出的异常 子类重写父类的方法,父类没有异常,子类也不能抛出异常,只能用try-catch立马解决。 手动抛出异常
throw new 异常类();自定义异常 1.继承现有的异常结构:RuntimeException,Exception 2.提供全局变量:serialVersionUID 3.提供重载的构造器
异常链 一个父类的多个子类可能会出现多种异常当需要将异常向上传递的时候父类可以抛出的异常一定要大于子类的异常在传递过程中会造成异常信息的丢失从而给后面的维护工作造成麻烦。可以通过在子类的catch中手动的throw一个异常写明抛出异常的原因然后将这个异常继续向上抛出从而形成一个异常链,保留最原本发生异常的信息。
public class Test {public void f1() throws MyException {try {FileReader reader new ...} catch (FileNotFoundException e) {throw new MyException(文件没有找到, e);}}public void f2() throws MyException {try {f1();} catch (MyException e) {throw new MyException(文件没有找到, e);}}public static void main(String[] args) {Test t new Test();try {t.f2();} catch (MyException e) {e.printStackTrace();}}