Java语言基础----常用API03(异常)

异常

RuntimeException是程序员逻辑思维不紧密导致的

throw&throws

throw关键字可以主动对外抛出一个异常。
通常下列情况我们会主动抛出异常:
1:当前代码片段出现了异常,但是该异常不应当在当前代码片段被解决时,可以将其抛出
2:程序可以运行,但是不满足业务要求时可以对外抛异常告知。(满足语法不满足业务)

java中除了RuntimeException之外的其他异常throw抛出是编译器要求,必须在方法上使用throws声明该异常的抛出

当我们调用一个含有throws声明异常抛出的方法时,编译器要求我们必须处理该异常否则编译不通过。
处理手段有两种:
1:使用try-catch捕获其声明的异常
2:在当前方法上继续使用throws声明该异常的抛出

JAVA异常处理机制中的try-catch:

try{
     可能出现异常的代码片段
 }catch(XXXException e){
     当try中出现XXXException后的解决办法
 }
try语句块不能独立存在,后面必须跟catch或finally。

finally是异常处理机制中的最后一块,它可以直接跟在try语句块之后或最后一个catch之后。
finally语句块的特点是:
 只要程序可以执行到try语句块中,无论是否出现异常,最终都要执行finally块的代码

return也不能阻止finally代码块的执行

public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
//            String str = null;
//            String str = "";
            String str = "a";
            //这里会出现空指针异常,虚拟机会实例化空指针异常实例并在这里抛出
            System.out.println(str.length());
            System.out.println(str.charAt(0));
            System.out.println(Integer.parseInt(str));
            //try语句块中某句话报错后,那么try语句块中这句话之后的代码均不会执行!
            System.out.println("!!!!!!!!!!!!!!!!");

        //可以合并捕获异常,当不同异常处理手段相同时,可以用这种方式。
        }catch(NullPointerException|StringIndexOutOfBoundsException e){
            System.out.println("出现了空指针或下标越界的处理!");

        }catch(Exception e){
            //该方法用来在控制台输出异常的堆栈信息,便于程序员debug
            e.printStackTrace();
            //message:消息
            String message = e.getMessage();//获取错误信息
            //message一般用于给用户进行提示,或者记录log日志时使用。
        }
        System.out.println("程序结束了");
    }
}
/**
 * JDK7之后,java推出了自动关闭特性。
 * 使得我们在源代码中异常处理机制在IO应用中得到了简化。
 */
public class AutoCloseableDemo {
    public static void main(String[] args) {
        try(
                /*
                    只有实现了AutoCloseable接口的类才可以在这里定义并初始化。
                    并且编译器在编译时会将在这里定义的变量在finally中调用close将其关闭。
                    最终编译器会将当前代码改为Finally中关流的样子。
                 */
                FileOutputStream fos = new FileOutputStream("fos.dat");
        ){
            String line = "hello";
            fos.write(1);
        }catch(IOException e){
            System.out.println("出错了");
        }
    }
}

自定义异常

通常使用自定义异常用来表达业务错误。
自定义异常应当做到以下几点:
1:类名要见名知意。
2:需要继承Exception(直接或间接继承均可)
3:提供超类中所有的构造器

public class IllegalAgeException extends Exception{
    public IllegalAgeException() {
    }

    public IllegalAgeException(String message) {
        super(message);
    }

    public IllegalAgeException(String message, Throwable cause) {
        super(message, cause);
    }

    public IllegalAgeException(Throwable cause) {
        super(cause);
    }

    public IllegalAgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值