Java——异常学习

news2024/11/24 3:28:07

一、什么是异常

Java的异常是指在程序运行过程中可能发生的错误或异常情况,如数组越界、除零错误、空指针等。

备注:(开发过程中的语法错误和逻辑错误不是异常)

二、Java异常分类

在这里插入图片描述

三、异常处理方式

下面先看以下代码

//下面创建一个用于计算的类
class calculate { // 创建用于计算的类calculate
    public static void main(String[] args) { 	// 主方法
        int result = 3 / 0; 					// 定义int型变量并赋值
        System.out.println(result); 			// 将结果输出
    }
}

发现运行时出现报错
在这里插入图片描述
我们都知道在除法中除数即分母是不能为零,所以当出现这样的情况时就需要处理异常。

出现异常就要处理异常,处理异常通常有以下两种方式。

3.1、方式一:try-catch-finally

Java 语言的异常捕获结构由 try、catch 和 fimally 3 部分组成。

try 语句块存放的是可能发生异常的 Java 语句;
catch 语句块在 try 语句块之后,用来捕获异常;
finaly语句块是异常处理结构的最后执行部分,无论 try 语句块中的代码如何退出,都将执行 finally 语句块。
语法如下:

try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
}finally{
  // 程序代码
}

修改以上代码

class ExceotionTest{
    public static void main(String[] args) {
        int result = 0;
        try {
            //将可能出现异常的代码放在try内
            result = 3 / 0;
        } catch (ArithmeticException e) {
            //在catch语句块中捕获异常
            System.out.println("Exception thrown  :" + e);
        } finally {
            //不论try中是否有异常都会执行finally语句块中的代码,即使存在return语句
            System.out.println(result);
        }
    }
}

//运行结果
Exception thrown  :java.lang.ArithmeticException: / by zero
0

3.2、方式二:throw、throws + 异常类型

使用关键字throw和throws

class ExceotionTest{
    public static void main(String[] args) {
        try {
            calculate(3,0);//在调用calculate()方法的地方捕获throws抛出的异常
        } catch (ArithmeticException e) {
            throw new RuntimeException(e);
        }
    }

    //假设在这个方法中处理不了这个异常,则使用throws向上抛出异常,给调用这个方法的地方处理
    static void calculate(int num1, int num2) throws ArithmeticException{
        if(num2 == 0){
            //使用throw主动抛出异常,一般在方法中使用
            throw new ArithmeticException();
        }
    }
}

四、自定义异常

4.1、方式一:通过super调用父类构造方法输出自定义异常信息

//自定义异常类
class MyException extends Exception {	        //创建自定义异常,继承Exception类
    public MyException(String ErrorMessage) { 	//构造方法
        super(ErrorMessage); 					//父类构造方法
    }
}

//测试类
class Tran {
    static int division(int number1, int number2) throws MyException { // 定义方法,抛出异常
        System.out.println("传入分母参数为:"+number2);
        if(number2 == 0){
            throw new MyException("分母不能为0");
        }
        return (number1 ) / number2; // 将参数的平均值返回
    }

	/*主方法*/
    public static void main(String[] args) { 
        try {
            int result = division(12, 0);   // 调用division()方法
            System.out.println(result);     // 将division()方法的返回值输出
        } catch (MyException e) {
            System.out.println(e);          // 输出异常信息
        }
    }
}

//输出结果
传入分母参数为:0
MyException: 分母不能为0

4.2、方式二:通过自定义异常类toString()方法输出自定义异常信息

//自定义异常类
class MyException extends Exception {	        //创建自定义异常,继承Exception类
    //打印异常信息
    public String toString() {
        return "自定义异常:分母不能为0";
    }
}

public class Tran {
    static int division(int number1, int number2) throws MyException { // 定义方法,抛出异常
        System.out.println("传入分母参数为:"+number2);
        if(number2 == 0){
            throw new MyException();
        }
        return (number1 ) / number2; // 将参数的平均值返回
    }

    public static void main(String[] args) { // 主方法
        try {
            int result = division(12, 0);   // 调用division()方法
            System.out.println(result);     // 将division()方法的返回值输出
        } catch (MyException e) {
            System.out.println(e);          // 输出异常信息
        }
    }
}

//输出结果
传入分母参数为:0
自定义异常:分母不能为0

五、常见异常

异常名称								异常描述
-----------------------------------------------------------
NullPointerException				空指针异常
ArithmeticExecption					算术异常
ArrayIndexOutOfBoundsExecption		数组下标越界异常
NoSuchMethodExecption				方法未找到异常

异常信息打印

class test{
    public static void main(String[] args) {
        try {
            int result = 1/0;
            System.out.println(result);
        } catch (Exception e) {
            System.out.println(e);//方式1:直接使用System.out.println(e)输出异常
            System.out.println(e.getMessage());//方式2:通过异常对象调用getMessage()方法打印与异常信息
            e.printStackTrace();//方式3:打印异常详细信息
        }
    }
}

在这里插入图片描述

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

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

相关文章

OpenCV读取一张深度图像并显示

#include <iostream> #include <opencv2/imgcodecs.hpp> #include <opencv2/opencv.hpp> #include

openGauss学习笔记-01 什么是openGauss

文章目录 openGauss学习笔记-01 什么是openGauss1.1 openGauss是一个数据库管理系统1.2 openGauss数据库是关系型的1.3 openGauss软件是开源的1.4 openGauss数据库具有高性能、高可用、高安全、易运维、全开放的特点1.4.1 高性能1.4.2 高可用1.4.3 高安全1.4.4 易运维1.4.5 全开…

Nanopc T4 教程使用及获取

所有资料从以下链接获取 ● Wiki教程&#xff1a;http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T4/zh 机械结构图&#xff08;dxf格式&#xff09;&#xff1a;http://wiki.friendlyarm.com/wiki/images/b/bc/NanoPC-T4_1802_Drawing%28dxf%29.zip 原理图&#xff1a;h…

一百二十七、海豚调度——dolphinscheduler205单机版安装

一、前提准备 1.JDK1.8 2.MySQL&#xff08;5.7&#xff09; 3.ZooKeeper&#xff08;3.4.6&#xff09; 4.需安装进程树分析工具 psmisc [rootlinux128 ~]# sudo yum install -y psmisc 5.海豚调度安装包和MySQL驱动包 apache-dolphinscheduler-2.0.5-b…

Meta推出推特竞争对手APP:Threads

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 今日&#xff0c;Meta 正式在美国推出独立的社交应用程序Threads&#xff0c;这是一款直接针对推特的应用程序。类似于Twitter&#xff0c;可以发表短消息和图片。和国内的新浪微博一个意思。 Th…

WIN11家庭中文版使用ENSP+VirtualBox启动AR失败40错误+未完全关闭hyper-V,以及安装VirtualBox兼容性问题

使用版本&#xff1a;eNSP 1.3.00.100VirtualBox 5.2.44WinPcap_4_1_3Wireshark最新版。 win11系统最好按照上述版本安装&#xff0c;VirtualBox不要安装更高版本&#xff0c;否则可能出现不兼容情况&#xff0c;Wireshark版本要求还好&#xff0c;安装顺序是VirtualBox 5.2.4…

Filter过滤器总结

文章目录 1. Filter介绍2. Filter分析2.1 初始化使用2.2 WebFilter 配置2.3 其他 3. Filter应用3.1 筛选访问路径3.2 判断用户是否存在 1. Filter介绍 介绍: Filter是过滤器&#xff0c;通常可以将请求的资源拦截下来从而实现一些补充操作。 2. Filter分析 2.1 初始化使用 …

多地ping检测域名解析ip地址—js混淆对抗

多地ping检测域名解析ip地址—js混淆对抗 0x1 概述 由于项目需求&#xff0c;给出了n多条域名&#xff0c;需要获取其对应的ip地址。本文叙述了解决项目问题所使用的方法&#xff0c;且本文旨在研究js反混淆&#xff0c;请勿将所观所学用于非法操作&#xff0c;如有侵权&…

spring-bean的基础知识

1.bean的别名 2.bean的作用范围 单例多例&#xff0c;即现在创建的bean对象是一个还是多个&#xff0c;默认情况下是单例&#xff0c;可在配置文件修改 <bean scope"singleton/prototype"/> 适合单例的bean 1.表现层对象 2.业务层对象 3.数据层对象 4.工具对…

windows py项目部署到centos7上出现的问题

yolov5训练数据时&#xff0c;centos7系统无法访问github下载预训练模型方法&#xff1a;在自己的计算机中打开etc&#xff0c;找到hosts文件 将下面的命令添加到内容的末尾 # GitHub Start 140.82.113.3 github.com 140.82.114.20 gist.github.com 151.101.184.133 …

基于Java+vue前后端分离微博系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

17.待机唤醒

1.STM32待机模式介绍&#xff1a; &#xff08;1&#xff09;STM32低功耗模式介绍&#xff1a; STM32提供了3种低功耗模式&#xff0c;以达到不同层次的降低功耗的目的&#xff0c;三种模式如下所示&#xff1a; 睡眠模式(CM内核停止工作&#xff0c;外设仍在运行)&#xff…

【K8S系列】深入解析K8S监控

序言 做一件事并不难&#xff0c;难的是在于坚持。坚持一下也不难&#xff0c;难的是坚持到底。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记论点蓝色&#xff1a;用来标记论点 Kubernetes (k8s) 是一个容器编…

C语言学习(三十四)---动态内存常见错误总结

上节内容中&#xff0c;我们学习如何规范的申请和使用动态内存&#xff0c;其实是很重要的一环。 在大的程序中&#xff0c;应该注意这些细节问题&#xff0c;不然就会对其他的程序猿们产生影响&#xff0c;因为大的程序不可能交由一个人完成&#xff0c;所以&#xff0c;你编…

Slidev: 为开发者打造的演示文稿工具

非程序员开发者可以忽略&#xff0c;需要一定Markdown等知识要求。 官网地址&#xff1a;Slidev、开始使用 | Slidev 简介 Slidev (slide dev, /slʌɪdɪv/) 是基于 Web 的幻灯片制作和演示工具。它旨在让开发者专注在 Markdown 中编写内容&#xff0c;同时拥有支持 HTML 和…

二本4年测试经验,五面阿里(定薪35K),分享我的心得

6月跳槽&#xff0c;先后面试了多个大大小小的公司&#xff0c;拿了一些offer&#xff0c;有阿里&#xff0c;滴滴&#xff0c;快手&#xff0c;达达&#xff0c;得物等公司。面试的公司大部分都能过&#xff0c;所以这里给大家分享下自己的经验&#xff0c;也给自己做个归档&a…

2021年国赛高教杯数学建模E题中药材的鉴别解题全过程文档及程序

2021年国赛高教杯数学建模 E题 中药材的鉴别解题 原题再现 不同中药材表现的光谱特征差异较大&#xff0c;即使来自不同产地的同一药材&#xff0c;因其无机元素的化学成分、有机物等存在的差异性&#xff0c;在近红外、中红外光谱的照射下也会表现出不同的光谱特征&#xff…

软件工程-期末复习题

第1章软件工程概述 1、软件的概念及特点 概念&#xff1a; 计算机软件是由专业人员开发并长期维护的软件产品。完整的软件产品包括了在各种不同容量和体系结构计算机上的可执行的程序&#xff0c;运行过程中产生的各种结果&#xff0c;以及以硬复制和电子表格等多种方式存在的软…

ChatGPT 和爬虫有什么区别

目录 ChatGPT的概念和功能 爬虫的概念和功能 ChatGPT和爬虫的区别 ChatGPT的概念和功能 ChatGPT是一个基于自然语言处理和机器学习的智能对话模型&#xff0c;具有以下功能&#xff1a; 1. 问题回答&#xff1a;ChatGPT可以回答用户提出的各种问题。不论是有关常识、历史、科…

【数据结构】---TopK问题

本文提供用建堆来解决TopK问题的一个思路 N个数中找出最大的或者最小的前k个 假设现从N个数中找最大的前k个 ①堆排序&#xff0c;时间复杂度O(N*logN)&#xff0c;这N个数排一下序&#xff0c;前k个数就是需要的②建堆N个数的小堆&#xff0c;HeapPop 9次&#xff0c;就选出…