java 异常处理

一 异常处理

1.Throwable(异常最顶端的类)
        Error(服务器崩溃 数据库崩溃)
        Exception(异常类)
            RuntimeException(运行时异常)
  下面是几种常见的异常
  //NullPointerException  空指针异常
  //ArrayIndexOutOfBoundsException 数组角标越界异常
  //ArithmeticException 算数异常
  //ClassCastException 类型转换异常

处理异常
  try......catch.....finally
  try 指测试异常代码
  catch 指捕获异常信息
  finally 指异常结束后要做的是什么

  try...catch捕获异常的流程
  1.函数中 某句代码发生异常
  2.发生异常 就产生了对应的 异常对象
  3.这个对象返回给 调用者
        情况1: 没有对异常进行处理 这时就会把异常
               交给JVM去处理 JVM使用了默认的处理机制
        情况2: 调用者进行了异常处理(try...catch)
                这时返回的异常对象 会跟catch进行匹配
                匹配成功执行catch中的语句
                程序继续运行  

二 多catch处理异常

2.处理空指针/角标越界/算数异常
public static void main(String[] args) {
int[] array = new int[4];
        try {
            //报的异常 产生越界异常的对象
        //System.out.println(array[5]);
        array = null;
        System.out.println(array[1]);
        System.out.println(10 / 0);
        //注意: 如果catch中要写Exception 来捕获异常
        //要放到最下面 并且 catch中的异常要从小到大写
        }catch(ArrayIndexOutOfBoundsException e) {
            //在匹配catch的时候 有一个被匹配上 
            //其他的catch 就不会再匹配了
            System.out.println("你越界了");
        }catch(NullPointerException e) {
            System.out.println("你空指针了");
        }catch(ArithmeticException e) {
            System.out.println("你除0了");
        }
        catch(Exception e) {
            System.out.println("你写错代码了");
        }
        System.out.println("执行没有?");
}

三 finally

3.出现异常与否 不会影响finally的执行
  也就是说finally一定会执行
  finally的作用:一般用来关闭资源 关闭流 关闭数据库
  public static void fun() {
        try {
            System.out.println(10 / 2);
            //即使你直接return方法 finally也会执行
            //直接关闭JVM虚拟机关了就不执行了
            //System.exit(0);  关闭虚拟机
            return;
        } catch (Exception e) {
            System.out.println("你除0了");
        }finally {
            System.out.println("一定会执行");
        }
        System.out.println("执行了吗?");
    }

四 Throwable中的方法

4.      public static void main(String[] args) {
        Exception e = new Exception("写错误信息");
        //获取错误信息
//      String message = e.getMessage();
//      System.out.println(message);
        //toString方法
        //System.out.println(e.toString());
        //可以打印错误信息 错误的位置 异常类的类名
        e.printStackTrace();
    }

五 异常处理练习

5. //无限输入整数 存放到集合中 打印 输入quit停止
    //  希望在输入字符串的时候 让程序也能继续运行
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Integer> arrayList = new ArrayList<>();
        while (true) {
            System.out.println("输入整数");
            String string = scanner.nextLine();
            if (string.equals("quit")) {
                break;
            }
            //处理异常
            try {
                int parseInt = Integer.parseInt(string);
                arrayList.add(parseInt);
            } catch (Exception e) {
                System.out.println("输入错误 重新来吧");
            }
        }
        //循环结束打印一下
        System.out.println(arrayList);
    }
}

六 继承中 重写方法的异常

class Father{
    public void fun() { 

    }
}
//如果父类没有抛出编译异常 子类能不能抛出编译异常?
//父类没有抛出异常  子类一定不能抛

//如果在子类重写父类方法中 调用了一个有异常的方法怎么办?
//这时只能选择try...catch处理 不能抛出了

//如果父类有抛出编译异常 子类能不能抛出编译异常?
//子类可以不抛出异常 也可以抛
class Son extends Father{
    @Override
    public void fun() {
        try {
            method();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //带异常的方法
    public void method() throws Exception{  

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值