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());
        }
    }
}

相关推荐
wang09074 小时前
自己动手写一个spring之IOC_2
java·后端·spring
来杯@Java5 小时前
学生选课管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·maven·mybatis
不知名的老吴6 小时前
线程的生命周期之线程“插队“
java·开发语言·python
ANnianStriver6 小时前
PetLumina-02-后端开发与前后端联调
java·ai·sa-token
杨了个杨89826 小时前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
马士兵教育9 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
snow@li9 小时前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
云烟成雨TD9 小时前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework9 小时前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java