Java异常

Java异常

一. 异常体系结构

二.异常处理机制

1.捕获异常:try,catch,finally

举例:1 .算数异常

java 复制代码
package com.microsoft.bean;

public class Test {

    public static void main(String[] args) {

        int one = 1;
        int two = 0;

        // try表示监控区域
        try {
            // 监控对象
            System.out.println(one/two);
            // catch表示捕获异常,()Exception内表示异常类型,e表示异常对象
        } catch (Exception e) {
            // 捕获成功后,输出语句
            System.out.println("程序出现异常,变量two不能为0");
            // finally表示善后工作,可以不写,因为默认存在。
            // 但在一些情况中,必须写,如io流,资源,等等
        } finally {
            System.out.println("善后工作");
        }



    }
}

例子2:错误

java 复制代码
package com.microsoft.bean;

public class Test {

    public static void main(String[] args) {
        // 这段代码可以理解为创建了一个 Test 类的对象,并调用了该对象的 one() 方法。
        // 具体来说,new Test() 创建了一个 Test 类的匿名对象,并通过该对象调用了 one() 方法。
        // 这种方式常用于一次性调用某个类的方法而不需要保留对象的引用。
        new Test().one();
    }

    public void one(){
        two();
    }

    public void two(){
        one();
    }

}
java 复制代码
package com.microsoft.bean;

public class Test {

    public static void main(String[] args) {

        try {
            new Test().one();
            // 此时的异常类型应该是错误
        } catch (Error e) {
            System.out.println("虚拟机出现错误");
        } finally {
            System.out.println("善后工作");
        }
    }

    public void one(){
        two();
    }

    public void two(){
        one();
    }

}

快捷键: 选中对象使用Ctrl+Alt+t

如果不知道异常类型可以使用多层捕获,但括号中的捕获类型必须从小到大,捕获类型大小见第一张图;

java 复制代码
package com.microsoft.bean;

public class Test {

    public static void main(String[] args) {

        try {
            new Test().one();
        } catch (Exception e) {
            System.out.println("Exception");
        } catch (Error e) {
            System.out.println("Error");
        } catch (Throwable e) {
            System.out.println("Throwable");
        }finally {
            System.out.println("善后工作");
        }
    }

    public void one(){
        two();
    }

    public void two(){
        one();
    }

}

2.抛出异常: throw,throws,一般在方法中使用

java 复制代码
package com.microsoft.bean;

import com.sun.org.apache.xerces.internal.impl.dv.xs.YearDV;

public class Test {

    public static void main(String[] args) {

        new Test().test(3, 0);

    }
    public void test(int one, int two){
        if(two == 0){
            // two等于0,就抛出异常
            throw new ArithmeticException();
        }
    }
}
java 复制代码
package com.microsoft.bean;

import com.sun.org.apache.xerces.internal.impl.dv.xs.YearDV;

public class Test {

    public static void main(String[] args) {

        new Test().test(3, 0);

    }
    // 如果方法中,处理不了这个异常,那就方法上抛出异常
    public void test(int one, int two) throws ArithmeticException{
        if(two == 0){
            // two等于0,就抛出异常
            throw new ArithmeticException();
        }
    }
}

三.自定义异常

java 复制代码
package com.microsoft.bean;

class One extends Exception{
    // 我们使用构造函数,并在其中调用了父类Exception的构造函数来设置异常消息。
    public One() {
        super("输入的数字不能为负数");
    }
}


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

        int number = -5;

        try {
            // 监控区域,判断是否输出数字是否非负数
            // 如果是抛出,到下面的捕获异常
            if (number < 0) {
                throw new One();
            }
            // 如果不是,则输出输入的数字
            System.out.println("输入的数字是:" + number);
            // 捕获异常类型为自定义One
        } catch (One e) {
            // 如果上面抛出的异常,是负数,这打印错误栈的信息
            System.out.println(e.getMessage());
        }
    }
}

相关推荐
yaoxin5211237 分钟前
229. Java 集合 - 操作集合中的多个元素(批量操作)
java·开发语言·python
C++chaofan11 分钟前
MyBatis - Plus学习笔记
java·spring boot·笔记·后端·mysql·架构·mybatis
HSJ017013 分钟前
Aviator中使用BigDecimal进行高精度计算
java·开发语言·bigdecimal·aviator
weixin_3077791317 分钟前
利用 AWS Lambda 与 EventBridge 优化低频 Java 作业的云计算成本
java·开发语言·云原生·云计算·aws
一缕南风29 分钟前
Spring Boot 响应拦截器(Jackson)实现时间戳自动添加
java·spring boot·后端·拦截器
期待のcode34 分钟前
Docker容器
java·docker·容器
Homeey34 分钟前
深入理解 synchronized:从硬件原子性到并发架构设计
java·后端
ZhangBlossom1 小时前
【Java】EasyExcel实现导入导出数据库中的数据为Excel
java·数据库·excel
L.EscaRC1 小时前
Lua语言知识与应用解析
java·python·lua
S7777777S1 小时前
easyExcel单元格动态合并示例
java·excel