2022-07-29 Java异常处理

本文详细探讨了Java中的异常处理机制,包括常见异常类型如数组越界、空指针等,以及如何使用try-catch处理算术异常和除数为0的问题。还介绍了自定义异常、异常链的概念,并以实例演示了如何在代码中应用这些知识。
摘要由CSDN通过智能技术生成

一,异常处理

1.数组下标越界,字符串下标越界
2.空指针
3.数字格式化异常
4.类转换异常
5.算术异常

二,编程界

1.除数为0 

2.IO流,没有关闭 

3.停电 

当一个程序抛出异常,抛出异常后,后面的语句不再执行 类似于return的功能 终止方法的执行。为了能让抛出异常语句的后面的语句正常执行,提出处理解决异常语句。

public class Ch01 {
    public static void main(String[] args) {

        int num1=10;
        int num2=0;
        System.out.println(num1/num2);//这句话是有可能会出异常 但是具体什么场景下出异常 我不知道
        System.out.println("我很重要。。。。");//这条语句不执行
    }

}

 算术异常

处理异常 用try..catch...语句 它能够保证后续代码的继续执行。

public class Ch01 {
    public static void main(String[] args) {
        int num1=10;
        int num2=0;
        try{
            //把有可能抛出异常的代码块放到try语句块里
            System.out.println(num1/num2);
        }catch(Exception e){
            System.out.println("除数不能为0");
            e.printStackTrace();
        }
        System.out.println("我很重要。。。。");

    }
}

  后续代码继续执行

 三,异常的体系结构

       最顶级的异常类Throwable包括 错误Error 和 异常Exeption是顶级异常类的直接子类。内存溢出是错误类中的。

(1)Error:正常情况下一般是不太可能出现 除非是你写错了 ,绝大多数错误Error都会导致程序处于一个非正常的状态下,基本上很难恢复。 一般情况下出现错误的 一定是你的代码写错了。外力的作用下,不考虑怎么去解决错误 解决错误的唯一办法 就是改代码。

Error是Throwable的子类,它是在Java程序处理范围之外的。内存满了

(2)Exeption:Java语言中,将程序执行中的不正常的情况称之为异常。 程序写完了没有报错 但是一执行就不行了。

   1.编译期异常(了解5个):除了RuntimeException类 剩下的都是编译期异常 写代码的时候它会抛异常(不是说你的代码写错了 代码写的对还在报错) * 见的不多 要是出现了直接就TRy catch 就完事了 如果编译期异常,会编译不通过 一直爆红

  2. 运行期异常(了解5个):Exeption类中的一个类RuntimeException类来代表运行期异常 运行期间会出现的异常 平时没有什么事 

(3)自定义异常:

我们为什么要手动的抛异常 就是为了要配合全局异常处理机制来解决,后面的事情。。

Java中的异常机制 结合实际业务 年龄 -1? 电商中的搜索框 若搜乱码怎么办? 这是需要自定义异常了

1.所有的异常必须是Throwable的子类(大材小用 没有必要)

2.如果定义一个编译期异常,需要继承Exception类

3.如果要定义一个运行期异常需要继承RuntimeExeption类

在一个语句块中,如果使用throw抛出一个编译期异常,就必须在方法的声明处使用throws关键字来标记异常类型.

public class Ch03 {

    public static void fun(int i,int j) throws MyException {
        if(j == 0){
            throw new MyException("除数不能为0");
        }
        System.out.println(i / j);
    }

    public static void main(String[] args) {
        try {
            fun(1,1);
        } catch (Exception e) {
            // 打印异常信息
            e.printStackTrace();
        }
    }
}

// 编译期异常
public class MyException extends Exception  {

    public MyException(String message) {
        super(message);
    }
}
throw语句是可以当做方法的返回值的。
在一个有返回值的方法中,如果有条件分支,一定要保证每种情况下都有返回值,哪怕是抛异常。

开发中,大部分情况下使用的都是运行期异常!!!
​
public class Ch04 {

    public static String show(String str) {
        if(!Objects.isNull(str)){
            return str.concat("hello");
        }
//        throw new RuntimeException("参数不能是空");
        throw new ServiceException(101,"账号不能为空。");
    }

    public static void main(String[] args) {
        show(null);
    }
}

​

四, 异常链

  * 一个异常被抛出去之后会继续被调用这个方法的方法捕获或抛出,异常会扩散。

  * 只要说解决异常,处理异常,捕获,就是try...catch。

class A{
    public void a() {
        throw new ServiceException(201,"业务异常...");
    }
}
class B {
    public void b() {
        A aa = new A();
        try {
            aa.a();
        } catch (Exception e) {
           e.printStackTrace();
        }
        System.out.println("b方法的语句");
    }
}
class C {
    public void c(){
        B b = new B();
        b.b();
        System.out.println("c方法的语句..");
    }
}
public class Ch05 {

    public static void main(String[] args) {
        C c = new C();
        c.c();
        System.out.println("Ch05的语句");
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值