Java基础之异常处理

news2024/12/24 0:32:01

一、小试牛刀

num1 / num2
当除数为零时,程序就会抛出异常,程序就会崩溃而导致退出。
我们可以通过异常处理机制来解决该问题
如果我们认为一段代码可能发生异常,可以使用try-catch-finally异常处理机制来解决。从而保证程序的健壮性。
将可能发生异常的代码选中,按快捷键(Ctrl + Alt + t)选中(try-catch-finally)
如果异常发生了,则异常后面的代码不会执行,将会直接跳到catch语句当中,执行catch中的代码。
如果异常没有发生,则会顺序执行try语句中的代码,不会跳到catch语句当中。

public class DemoException {

    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int num1 = scanner.nextInt();
        int num2 = scanner.nextInt();
        try {
            int res = num1 / num2;
        } catch (Exception e) {
            System.out.println(e.getMessage()); // 输出异常信息
            // e.printStackTrace();
            System.out.println(e);
        }
        // finally语句一般都是用于处理关闭连接或者释放资源
        finally{
            scanner.close();
            System.out.println("无论是否发生异常,该语句都会执行下去...");
        }
        System.out.println("程序继续...");
    }
}
5
0
/ by zero
java.lang.ArithmeticException: / by zero
无论是否发生异常,该语句都会执行下去...
程序继续...

二、异常体系图

在这里插入图片描述

三、常见的运行时异常

3.1 NullPointerException(空指针异常)

package cn.github.wangpeng.exception;

import cn.github.wangpeng.Student;

public class NullPointerEx {
    public static void main(String[] args) {
        Student stu = null;
        System.out.println(stu.getAge());
    } 

}

3.2 ClassCastException(类型转换异常)

package cn.github.wangpeng.exception;
public class ClassCastEx {
    public static void main(String[] args) {
        Animal animal = new Cat();
        Dog dog = (Dog)animal;
    }
}
class Animal{}
class Cat extends Animal{}
class Dog extends Animal{}

3.3 NumberFormatException(数字格式异常)

package cn.github.wangpeng.exception;

public class NumberFormatEx {
    public static void main(String[] args) {
        String num = "abc";
        System.out.println(Integer.parseInt(num));
    }
}

四、常见的编译时异常

编译异常是指在编译期间,就必须处理的异常,否则代码不能通过编译。

public class DemoInputStream {
    public static void main(String[] args) {
        String filePath = "Basic\\demo2.txt";
        int readData = 0;
        FileInputStream fileInputStream = null;
        try {
            // 创建FileInputStream对象,用于读取文件。
            fileInputStream = new FileInputStream(filePath);
            // public int read() throws IOException   从此输入流中读取一个字节的数据。
            while ((readData = fileInputStream.read()) != -1) {
                System.out.print((char)readData);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                // 关闭文件流 释放资源
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

五、异常处理方式

异常处理方式有两种:
1.自行捕获异常 (try-catch-finally)
2.将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者时JVM (throws)
注意:
在方法声明中用throws语句声明异常,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
对于编译异常,程序中必须处理,try-catch-finally 或者 throws都可以
对于运行异常,如果程序中没有处理,则默认使用throws的处理方式
在这里插入图片描述

public static void f1() {
        // 编译异常有两种解决办法
        // 1.使用异常捕获try-catch-finally
        // 2.使用抛出异常throws,让调用f1方法的调用者(方法)来处理
        try {
            FileInputStream fis1 = new FileInputStream("");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
 public static void f2() throws FileNotFoundException {
        FileInputStream fis2 = new FileInputStream("");
    }
public static void f3() {
        // 对于运行时异常,程序中没有处理,默认就是throws的方法来处理
        int n1 = 10;
        int n2 = 0;
        int res = n1 / n2;
    }
class Father {
    public void method() throws RuntimeException {

    }
}

class Son extends Father {
    // 子类重写父类方法的时候,注意:子类重写的方法所抛出的异常类型要么和父类抛出的异常一致,
    // 要么为父类抛出异常类型的子类型
    @Override
    public void method() throws NullPointerException {

    }
}

六、自定义异常

public class DemoExceptionCustomise {
    public static void main(String[] args) {
        System.out.println("请输入您的年龄:");
        Scanner scanner = new Scanner(System.in);
        int age = scanner.nextInt();
        if (!(age > 0 && age < 100)) {
            // 这里通过构造器来设置信息,throw后面是具体的异常对象
            throw new AgeException("年龄不合法!!!");
        }
    }
}

class AgeException extends RuntimeException {
    public AgeException(String message) {
        super(message);
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端工程化-多维度检测重复代码

更多文章可关注我的个人博客&#xff1a;https://seven777777.github.io/myblog/ 1. 检测项目重复代码 1.1 检测方案&#xff1a;jscpd 方法一&#xff1a; 全局安装jscpd依赖npm i -g jscpd项目根路径执行&#xff1a;jscpd -p "src/**/*.js" -k 15 -l 5 方法二…

【黑马SpringCloud(3)】Docker

Docker初识DockerDocker与虚拟机的区别Docker架构DockerHubDocker镜像操作Docker容器操作数据卷自定义镜像镜像结构Dockerfile构建Java项目基于java:8-alpine镜像&#xff0c;构建java项目集群部署微服务Docker-Compose镜像仓库搭建私有镜像仓库Docker安装&#xff1a;https://…

Go第 14 章 :文件操作

Go第 14 章 &#xff1a;文件操作 14.1 文件的基本介绍  文件的概念 文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的 word文档,txt文 件,excel 文件…都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声 音… …

排序分页多表查询

文章目录一、排序ORDER BY排序规则单列排序多列排序二、分页LIMIT背景实现格式举例公式优点三、多表查询笛卡尔积&#xff08;或交叉连接&#xff09;的理解解决笛卡尔积问题多表查询分类等值连接非等值连接自连接内连接 vs 外连接SQL99实现多表查询基本语法内连接&#xff08;…

测试人员怎么对待Bug

测试人员如何描述发现的Bug咱们提Bug至少要包含这个问题出现的版本&#xff0c;问题出现的环境&#xff0c;问题出现的步骤&#xff0c;预期结果&#xff0c;实际结果。但不限于标题&#xff0c;bug归属&#xff0c;bug等价等等举个栗子&#x1f601;很容易发现二维码被登入页面…

深入分析三层网络交换机的原理和设计

引言 传统路由器在网络中起到隔离网络、隔离广播、路由转发以及防火墙的作业&#xff0c;并且随着网络的不断发展&#xff0c;路由器的负荷也在迅速增长。其中一个重要原因是出于安全和管理方便等方面的考虑&#xff0c;VLAN(虚拟局域网)技术在网络中大量应用。VLAN技术可以逻辑…

跨平台编译go(交叉编译)

以将一个简单的go http 部署到docker为例&#xff01; 方法一&#xff1a;构建service镜像同时拉取go镜像 Dockerfile文件 # alpine Linux发行版&#xff0c;该发行版的大小很小并且内置了Go FROM golang:alpine# 设置linux环境变量 ENV GO111MODULEon \CGO_ENABLED0 \GOOSl…

MyBatis持久层框架详细解读:MyBatis快速入门篇

文章目录1. 前言2. JDBC 存在的缺点3. MyBatis 优化4. MyBatis 快速入门5. 总结Java编程基础教程系列1. 前言 JavaEE 企业级 Java 项目中的经典三层架构为表现层&#xff0c;业务层和持久层&#xff0c;使用Java 代码操作数据库属于持久层内容&#xff0c;而 MyBatis 对 JDBC …

Appmsg:APP辅助分析神器

一、前言 在进行APP渗透测试、APP病毒分析或写APP测试报告时经常会用到APP基本信息&#xff0c;有些工具虽然可以解析APP&#xff0c;但缺少想要的信息&#xff0c;有些解析的结果不够准确&#xff0c;于是只好自研一款工具来解决。 二、定位 主要适用于以APP病毒分析、APP漏…

一个数据驱动的动态 NFT 实现方案

1 背景2022 年是 Web3 行业很不如意的一年&#xff0c;DeFi 旧力已去&#xff0c;游戏和社交应用新力未发&#xff0c;放眼望去&#xff0c;似乎只有 NFT 仍然热度不减&#xff0c;各种应用、各种概念也是层出不穷&#xff0c;几乎是独力支撑熊市当中 Web3 的希望。除了围绕 NF…

【MFC】MFC应用程序流程(11)

在WIN32应用程序中使用MFC于MFC框架创建的应用程序流程基本上一致的&#xff0c;不同之处是对MFC框架的使用。 MFC应用程序流程 应用程序类继承CWinAppEx&#xff08;类似CWinApp&#xff09;&#xff0c;编译时注入的WinMain函数利用多态机制实现应用程序初始化&#xff1a;…

LaoCat带你认识容器与镜像(番外一【Harbor】)

祝大家开工大吉呀&#xff0c;新的一年要有新的收获呀 ~ 本章内容 搭建Docker镜像私仓Harbor&#xff0c;并配置Docker私仓。 本文实操全部基于Ubuntu 20.04 宿主机 > linux服务器本身 Harbor > 2.5.3 Docker系列文章之仓库篇就介绍了Docker有俩种类型的镜像仓库&#x…

AppShark:一款针对Android应用程序的静态分析与漏洞扫描框架

关于AppShark AppShark是一款针对Android应用程序的安全测试框架&#xff0c;该工具本质上是一个静态污点分析平台&#xff0c;可以用于扫描Android应用程序中的漏洞。 AppShark除了实现行业普遍应用的数据流分析&#xff0c;还将指针分析与数据流分析融合&#xff0c;因而漏…

【项目精选】基于SpringBoot+Vue实现的仿掘金论坛系统(包含完整源码以及部署教程)

项目简介 本论坛基于SpringBootVue框架实现前后端分离&#xff0c;自适应手机端和电脑端&#xff0c;界面简洁美观&#xff0c;功能完善&#xff0c;性能高效。分为用户系统和管理系统两部分。 大厂微服务架构设计&#xff1b;代码简洁、高效无冗余&#xff1b;注释详细易阅读…

LabVIEW 在NI Linux实时设备上访问Shell

LabVIEW 在NI Linux实时设备上访问Shell有一台运行NI Linux实时操作系统的设备&#xff0c;想访问设备上的shell或终端。要使用以下任一方法与设备通信&#xff0c;必须在计算机上安装终端客户端。使用SSH连接&#xff1a;1. 打开电源并将设备连接到网络或直接连接到计算机。2.…

已解决:Linux安装Docker完整过程

① 目的 接口自动化接口需要持续集成&#xff0c;最终选择Jenkins来实现。通过docker来实现安装部署Jenkins ② 环境 Linux ③Docker的自动化安装 Docker官方和国内daocloud都提供了一键安装的脚本&#xff0c;使得Docker的安装更加便捷。 官方的一键安装方式&#xff1a; curl…

C#,索尼偏光相机(Polarization Camera)传感器IMX250和专用SDK简介

以下文字用百度翻译&#xff0c;效果一般&#xff0c;凑合看吧。2018年12月开始上市的索尼偏光相机和偏光相机专用SDK实现了高功能、高画质、高速处理。其要点在于&#xff0c;开发为不在需要专业知识的偏振信号处理的安装中花费工时&#xff0c;能够以最小限度的成本利用的SDK…

逆战成钢!大势智慧2023新春年会暨表彰大典圆满举行

2023年1月14日&#xff0c;大势智慧2023新春年会暨表彰大典如期举行。暂别了疫情的阻隔&#xff0c;大势智慧武汉总部与各分公司成员时隔两年再次迎来“面对面拥抱”。三百多名大势成员群贺新春&#xff0c;共同度过了一次难忘的年会盛典。 逆战成钢 用奋战实现业绩、规模高增…

Flutter 2023 Roadmap 解析

随着 Flutter Forward 大会召开&#xff0c; Flutter 官方在 3.7 版本 之余为我们展示了如 3D 渲染支持、add-to-web 等未来可能出现的 Feature&#xff0c;但是这些都还只是处于开发中&#xff0c;未来可能还会有其他变动&#xff0c;而在大会结束后&#xff0c;官方也公布了更…

【GD32F427开发板试用】基于蓝牙模块的远程点灯演示

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;寒冰1988 一. 前言 感谢极术社区联合兆易创新组织的本次活动&#xff0c;很荣幸能够中签本次的试用机会&#xff0c;结合手里的外围模块&…