异常 --java学习笔记

news2024/9/24 23:21:31

异常

  • 异常就是代表程序出现的问题

        当一个方法出现问题,这个方法内部就会把这个问题的信息封装成一个异常对象,然后把这个异常对象抛给jvm虚拟机,jvm收到之后会先把出问题的程序先停下来,然后再把这个异常对象打印出来,里面会包含该问题的很多信息        

例:

异常的体系

Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装成Error对象给出来。说白了,Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它

Exception:叫异常,它代表的才是我们程序可能出现的问题,所以,我们程序员通常会用Exception以及它的孩子来封装程序出现的问题

  • 运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)
  • 编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)

运行时异常:

刚才举出的例子就是运行时异常:

还有典型的数组越界异常:

编译时异常:

当你写代码时就会通过报错强制提醒你这个方法很容易出问题,提醒你最好认真检查一下~如果不检查不处理,程序将会报错。可以通过try  catch捕获可能出现的异常抛出去,也可以通过throws把异常抛给上一层(jvm虚拟机)处理,当然jvm也不知道怎么处理你的问题,只是帮你去用rty catch去环绕问题代码

try catch 捕获异常:

throws抛出异常:

自定义异常

  • Java无法为这个世界上全部的问题都提供异常类来代表,如果企业自己的某种问题,想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类了。

自定义异常的种类:

自定义运行时异常

自定义异常继承类:

public class AgeIllegalRuntimeException extends RuntimeException{   //运行时异常必须继承自RuntimeException
    public AgeIllegalRuntimeException() {
    }

    public AgeIllegalRuntimeException(String message) {
        super(message);
    }
}

test:

public class 自定义异常 {
    public static void main(String[] args) {
        try {   //用try catch捕获异常
            SetAge(151);    //非法值
            System.out.println("底层执行成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("底层出现bug!");
        }
    }

    private static void SetAge(int age) {
        if(age >= 0 && age <= 150){
            System.out.println("年龄设置成功");
        }else{  //触发else说明age的值有问题不合法
                //用一个异常对象封装这个问题
                //用throw抛出去
            throw new AgeIllegalRuntimeException("年龄异常,年龄为非法值(Age is illegal, your age is):"+age);  
        }           
    }
}

运行结果:

自定义编译时异常

public class AgeIllegalException extends Exception{      //编译时异常必须继承自Exception
    public AgeIllegalException() {
    }

    public AgeIllegalException(String message) {
        super(message);
    }
}

test:

public class 自定义异常 {
    public static void main(String[] args) {
        try {   //用try catch捕获异常或抛出异常,否则直接报错
            SetAge(151);    //非法值
            System.out.println("底层执行成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("底层出现bug!");
        }
    }

    private static void SetAge(int age) throws AgeIllegalException{
        if(age >= 0 && age <= 150){
            System.out.println("年龄设置成功");
        }else{  //触发else说明age的值有问题不合法
                //用一个异常对象封装这个问题
                //用throw抛出去
                //用throws用在方法上,抛出这个方法内部出现的异常
            throw new AgeIllegalException("年龄异常,年龄为非法值(Age is illegal, your age is):"+age);
        }
    }
}

运行结果:

总结:自定义运行时异常和自定义编译时异常用法是非常相似的,不过在效果上自定义编译时异常会在编译时就提醒你处理

异常有什么作用?

  1. 异常是用来查询系统Bug的关键参考信息
  2. 异常可以作为方法内部的一种特殊返回值,以便通知上层调用者底层的执行情况

开发中关于异常的常见处理方式

1、捕获异常,记录异常并响应合适的信息给用户

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ExceptionTest2 {
    public static void main(String[] args) throws ParseException{
        try {   //调用者捕获异常
            test1();
        } catch (Exception e) { //记录异常并响应合适的信息给用户
            System.out.println("您当前的操作有问题");
            e.printStackTrace();
        }
    }
                                                    //直接抛Exception就行了,不用抛具体异常
    private static void test1() throws Exception{   //异常,抛给调用者
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse("2021-07-07 23:23:20");
        System.out.println(d);
        test2();
    }

    private static void test2() throws Exception{   //异常,抛给调用者
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse("2021-07-07 23:23");
        System.out.println(d);
    }
}

运行结果:

2、捕获异常,"尝试重新修复

import java.text.ParseException;
import java.util.Scanner;

public class ExceptionTest3 {
    public static void main(String[] args) throws ParseException {
        while (true) {  //循环围住,直到成功执行
            try {
                System.out.println(getMoney());
                break;
            } catch (Exception e) {
                System.out.println("请输入数字!");
            }
        }
    }

    private static double getMoney() {
        Scanner sc = new Scanner(System.in);
        while (true) {  //循环围住,直到输入合适的价格或者非法价格(往上层抛异常)
            System.out.print("请输入合适的价格:");
            double money = sc.nextDouble(); //假如输入非double型就会往上抛异常
            if(money >= 0){
                return money;
            }else{
                System.out.println("您输入的价格不合适吧");
            }
        }
    }
}

运行结果:

可以大大增加程序的健壮性

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

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

相关文章

libVLC 元数据

libVLC是一个开源的多媒体框架&#xff0c;主要用于处理和播放各种类型的媒体文件&#xff0c;如视频、音频等。 媒体元数据&#xff08;Metadata&#xff09;&#xff1a;包括媒体文件的基本信息&#xff0c;如标题、艺术家、专辑、持续时间、分辨率、比特率、编码格式等。 …

01mysql

登陆mysql 默认数据库 进入&#xff0c;展示&#xff0c;删除 &#xff0c;查看当前正使用的库 select version()查看版本 查看表结构desc 查询 not in不会忽略空 in会自动忽略 like模糊查询 %o%中间带o的 _A%第二个字母是A的 查名字是下划线的 %\_% 排序 order …

Power BI ----SVG(圆环图)

圆环图助力矩阵图 定义度量值放置视觉对象SVG是什么鬼,在现在的Web世界中越来越凸显这一标准的优势。关于SVG,我们只需要知道一点就好 ---- SVG 意为可缩放矢量图形(Scalable Vector Graphics)。它是使用 XML 格式定义的图像。 由此我们就可以知道SVG是可以通过文本来定义图…

web前端框架设计第三课-基础特性

web前端框架设计第三课-基础特性 一.预习笔记 1.Vue实例 每个Vue.js的应用都需要通过构造函数创建一个Vue的实例 语法格式&#xff1a;var 实例名new Vue({}) 特性1–挂载元素&#xff1a;Vue的实例需要具体的存放位置&#xff0c;而挂载元素el就是提供者 特性2–数据&…

数字乡村标准化白皮书 - 2024年版:数字乡村内涵、发展现状、标准化现状、标准需求

党的二十大报告指出“全面推进乡村振兴。全面建设社会主义现代化国家&#xff0c;最艰巨最繁重的任务仍然在农村。坚持农业农村优先发展&#xff0c;坚持城乡融合发展&#xff0c;畅通城乡要素流动。加快建设农业强国&#xff0c;扎实推动乡村产业、人才、文化、生态、组织振兴…

Day01-数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)

文章目录 Day01-数据类型和运算符学习目标1. 数据库介绍1.1 数据库的发展历史1.2 数据库分类1.2.1 关系型(SQL)数据库1.2.2 非关系型(NoSQL)数据库1.2.3 数据库排名 2. MySQL服务器的安装2.1 MySQL介绍2.2 下载2.3 安装2.4 启动服务器2.5 卸载 3. MySQL客户端3.1 使用命令行客户…

记录一次服务器内存使用率过高达到90%告警问题排查。

目录 一、前言二、问题排查处理三、 结尾 &#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;Docker容器化部署系列 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 一、前言 一大早就有一…

Java设计模式 | 工厂方法模式

工厂方法模式 针对简单工厂模式案例中的缺点&#xff0c;使用工厂方法模式就可以完美的解决&#xff0c;完全遵循开闭原则。简单工厂模式只有一个工厂类&#xff0c;负责创建所有产品&#xff0c;如果要添加新的产品&#xff0c;就需要修改工厂类的代码。而工厂方法模式引入了…

通过人工智能驱动的交互提升客户体验

用AI创造无限可能&#xff1a;打造极致客户体验的秘诀 在当今竞争激烈的市场中&#xff0c;客户体验至关重要。 企业正在迅速采用人工智能驱动的交互来彻底改变与客户的互动。 人工智能技术不仅简化了运营&#xff0c;还带来了以前无法达到的个性化和效率水平。 对于寻求满足客…

【Java - 框架 - SpringMVC】(01) SpringMVC框架的简单创建与使用,快速上手

"SpringMVC"框架的简单创建与使用&#xff0c;快速上手&#xff1b; 环境 Java版本"1.8.0_202"&#xff1b;Spring Boot版本"2.5.9"&#xff1b;Windows 11 专业版_22621.2428&#xff1b;IntelliJ IDEA 2021.1.3(Ultimate Edition)&#xff1…

8.2K star!史上最强Web应用防火墙

&#x1f6a9; 0x01 介绍 长亭雷池SafeLine是长亭科技耗时近 10 年倾情打造的WAF(Web Application Firewall)&#xff0c;一款敢打出口号 “不让黑客越雷池一步” 的 WAF&#xff0c;我愿称之为史上最强的一款Web应用防火墙&#xff0c;足够简单、足够好用、足够强的免费且开源…

【Spring 篇】走进Java NIO的奇妙世界:解锁高效IO操作的魔法

欢迎来到Java NIO的神奇之旅&#xff01;在这个充满活力的世界里&#xff0c;我们将一起揭示Java NIO&#xff08;New I/O&#xff09;的奥秘&#xff0c;探索其在高效IO操作中的神奇魔法。无需担心&#xff0c;即使你是Java的小白&#xff0c;也能轻松领略这个强大而灵活的IO框…

如何设置IDEA远程连接服务器开发环境并结合cpolar实现ssh远程开发

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

SpringBoot+Vue前后端分离项目在Linux系统中基于Docker打包发布

文章目录 SpringBootVue前后端分离项目在Linux系统中基于Docker打包发布一、Java项目基于Docker打包发布1.打包应用&#xff0c;将打好的jar包放到我们的linux系统中2.新建dockerfile3.打包镜像4.测试运行5.上传镜像到阿里云免费私仓 二、Vue项目打包到docker镜像1.编译打包前端…

记一次由于buff/cache导致服务器内存爆满的问题

目录 前言 复现 登录服务器查看占用内存进程排行 先了解一下什么是buff/cache&#xff1f; 尝试释放buffer/cache /proc/sys/vm/drop_caches dirty_ratio dirty_background_ratio dirty_writeback_centisecs dirty_expire_centisecs drop_caches page-cluster swap…

罗技G29游戏方向盘试玩拆解,带震动力反馈

1.正好有时间记录下 自己的爱好 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 2.拆解 3.2个大电机 4.主控芯…

智能模型新篇章:RAG + Fine-Tuning 混合增强策略

一、前言 在之前的探讨中&#xff0c;我们已经分别深入了解了RAG&#xff08;检索增强生成&#xff09;和 Fine-tuning&#xff08;微调&#xff09;这两种优化大型语言模型的方法&#xff0c;探讨了它们在不同业务场景下的适用性、优势及局限。然而&#xff0c;我们很少讨论将…

深度学习——微积分基础

目录 1、导数和微分 1.1 定义函数&#xff1a; 1.2 趋近过程&#xff1a; 1.3 绘图表示&#xff1a; 2、偏导数 3、梯度 4、链式法则 5、学习心得 在2500年前&#xff0c;古希腊人把一个多边形分成三角形&#xff0c;并把它们的面积相加&#xff0c;才找到计算多边形面积…

【记录39】html element-ui 加载

环境 html使用element-ui组件、用vue框架搭建 方法一&#xff1a; 方法二&#xff08;推荐&#xff09; 将相关资源下载下来&#xff0c;在对应的html文件中相对路径引入。注意&#xff1a;css加载放在js之前

Windows 11 鼠标右键可选择 cmd 命令行选项

** Windows 11 鼠标右键可选择 cmd 命令行选项 ** 在文件夹内打开命令行&#xff0c;只能使用 Windows 自带的 PowerShell &#xff0c; 作为一个 cmd 重度使用用户来说很是折磨&#xff0c;需要打开 cmd 然后切换盘符再 cd 。。。 现在咱们自己创建一个可以打开 cmd 的方法…