zoukankan      html  css  js  c++  java
  • 3.3补

    3.3 java基础总结①异常②自定义异常

     

    ①异常②自定义异常


    一、Java中问题概述
    一般来说有个2/8原则,一个程序员80% 的精力在处理20%可能发生异常的代码
    Java中问题分为错误(Error)和异常(Exception)

    错误:不能用代码解决的问题,往往是环境或者硬件的问题
    异常:可通过修改代码或者预处理来解决的不正确情况,称为异常

    异常分为编译期异常和运行时异常,如果抛编译异常,语法上调用者必须处理或往上抛;抛运行时异常,调用者可不往上抛

    Java里边结束的3中方式:
    ①正常执行完
    ②return返回
    ③发生异常,没有处理,强制结束
    都是返回方法的调用处

    处理异常的方式:
    ①捕获异常,不让它沿调用栈继续抛出
    ②捕获,并继续向下抛出
    ③不捕获,导致方法从调用栈中弹出


    二、捕获异常 try catch finally

    try{
    try块(尝试)
    }catch(Exception Type){
    catch块(捕捉)
    }finally{
    finally块(总会执行)
    }

    try块如果发生异常,抛出异常,跳到对应的catch块,执行问catch块后跳出,(不会再执行匹配后边的catch)。最后加Exception,防止有未捕获到的异常。
    Exception要写在最后,catch有顺序,有继承关系的,子类在前,父类在后。
    try后边可以接多个catch,复杂代码中多种异常处理可以提升用户体验。

    finally块总会执行,即使有break,return,都会执行完finally再return,代码级别能关闭finally的只有System.exit();

    所以这里一般用作清理一些资源,比如流的关闭,链接的关闭

    catch和finally必须要配套try,不能单独出现,可以有
    try catch,catch
    try finally
    try catch finally


    三、抛异常 throw

    throw Exception 方法声地方,后边跟抛出的异常类型(语句)
    throws 后边可接多种异常类型,子类抛出的异常不能比父类多(不是指个数,而是范围)
    方法声明完整格式:访问修饰符、可选修饰符、返回类型、方法名(形参列表) throws 异常类型1,2,3

    Throwbale这里有两个方法比较重要:
    -getMessage(得到异常信息,不是所有的异常都有异常信息,这里的信息比如除数为0) 
    -printStackTrace(打印堆栈信息)

    throw抛异常(主动抛)非常有用,
    抛编译异常,方法里必须处理(trycatch或者往上抛),如果往上抛,调用者也必须trycatch或者往上抛
    抛运行异常,可以不用往上抛,或者trycatch

    四、自定义异常:
    ①创建一个类继承Exception
    ②添加构造方法和普通方法
    构造方法里主要是各种异常类型,普通方法里可以写日志等等
    ③在一个方法中抛出异常
    ④在另一个方法中捕获异常并处理

    好处:不用每一处都处理,直接往上抛
    遇到异常统统往上抛,可以把所有的异常全部抛到表现层,在表现层进行处理,并调用自定义异常的写日志等方法存起来

    public class LovoException extends Exception{

    public LovoException() {
    }

    public LovoException(Exception e){
    //JVM产生的异常,使用多
    super(e);
    }

    public LovoException(String message){
    //根据业务异常,构造,使用较少
    super(message);
    }

    public void writeLog (){
    //各种日志文件
    this.getStackTrace();
    System.out.println(this.getMessage());
    }
    }

    public void count() throws Exception {

    int a = new Scanner(System.in).nextInt();
    try {
    int b = 3 / a;
    System.out.println(3/a);
    } catch (Exception e) {
    // throw new LovoException(e.getMessage() + "除数不能是0");
    throw new LovoException(e);
    }
    }

  • 相关阅读:
    网上零售是国内品牌开拓海外市场的最佳途径
    一个都不能少,海外B2C实战攻略全解
    我想和你一起浅浅淡淡的生活
    中国十大电子商务网站排名
    外贸B2C必读:外贸B2C入行指南(一)
    外贸B2C必读:外贸B2C入行指南(二)
    09年美国最热门的100个B2C网站,他们是怎么成功的?
    几个jsp模块
    【Quartz】【程序目录结构】/DetectNonWorkingDay/src/main/java/com/apple/sqm/dnwd/detect/delta/Detect.java
    Servlet 工作原理解析
  • 原文地址:https://www.cnblogs.com/wanglei718/p/5392541.html
Copyright © 2011-2022 走看看