异常和错误
当我们执行一个方法的时候这个方法可能存在异常,异常发生了是停止继续运行的,所以我们需要通过try{}catch( ){ }去捕获异常
public class Demo { int chufa(int a,int b) { return a/b; } public static void main(String[] args) { try{ new Demo().chufa(1,0); }catch (ArithmeticException e) {
// 由于能预见被除数不能为0这个异常是ArithmeticException类所以e的类类型是他,当然写父类也是可以的 System.out.println(e); }finally {
// 这里面的代码不管异不异常都会执行 System.out.println("我是用来关闭IO流的"); } } }
那么引出一个问题既然catch里面写最高类和精确的子类都是一样的,那么我所有错误都写最高类好了,反正都能捕捉到,那么写子类的场景在哪
try{ new Demo().chufa(1,0); }catch (ArithmeticException e) { System.out.println(e); }catch (MissingResourceException e){
// 因为不是MissingResourceException错误类型所以不会执行到这 System.out.println("我是丢失资源异常"); }catch (Exception e){ System.out.println(e); }finally { System.out.println("我是用来关闭IO流的"); }
// 不难看出想要针对精确到各种类型做处理的时候用精确的子类了,这里面有个连用catch相当于if else (不是if) 所以连续catch类型要从小到大不然会报错已经捕捉过了
接下来就是我需要自定义一个异常类(一般在架构会使用)
// 第一步继承 Exception public class myException extends Exception{ // 第二步重写toString方法 @Override public String toString() { return "方法有异常"; } }
使用自定义类
// 第一步方法抛出throws myException这是最重要的一步 int chufa(int a,int b) throws myException{ if(b == 0){ throw new myException(); // 第二步主动抛出异常,如果不写捕获不到你的错误信息了 } return a/b; }
// 可以使用了
catch (myException e){
System.out.println(e);
}
你的努力有资格到拼天赋的程度吗?