笔记:
/** 异常处理机制: 抓抛模型
* 1."抛", 一旦抛出,程序终止! printStackTrace()显示异常路径!
* 2."抓", 抓住异常
* try{
* //try语句声明的变量是局部的,
* //可能出现异常的代码
* }catch(Exception e1){
* //处理的方式1, 或者显示提示信息
* }catch(Exception e2){
* //处理的方式2, 或者显示提示信息
* }finally{
* //可选,可不选
* //无论如何,这个代码是一定会执行的
* }
* 3.异常处理后,后面的代码可以继续执行!
* 4.在方法的声明出, 显式地抛出异常对象的类型
* -----------------------------------------
* 自定义异常处理
* 1.方法名() throws Class ExceptionList extends Exception
* 2.
* */
[笔记2]异常处理的5个关键字:
/**异常处理的5个关键字:
* 捕获异常: try/catch/finally
* 抛出异常: throw 可以手动抛出异常对象;例如: throw new Exception("您输入的数值存在负数!");
* 声明异常: throws 声明方法 可能要抛出的各种异常类,向上 传递异常,直到Main()函数!!:
* returnType methodName(....) throws ExceptionList{
* throw new ExceptionList("......");
* }
* class ExceptionList extends Exception{ //自定义的异常类
* }
代码1:
public class TestExcption{ public static void main(String[] args) throws IOException { TestExcption.method1(); } static void method1() throws IOException ,FileNotFoundException{ FileInputStream fis =new FileInputStream(new File("hello.txt")); int ch; while((ch =fis.read())!=-1 ){ System.out.print((char)ch); } fis.close(); } }
运行1:
Exception in thread "main" java.io.FileNotFoundException: hello.txt (ϵͳÕҲ»µ½ָ¶) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:219) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157) at 任务138_处理异常.TestExcption.method1(TestExcption.java:35) at 任务138_处理异常.TestExcption.main(TestExcption.java:32)
代码2:
import java.util.Scanner; public class EcmDef { public static void main(String[] args) { try{ Scanner cin=new Scanner(System.in); int i,j; i=cin.nextInt(); j=cin.nextInt(); EcmDef.ecm(i,j); }catch (NumberFormatException e){ System.out.println("异常:输入数据类型不一致!"); }catch (ArrayIndexOutOfBoundsException e){ System.out.println("异常:缺少命令行参数"); }catch (ArithmeticException e){ System.out.println("异常:分母为0了"); }catch (EcDef e){ System.out.println(e.getMessage()); } } public static void ecm(int i,int j) throws EcDef{ //综合应用throw()和throws()! if(i<0||j<0) throw new EcDef("您输入的数值存在负数!"); else System.out.println(i/j); } } class EcDef extends Exception{ //自定义一个异常类, 两个构造器直接 生成即可! public EcDef() { } public EcDef(String message) { super(message); } }
运行2:
1 -2 您输入的数值存在负数! 1 0 异常:分母为0了