总结:异常

目录

异常的分类

异常的实质

异常的捕获

异常的注意事项


*异常的分类 

1.编译时异常/受查异常(IoException)

eg:NullPointerException,ArrayIndexsOutOfBoundsException

2.运行时异常/非受查异常(RuntimeException)

eg:FileNotFoundException, IOException, SQLException。

*异常的实质

*异常实际就是一个类,父类为Throwable,有Error 和 Exception 两个子类

*异常的捕获

1.用throws声明异常

public static void test(int[] a) throws CloneNotSupportedException{
    if(a == null){
      throws new CloneNotSupportedException;//必须写在方法体里面
  }
}

2.捕获异常

public static void main(String[] args){
    try{
        test(null);//存放可能抛出异常的代码
 }catch(CloneNotSupportedException){//捕获异常
        e.printStackTrace();//输出异常代码所在处
        System.out.println("捕获到了异常");
 }
     System.out.println("一眼万年");
}//抛出异常并输出:捕获到了异常 
                  一眼万年

 *finally一般用于资源的释放,finally中的代码一定会被执行

    eg:键盘录入会占用资源,要在finally里sc.close();来释放资源(或者直接把scanner sc=new scanner(System.in)放在try里面)

*异常的注意事项

*异常一旦抛出,后面的代码不会执行

public static void main(String[] args){
    int[] array = null;
    System.out.println(array.length);
    System.out.println("不潮不用花钱");//不会执行,因为jvm会抛出异常
}

*当我们没有解决异常,就交给JVM,一旦交给JVM程序就会奔溃

*可以通过逗号,声明多个异常

public static void Test(int[] a) throws CloneNotSupporatedException,NullPointerException{}

*可以写多个catch,但是Exception作为所有异常的父类能捕获所有的异常,如果把它放在catch的第一个,那么后面的异常就没有任何作用了

*不建议在finally里写return

*执行顺序:会先执行try中的代码,如果出现异常,就会看catch中的异常是否匹配,如果匹配就执行catch中的代码,如果不匹配,就会将异常向上传递到调用者,如果调用者也没有处理异常,就会继续传递,一直到main方法也没有处理,就交给JVM处理。无论是否匹配,finally中的代码一定会执行

*以登录方法为例:

//Test类中写一个登录方法
public void login(String name) throws UserNameException{
    if(!this.name.equals(name)){
        System.out.println("用户名错误");
        throws new UserNameException;
 }
}

//main方法中
public static void main(String[] args){
    Test test = new Test();
    try(test.login("aaa")){
}catch(UserNameException e){
    e.printStackTrace();
    System.out.println("用户名异常");
}finally{
 }
}//输出用户名错误
 错误代码所在处
 用户名异常

*自定义异常类可以写有参构造

public class PassWorkException extends RuntimeException{
    public PassWordException(String s){
        super(s);
  }
}//则输出异常所在处的时候会打印String s 中的内容

*一次只会抛出一个异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发呆的百香果子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值