异常

Error:严重错误

StackOverError

 

异常:Exception - 可以解决的

运行时异常/未检查异常:RuntimeException -> Exception

             ClassCastException -> 强制类型转换异常

            NullPointerException -> 空指针异常(调用null值的属性或方法)

            ArrayIndexOutOfBoundsException -> 数组越界异常

            xxxIndexOutOfBoundsException

            ConcurrentModificationException -> 集合迭代删除

            NumberFormatException -> 数值转换异常

            Integer.valueOf("aa");

            ArithmeticException: / by zero

造成原因:程序员自身马虎,必须要解决的,改代码,基本不用try/catch

 

 

已检查异常:Exception

            FileNotFoundException

            IOException

            ParseException

            SQLException

            UnsupportedEncodingException

            ClassNotFoundException

造成原因:不是程序员自身问题,没办法完全避免的异常

                  可能是外部客观原因,不能彻底解决,只能避免

 

处理异常:只有已检查异常必须使用代码处理

       未检查异常必须修改代码、纠正程序

 

       1.方法上声明抛出 throws 已检查异常                        

       2.自己处理 try/catch 代码块

               注意:

                     try只能有一个,catch可以有多个,至少有一个

                     一个catch中可以捕获多个异常,用 | 连接

                     同一个异常,不能多次捕获

                     捕获异常,可以使用父类异常捕获

                     异常的父子类如果同时捕获子类和父类,必须先捕获子类异常,再捕获父类异常(子类写在前,否则编译错误)

                     类的父子类子类抛出的异常一定比父类抛出的异常小,有时不能抛出,只能try/catch

                     try不能独立使用

                     try-catch可以嵌套,不推荐

 

                    e.printStackTrace();打印代码执行栈路径

                               通常开发调试时会保留,上线时删除

                    finally -> 无论如何都会执行的

                              通常用来释放资源                        

 

前期代码,很少使用异常处理,JavaEE框架阶段,自定义异常处理

throw 手动抛出异常   

异常处理原则:能自己解决的尽量自己解决,不能解决了再向外抛

 

异常属性:message - 异常提示信息,很重要

          所有异常都有一个使用message初始化的构造器

          所有异常都有getMessage()

 

自定义异常:

          目的:为了区别不同的异常类型

          定义方法:只需要添加构造器即可

                      其他全部靠继承

 

代码:

1.

    try {// try中是可以正常执行的代码

        System.out.println("异常之前");

        System.out.println(new String("黑".getBytes(), "uf-8"));

        // 在异常出现后的代码都执行不到

        System.out.println("异常之后");

    } catch (UnsupportedEncodingException e) {
    
        // 捕获到指定异常后执行的代码 - 备用方案

        System.out.println("捕获到异常");

        //e.printStackTrace();

    }

手制造异常,并抛出,等同于给方法调用者一个结果,结果是异常

 

2.

public class Login {

    public static int login() {

        int a = 10;

        try {

            //a = 1/0;

            return a;

        } catch (Exception e) {

            return 1;

        } finally {

            a ++;

            System.out.println("finally: " + a);

        }

    }

}

 

System.out.println(Login.login());

结果:

finally: 11

10

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值