Java---异常

news2025/6/9 17:30:38

文章目录

    • 1. 异常概述
    • 2. try...catch
    • 3. Throwable成员方法
    • 4. 编译时异常和运行时异常区别
    • 5. 异常处理之throws
    • 6. 自定义异常
    • 7. throws和throw的区别


1. 异常概述

 1. 异常:就是程序中出现了不正常的情况。

 2. Error:严重问题,不需要处理。Exception:称为异常类,它表示程序本身可以处理的问题。RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码。非RuntimeException:编译期就必须处理的,否则程序不能通过编译,就更不能运行了。

在这里插入图片描述

 3. JVM处理异常的默认方案:(1) 把异常的名称、异常的原因以及异常出现的位置等信息输出在了控制台。 (2) 程序终止运行。

2. try…catch

 1. 如果程序出现了问题,我们需要自己处理,有两种方案:(1) try...catch。 (2) throws

 2. try...catch执行流程:程序从try里面的代码开始执行;出现异常时会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统;当Java运行时系统接收到异常对象时,会到catch中去找匹配的异常类,找到后进行异常的处理;执行完毕之后,程序还可以继续往下执行。
在这里插入图片描述

 3. 代码块举例:

public class Demo {
    public static void main(String[] args) {
        System.out.println("开始");
        method();
        System.out.println("结束");
    }
    public static void method() {
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("你访问的数组的索引不存在");
        }
    }
}

在这里插入图片描述

public class Demo {
    public static void main(String[] args) {
        System.out.println("开始");
        method();
        System.out.println("结束");
    }
    public static void method() {
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]);
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

3. Throwable成员方法

方法名说明
public String getMessage()返回此throwable的详细信息字符串
public String toString()返回此可抛出的简短描述
public void printStackTrace()把异常的错误信息输出在控制台
public class Demo {
    public static void main(String[] args) {
        System.out.println("开始");
        method();
        System.out.println("结束");
    }
    public static void method() {
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[3]);
        } catch (ArrayIndexOutOfBoundsException e) {
            //e.printStackTrace();
            System.out.println(e.getMessage()); //输出:3
            System.out.println(e.toString()); //输出:java.lang.ArrayIndexOutOfBoundsException: 3
        }
    }
}

4. 编译时异常和运行时异常区别

 Java的异常分为两大类:编译时异常和运行时异常,也称为受检异常和非受检异常。所有的RumtimeException类及其子类被称为运行时异常,其他的异常都是编译时异常。

  • 编译时异常:必须显示处理,否则程序就会报错,无法通过编译。
  • 运行时异常:无须显示处理,也可以和编译异常时一样处理。

5. 异常处理之throws

 1. 虽然我们通过try...catch...可以对异常进行处理,但是并不是所有的情况我们都有权限进行异常的处理。也就是说,有时候可能出现的异常我们处理不了。针对这种情况,Java提供了throws的处理方案。

 2. 格式:throws 异常类名。注意:这个格式是跟在方法的括号后面的。

 3. 代码块举例。可以看到抛出异常后不会继续往下处理。

public class Demo {
    public static void main(String[] args) {
        System.out.println("开始");
        method();
        System.out.println("结束");
    }
    public static void method() throws ArrayIndexOutOfBoundsException {
        int[] arr = {1, 2, 3};
        System.out.println(arr[3]);
    }
}

在这里插入图片描述

6. 自定义异常

 1. 格式和范例:

在这里插入图片描述

在这里插入图片描述

 2. 代码块举例:

public class ScoreException extends Exception{
    public ScoreException() {};
    public ScoreException(String message){
        super(message);
    }
}

public class Teacher {
    public void CheckScore(int score) throws ScoreException{
        if(score<0||score>100)
            throw new ScoreException("你给的分数有误,应该在0-100之间");
        else
            System.out.println("分数正常");
    }
}

import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入分数:");
        int score=sc.nextInt();

        Teacher t=new Teacher();
        try {
            t.CheckScore(score);
        } catch (ScoreException e) {
            e.printStackTrace();
        }
    }

}

在这里插入图片描述

7. throws和throw的区别

throwsthrow
用在方法声明后面,跟的是异常类名用在方法体内,跟的是异常对象名
表示抛出异常,由该方法的调用者来处理表示抛出异常,由方法体内的语句处理
表示出现异常的一种可能性,并不一定会发生这些异常执行throw一定抛出了某种异常

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

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

相关文章

揭秘MQTT:为何它是物联网的首选协议?

文章目录 MQTT 协议简介概览MQTT 与其他协议对比MQTT vs HTTPMQTT vs XMPP 为什么 MQTT 是适用于物联网的最佳协议&#xff1f;轻量高效&#xff0c;节省带宽可靠的消息传递海量连接支持安全的双向通信在线状态感知 MQTT 5.0 与 3.1.1MQTT 服务器MQTT 客户端 MQTT 协议简介 概…

亿胜盈科AT8236 刷式直流电机驱动器

AT8236是一款刷式直流电机驱动器&#xff0c;能够以高达6A的峰值电流双向控制电机。利用电流衰减模式&#xff0c;可通过对输入信号进行脉宽调制(PWM) 来控制电机转速&#xff0c;同时具备低功耗休眠模式。 AT8236集成同步整流功能&#xff0c;可显著降低系统功耗要求。内部保…

【鸿蒙应用开发】开发环境搭建及IDE安装使用

1.下载安装包 安装包下载地址&#xff1a; 点击跳转下载页面 可以根据自己的操作系统选择对应版本下载。 本文以Windows安装为例&#xff0c;Mac安装方式相同 2. 安装 下载好后&#xff0c;打开安装包&#xff0c;进入安装界面&#xff1a; 点击Next&#xff0c;进入安…

傻傻分不清楚的分区、分库、分表

一、分区 MySQL 在 5.1 时添加了对 分区&#xff08;即水平分区&#xff09; 的支持。MySQL 的物理数据存储在表空间文件&#xff08;.ibdata1和.ibd&#xff09;中&#xff0c;分区 的意思是指将同一表中不同行的记录分配到不同的物理文件中。有几个分区就有几个 .idb 文件。…

CPP-SCNUOJ-Problem P23. 计数排序(使用C/C++)

Problem P23. 计数排序&#xff08;使用C/C&#xff09; 计下标从 1 开始。有n 个取值范围在 [1,m] 的整数ai 。请将它们升序排序&#xff0c;设排序后数组为b 。为避免输出过长&#xff0c;请输出&#xff1a; 输入 输出 输出一个整数代表计算结果 样例 标准输入 10 3 1 …

智能液压传动综合实验台比例阀放大器

智能型液压传动实验台具有开发测试分析系统&#xff0c;通过对流量、压力、功率、转速、扭矩、位移、时间、温度--计算机人机画面 -- 计算机智能数据采集、分析、处理、--自动生产报表、曲线等一系列智能化动作后,完成各类常规的液压回路、马达、各类阀泵的动静态测试等实验.通…

C语言枚举详解,typedef简介(能看懂文字就能明白系列)

系列文章目录 C语言基础专栏 笔记详解 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言一、枚举类型的声明枚举常量三、枚举类型的优…

情怀零食店溢价严重,网友:情怀就是智商税,贵可以不买!

小时候的零食&#xff0c;是每个人心中无法抹去的甜蜜记忆。在广东&#xff0c;那些5毛钱的零食更是让无数人回味无穷。但近年来&#xff0c;这些情怀零食店的价格乱象却让不少人大呼“离谱”。 有市民反映&#xff0c;在一家主打怀旧主题的零食店内&#xff0c;三样商品竟然要…

ros2+UBUNTU读取STM32发送过来的数据(C++)

ATTENTION:一般ros2上位机访问STM32不是使用串口&#xff0c;即使树莓派有串口&#xff0c;我也不会用的&#xff0c;因为那还要去学习其他的语言&#xff0c;一般就是ros2---------ubs转串口-------STM32串口。 这个USB转串口&#xff0c;我们已经安装了CH340驱动了&#xff…

mall电商项目(学习记录2)

运行mall-admin Java项目 需要安装Redis&#xff0c;需要安装mysql&#xff0c;同时需要运行其项目提供的mall.sql 运行mall-admin后端程序 安装完Redis、mysql、HeidiSQL&#xff08;用于执行mall.sql&#xff0c;界面化操作高效直观&#xff09;、IntelliJ IDEA 运行mall-…

写给初学者的 HarmonyOS 教程 -- 页面路由(router)

页面路由&#xff08;router&#xff09;是指在应用程序中实现不同页面之间的跳转和数据传递。 HarmonyOS 提供了 Router 模块&#xff0c;通过不同的 url 地址&#xff0c;可以方便地进行页面路由&#xff0c;轻松地访问不同的页面。 类似这样的效果&#xff1a; 页面跳转是…

MISRA C 2012 标准浅析

MISRA(The Motor Industry Software Reliability Association)&#xff0c;汽车工业软件可靠性联会&#xff1b; 1994年&#xff0c;英国成立。致力于协助汽车厂商开发安全可靠的软件的跨国协会&#xff0c;其成员包括&#xff1a;AB汽车电子、罗孚汽车、宾利汽车、福特汽车、捷…

从0到1的跨境电商创业经验分享!个人如何做跨境电商创业?

近年来&#xff0c;跨境电商成为了一种非常流行的创业方式&#xff0c;都知道国内贸易不好做&#xff0c;许多卖家都想通过跨境电商创业&#xff0c;但他们不知道具体的过程&#xff0c;今天龙哥我就分享一下我自己在跨境电商创业总结出来的经验&#xff0c;帮助你在跨境电商领…

Apollo新版本Beta自动驾驶技术沙龙参会体验有感—百度自动驾驶开源框架

在繁忙的都市生活中&#xff0c;我们时常对未来的科技发展充满了好奇和期待。而近日&#xff0c;我有幸参加了一场引领科技潮流的线下技术沙龙&#xff0c;主题便是探索自动驾驶的魅力——一个让我们身临其境感受创新、了解技术巨擘的机会。 在12月2日我有幸参加了Apollo新版本…

基于Linux的网络防火墙设计方法

摘要 随着Internet的迅速发展&#xff0c;网络越来越成为了人们日常生活不可或缺的一部分&#xff0c;而随之引出的网络安全问题也越来越突出&#xff0c;成为人们不得不关注的问题。 为了在一个不安全的网际环境中构造出一个相对安全的环境&#xff0c;保证子网环境下的计算机…

LeetCode | 110. 平衡二叉树

LeetCode | 110. 平衡二叉树 OJ链接 首先计算出二叉树的高度然后计算当前节点的左右子树的高度&#xff0c;然后判断当前节点的左右子树高度差是否超过 1&#xff0c;最后递归地检查左右子树是否也是平衡的。 //计算二叉树的高度 int height(struct TreeNode* root) {if(root…

国标GB28181视频监控EasyCVR内网环境部署无法启动怎么办?

安防视频监控系统EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTMP、RTSP、HTTP-FLV、…

【Spring Cloud Alibaba】1.4 Nacos服务注册流程和原理解析

文章目录 1.前言2. 服务注册的基本流程3. 服务注册的核心代码分析3.1. NacosNamingServiceNamingProxy 服务端通信的核心类NamingClientProxy nacos 2.x 版本服务端通信核心接口 3.2 NamingGrpcClientProxy 详解RpcClient类RpcClient类核心方法 start 3.3 NamingHttpClientProx…

ERROR: No matching distribution found for embreex

因为要使用Trimesh中的光锥进行投射&#xff0c;在windows下正常安装embreex,但是切换到Ubuntu系统的时候却发现报错&#xff0c;起初以为是conda环境太过于古老&#xff0c;导致搜索不到。 所以&#xff0c;第一步先升级conda: conda update conda 或者 conda update -n ba…

人才招聘信息网的设计与实现

摘 要 随着经济的高速发展&#xff0c;人才的流动也越来越频繁&#xff0c;怎样才能用最少的精力和时间来招聘人才的企业要求相一致&#xff0c;也让应聘人参加应聘是企业和个人都关心的问题。 本网站采用基于广域网的B/S结构平台&#xff0c;比C/S有更强的适用范围&#xff0…