异常机制
p81 异常的分类
try和throw ,throws
import java.io.*; public class Teat1 { public static void main(String[] args){ TestEat T = new TestEat(); try{ System.out.println(T.eat());//可能出现异常的对象 }catch(Exception E){//接收异常对象的引用,遵循多态的向上转型 E.printStackTrace();//打印栈堆里的异常对象的路径路径,打印出来后遵循栈的先进后出原则 System.out.println("运算异常"); } try{ new IOException(); }catch(Exception exception){ exception.printStackTrace(); System.out.println("Exception必须处理的异常"); } System.out.println("你好java"); } } class TestEat { int eat(){ int m = 0; int b = 0; int c = 4; m = c/0; return m; } } class trows{ void cat() throws IOException{//抛给栈里面的该函数的上一级调用函数来处理,甩锅 throw new IOException();//必须要处理的异常机制,属于Exception的子类,编译不通过 } void dog(){ throw new RuntimeException();//运行时异常,可以不处理的异常,编译通过运行不通过 } }
Finally
自定义异常和throws常见错误解析
public class TeatArray { public static void main(String[] args){ Array A = new Array(); try { A.arr(6); }catch(Exception E){ E.printStackTrace(); } } } class ArrayException extends Exception{ ArrayException(String name){ super(name); } } class Array{ void arr(int len) throws ArrayException{ int len1 = len; int[]arr = {1,2,3,4}; if(len1<arr.length&&len1>0){ for(int i = 0;i<len1;i++){ System.out.println(arr[i]); } }else{ throw new ArrayException("数组越界"); } } }
运行结果: