package com.btp.t3; import java.io.*; /* * Java提供的是异常处理的抓抛模型 * 1.”抛“:当我们执行代码时,一旦出现异常,就会在异常的代码处生成一个对应的异常类型的对象,并 * 将此对象抛出。(自动抛出 /手动抛出) * >一旦抛出此异常类的对象,那么程序就终止执行 * >此异常类的对象抛给方法的调用者 * 2.”抓“:抓住上一步抛出的异常类的对象。如何抓?即为异常处理的方式 * Java提供了两种方式用来处理一个异常类的对象 * 处理的方式一: * try{ * //可能出现异常的代码 * }catch(Exception1 e1){ * //处理的方式1 * }catch(Exception2 e2){ * //处理的方式2 * }finally{ * //一定要执行的代码 * } * 注:1.try内声明的变量类似于局部变量,出了try{}语句,就不能被调用 * 2.finally可有可没有 * 3.catch语句内部是对异常对象的处理 * >getMessage() >printStackTrace() * 4.可有有多个catch语句,try中抛出的异常类对象从上往下去匹配catch中的异常类的类型, * 一旦满足就执行catch中的代码。执行完,就跳出其后的多条catch语句 * 5.如果异常处理了,那么其后的代码继续执行。 * 6.若catch中多个异常类型是”并列“关系,孰上孰下都可以 * 若catch中多个异常类型是”包含“关系,须将子类放在父类的上面,否则会报错 * 7.finally中存放的是一定会被执行的代码。 * 8.try-catch是可以相互嵌套的。 * * 对于运行时异常来说,可以不显式的进行处理 * 对于编译时异常来说,必须要显式的进行处理 * * * 处理的方式二: * 在方法的声明处,显式的抛出该异常对象的类型 * public void method() throws FileNotFoundException,IOException{ * } * 当在此方法内部出现异常的时候,会抛出一个异常类的对象,抛给方法的调用者。 * 异常的对象可以逐层向上抛。直至main中,当然向上抛过程中,可以通过try-catch来处理 * * * java的抓抛模型 * 1.抓:异常的处理。有两种方式:①try-catch ②方法的声明处,显式抛出该异常对象的类型。抛给方法调用者。throws+异常的类型 * 2.抛:一旦执行过程中出现异常,会抛出一个异常类的对象。(自动抛出 VS 手动抛出(throw)) throw+异常的对象 * >异常类:既可以是现成的异常类,也可以是手动创建的异常类 * * * //如何自定义一个异常类 * 1.自定义的异常类必须继承已有的异常类 * 2.提供一个序列号,提供几个重载的构造器 * * 抛异常的方法的重写规则:子类重写的父类的方法,其抛出的异常类型只能是被重写的方法的异常类的子类或异常类本身 * */ public class TestExceptions { public static void main(String[] args) { try { method2(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static void method2() throws FileNotFoundException, IOException { method1(); } public static void method1() throws FileNotFoundException,IOException{ FileInputStream fis=new FileInputStream(new File("Hello.txt")); int b; while((b=fis.read())!=-1){ System.out.println((char)b); } fis.close(); } } //手动自己创建一个异常类(自定义异常类) class MyException extends Exception{ static final long serivalVersionID=-70348975766939L; public static long getSerivalversionid() { return serivalVersionID; } public MyException() { super(); // TODO 自动生成的构造函数存根 } public MyException(String arg0, Throwable arg1, boolean arg2, boolean arg3) { super(arg0, arg1, arg2, arg3); // TODO 自动生成的构造函数存根 } public MyException(String arg0, Throwable arg1) { super(arg0, arg1); // TODO 自动生成的构造函数存根 } public MyException(String arg0) { super(arg0); // TODO 自动生成的构造函数存根 } public MyException(Throwable arg0) { super(arg0); // TODO 自动生成的构造函数存根 } }