Java常用类:异常看这篇就够了

Materials Studio与LAMMPS联合作战:如何用msi2lmp.exe完美转换聚合物模型(含PCFF力场配置) 本文详细解析了如何利用msi2lmp.exe工具将Materials Studio中的聚合物模型高效、准确地转换为LAMMPS可识别的data文件,并重点配置PCFF力场。文章提供了从MS模型构建、文件导出到命令行转换、参数调整及转换后验证的全流程实战指南与避坑技巧,旨在帮助研究者解决模型转换中的常见问题,实现跨平台分子动力学模拟的无缝衔接。 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

Throwable,Exception,Error关系

Java中的异常机制可以便于开发人员定位程序中的错误,那么如何优雅的抛出异常呢?首先要清楚Java中的异常类,以及它们之间的关系。
在这里插入图片描述
异常主要分为两大类:Exception和Error,两个都继承Throwable类

public class Throwable implements Serializable
public class Error extends Throwable
public class Exception extends Throwable

Exception

Exception类是开发中经常会使用到的类,分为编译时异常和运行时异常。
编译时异常指:程序员在撸代码时,就要处理的异常,编译软件会以红色波浪线提示此处的代码需要手动抛出异常,不然编译不会通过;

File file = new File("/User/DownLoad/1.txt");
//这里就会爆红,只是我复制出来,不在idea中,看不到红色波浪线
FileInputStream io = new FileInputStream(file);
常见编译时异常抛出原因
FileNotFoundException文件有可能不存在,就会抛出此异常
ClassNotFoundException找不到具体指定类的定义

运行时异常指:在运行时才能发现的异常,编译期无法判断代码是否会有异常,也就是大家耳熟能详的bug,基本上都是运行时异常,因为编译期的异常只要不是红绿色盲基本上都能够try catch或是throw掉。

常见运行时异常抛出原因
NullPointerException空指针
ArrayIndexOutOfBoundsException数组下标越界

Error

Error一般是系统级别的,由Java虚拟机生成并抛出,程序内部无法捕获。常见的Error主要由程序进入死循环,内存泄露,栈溢出等等,这类异常只能通过分析代码,找出原因并优化代码。

如何捕获异常

1.try catch finally

当知道哪段代码会抛异常,或者有编译时异常时,通常我们会使用try catch finally来处理异常,这三个关键字不能单独出现,可以try…catch,try…finally,try…catch…finally,当然如果有多个异常的话,catch可以有多个(注意catch的顺序应该是子类在前,父类在后,因为当catch块有多个时,异常匹配到其中一个程序就停止了)。
finally是不管有没有抛异常都会执行的代码块,一般会把释放连接、释放锁等操作放在该代码块中,不建议在finally中使用return,这样就覆盖try和catch中的return,除非你想返回的结果就是finally中的。

		try{
            int i= 1/0;
        }catch (ArithmeticException e1){
            System.out.println("除数不能是0");
        }
        catch (Exception e){
            System.out.println(e);
        }finally {
            System.out.println("finally");
        }

结果:

除数不能是0
finally

2. throw

如果在当前方法中我们并不想处理这个异常,那么就把异常抛出,让调用方法者处理异常,在mvc中,往上抛到controller层就不能继续抛出了,需要使用try…catch捕获异常,封装异常信息返回前端。

/*
编译时异常通过在方法后面throws关键字,将异常往上抛出,
调用该方法的处理异常
*/
public static void test() throws FileNotFoundException {
        File file = new File("/User/Download/1.txt");
        FileInputStream io = new FileInputStream(file);
        
    }
public static void main(String[] args) {
        try {
        	/*因为test会抛出异常,那么就需要处理,从这里也可以推测
        	编译时异常方法,就是在方法中把异常抛出来,我们在使用
        	的时候就必须处理,要么继续往上抛,要么try...catch*/
            test();
        } catch (FileNotFoundException e) {
            System.out.println("文件不存在!!");
        }
    }
/*字节流的源码,可以看到该方法会抛出异常,所以在调用该方法时我们需要手动
处理异常
*/
public FileInputStream(File file) throws FileNotFoundException {
        String name = (file != null ? file.getPath() : null);
        SecurityManager security = System.getSecurityManager();
        if (security != null) {
            security.checkRead(name);
        }
        if (name == null) {
            throw new NullPointerException();
        }
        if (file.isInvalid()) {
            throw new FileNotFoundException("Invalid file path");
        }
        fd = new FileDescriptor();
        fd.attach(this);
        path = name;
        open(name);
    }

3.自定义异常

有些业务层面的异常,比如用户信息不存在,该用户身份不能进行此操作等等。这类信息其实不算严格意义上的异常,只是不满足业务要求,像这类信息我们可以通过自定义异常来处理。

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

    

    public MyException(String message, Throwable cause) {
        super(message, cause);
    }



    public MyException(Throwable cause) {
        super(cause);
    }

    protected MyException(String message, Throwable cause,
                        boolean enableSuppression,
                        boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
//一般将异常信息定义为枚举
public enum MyExceptionEnum {
    USER_NOT_EXIST(201,"用户不存在");
    private Integer code;
    private String msg;
    MyExceptionEnum(Integer code,String msg){
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

public static void test() throws MyException {
        UserDO userDO = userMapper.selectByPrimaryKey(1);
        if(userDO ==null){
        	/*当用户不存在时,就抛出自定义异常,然后在controller层
        	捕获,返回错误信息给前端
        	*/
            throw new MyException(MyExceptionEnum.USER_NOT_EXIST.getMsg());
        }
    }

4.Springmvc全局异常

Spring有一个全局异常处理器ExceptionHandler,只要在controller层将异常声明为全局异常,在service层抛出的全局异常,不需要在controller层显式的使用try…catch捕获,springmvc会自动封装model返回给前端。
需要注意的是自定义异常需要继承的是RuntimeException

public class MyException extends RuntimeException {
    public MyException() {
        super();
    }

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



    public MyException(String message, Throwable cause) {
        super(message, cause);
    }



    public MyException(Throwable cause) {
        super(cause);
    }

    protected MyException(String message, Throwable cause,
                        boolean enableSuppression,
                        boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }

}

枚举类的定义不变,抛出的方式也不变,不过需要新增一个类定义全局异常

@RestControllerAdvice(annotations = RestController.class)
@Slf4j
public class ControllerExceptionHandleAdvice {
    
    @ExceptionHandler(MyException.class)
    public ResultVO myExceptionHandler(HttpServletResponse response,
                                         MyException e) {
        log.error("dubbo业务处理异常 {}", e.getMessage(), e);
        response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
        return ResultVO.fail(e.getMessage());
    }
}

这样定义以后,controller就不要捕获异常,在哪里抛出就直接返回给前端

ubuntu17.04 UHD 驱动出错 ubuntu 17.04 源码安装UHD 阅读详情

相关推荐

CSV文件输入到simulink中

将示波器波形和数据CSV文件保存下来进行数据分析。将波形绘制到simulink中

yay0923的博客 5325

Java | 异常类【万字详解,看过来】

万字详解Java异常类,带你感受异常类在开发中的重要性

做技术人 · 产优质博客 · 找好工作 7270

波动性GARCH模型与波动率预测(代码+结果分析)

本文介绍的ARCH、GARCH模型可以刻画出随时间变化的条件异方差。

celiaweiwei的博客 2万+

全局异常处理--Java实战项目篇

在我们开发项目的过程中难免会遇到要抛出异常,对异常进行处理。该文章我们就来聊聊全局异常处理该怎么做,以及代码如何实现。我们这里用添加员工功能模块的代码来引出问题。一步步的发现问题和解决问题。

心态的博客 3603

告别版本过低提示!微信3.9登录修复与聊天记录无缝迁移全攻略

本文详细解析了微信3.9版本过低提示的根源,并提供了完整的修复方案和聊天记录迁移指南。通过专用修复工具绕过版本检测,以及新旧版本聊天记录目录对比,帮助用户实现无缝迁移。特别提醒备份重要数据,确保操作安全。

weixin_42535461的博客 3108

VTK基础教程(1)- vtkPolyData 介绍

目录 VTK的编译与环境搭建 VTK一般渲染流程 VTK数据类型-vtkPolyData 使用vtk自带的多边形数据 使用自己创建的数据 添加顶点颜色 添加面颜色 VTK的编译与环境搭建 这部分目前已经有了大佬做了成熟的傻瓜式配置,大家可以参考这篇文章:VTK+VS2019(或其他版本均可) 傻瓜式一站式 配置_Nancy_fairy的博客-优快云博客_vs2019 vtk VTK一般渲染流程 这部分的介绍也很多,大家可以参考这篇文章:VTK笔记-了解VTK_黑山老妖的博客.

qq_35769071的博客 9052

Java中统一异常处理(全局异常、自定义异常)

我们在搭建模块时在common模块新建CustomException类。/*** 自定义全局异常类**/ @Data @ApiModel(value = "自定义全局异常类") //Swagger注解 public class CustomException extends RuntimeException {@ApiModelProperty(value = "异常状态码") private Integer code;/*** 通过状态码和错误消息创建异常对象*} /**

qq_43102730的博客 3955

在STM32上运行小波变换及神经网络算法——(一)单片机中小波算法编写

在单片机上实现离散小波变换的C代码,通过确定信号长度、小波分解层数、小波基名称后进行编写,并改写成了方便调用的结构体格式。

weixin_45400202的博客 986

为什么会出现ConcurrentModificationException异常,如何解决?

在前面一篇文章中提到,对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常。下面我们就来讨论以下这个异常出现的原因以及解决办法。 1、异常出现的原因 先看下面这段代码: public class Test { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList

掘客DIGGKR 2952

SolidWorks参数化建模实战:从规则定义到智能装配

本文深入探讨SolidWorks参数化建模的实战技巧,从规则定义到智能装配的全流程。通过实际案例展示如何提升设计效率300%,确保一致性,并加速系列化开发。重点解析草图阶段植入设计意图、装配体级参数化及高级技巧,帮助工程师掌握三维建模的核心竞争力。

weixin_29306317的博客 416

PADS VX2.7学习记录05-PADS Layout设计文件Gerber等输出整理

在“PDF Document”栏中,依次选中除REF-TOP和REF-BOT之外的文件,单击图标,将其余PDF Document文件进行删除,如图所示。然后单击【生成PDF】按钮,即可创建一份PDF格式的位号图。

tianpu2320959696的博客 1023

java全局异常捕捉_Java全局异常捕捉

1.场景还原在项目开发中,对于各种异常都有不同的报错提示或策略,无疑对于用户或者开发来说,是一个很好的用户体验;如何在java定义一个全局异常捕捉呢?2.实现方案2.1 自定义一个业务异常类@Setter@Getterpublic class BizException extends RuntimeException {private static final long serialVersion...

weixin_30529479的博客 704

09、Flutter FFI Dart Native API

本文介绍了 Dart Native API 的基本用法,解决了 Dart 与 C 异步通讯的问题

eieihihi的专栏 4395

【Java异常】面试官问你Java中的异常,这篇就够了

介绍了Java中的异常处理机制,涵盖了从基础概念到高级技巧的各个方面。文章首先解释了Java异常的本质和层次结构,Java中的常见异常:NullPointerException、IndexOutOfBoundsException、ClassNotFoundException等。对于每种异常,文章都提供了具体示例和防范措施。异常处理技巧,包括try-catch块的使用、finally块的重要性、以及Java 7引入的try-with-resources语句。

随喜 2162

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

学习Java异常,吃透这篇足够

文章目录一、前言二、 一、前言 这篇技术博客是我复习尚硅谷JavaSE教程做的笔记总结,方便大家的学习同时也方便自己。博客内容非复制粘贴,纯手写。如果对你有帮助,欢迎点赞评论收藏! 二、 ...

保持学习 7414

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

蓝旭预习博客2:Java异常类、常用类、容器与泛型

自定义异常直接继承Exception就可以完成自定义异常:public class XXXXException extends Exception 或者RuntimeException{添加一个空参构造方法添加一个带异常信息的构造方法。

zhiyelee的博客 1074

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java异常类和常用类

异常:异常就是代表程序出现的问题。定义异常类写继承关系空参构造带参构造自定义异常的意义:为了让控制台的报错信息更加地见名知意。Date类是JDK写好的Javabean类,用来描述时间,精确到毫秒。利用空参构造创建的对象,默认表示系统当前时间。利用有参构造创建的对象,表示指定的时间。Calendar代表了系统当前时间的日历对象,可以单独修改,可以获取时间中的年,月,日。Calendar类是一个抽象类,不能直接创建对象。

Sherlocko的博客 269

Java的异常类、常用类

Java的异常类、常用类及容器简介 文章目录Java的异常类、常用类及容器简介一、异常1、异常简介2、异常(Exception)与错误(Error)的区别3、常用的异常类 常见的运行时异常: 常见的非运行时异常:4、异常处理机制 try-catch throws 和 throwthrows 声明异常throw 抛出异常5、自定义异常类二、常用类1、String类构造方法常见成员方法2、StringTokenizer类3、Scanner类4、StringBuffer类5、Date类与Calendar类6、M

Lin_02200059的博客 2085

Java后端学习系列(3):Java异常处理与常用类库

ArrayList:动态数组,相较于普通数组,它可以方便地进行元素的添加、删除和修改等操作。示例如下:HashMap:用于存储键值对数据,能根据键快速查找对应的值,在很多场景中用于数据的映射和缓存等。示例::提供了一系列对集合进行操作的静态方法,比如对集合进行排序、反转等操作。

Azperk的博客 977

Java异常类 常用类 容器 泛型

提示:浅浅自学一波java异常类 常用类 容器 泛型多有疏漏,敬请指出Thanks♪(・ω・)ノ当我们在输入成绩,输入工资,取款的时候,往往都有一个范围,而这个范围不是JVM能够识别的,因此在输入的时候就容易出错,因此在这些时候JDK中的异常无法满足我们的需求,我们只能自己定义异常类。1、自定义异常类继承Exception类/*** 自定义异常类*///异常信息//构造函数//获取异常信息,由于构造函数调用了super(message),不用重写此方法//}

Dadashuai12345的博客 642

java异常,常用类,List集合

random.nextFloat()可以生成0-1的浮点随机数,*500可以生成0-500的浮点随机数,int可以使浮点数向上取整可以生成0-499的浮点整数。Calendar:它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。2、 集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型。

ZHONGERMAOMAO的博客 1607

【JAVA凝气】异常篇

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你用System.out.println(11 / 0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException 的异常。(1)编译时异常:Java.lang.Exception(2)运行期异常:Java.lang.RuntimeException(3)错误:Java.lang.Error。

程序猿追的博客 3万+

Java异常_java中的异常,零基础入门到精通,收藏这篇就够了

Java 提供的内置异常(如)主要用于描述通用错误,而实际开发中常需要“业务专属异常”(如“用户不存在异常”“余额不足异常”),此时需自定义异常。自定义异常能让错误信息更贴合业务场景,便于问题定位和分类处理。继承父类:根据业务需求选择继承Exception(可查异常,编译期强制处理)或(不可查异常,编译期不强制处理);提供构造器:至少实现“无参构造器”和“带异常信息的构造器”,方便传递错误描述;若需传递根因异常,需额外实现“带异常信息和根因的构造器”;扩展字段(可选)

Libra1313的博客 1342

Java异常类 常用类 容器 泛型预习

创建继承自Exception或的类。

2503_91288429的博客 380

Java异常处理与常用类

Java中的对于程序的异常分为两种情况: 错误(Error) 异常(Exception) Error:错误通常是系统级别的问题 Exception:异常通常是程序再运行期间,或则编译期间由编译器抛出的一些可以被程序员处理的代码上的问题 Throwable Throwable是Java中错误和异常的顶级父类,以下是Throwable和Error,Exception之间的关系 Java中的所有错误从Error类继承,并且绝大多数类名称后缀以Error结尾,而异常则从Exception类继承,都是以Excep

weixin_44001941的博客 1381

基础篇:深入解析JAVA异常

基础篇:深入解析JAVA异常

潜行前行的专栏 3453
上一篇: Java常用类:Enum类
下一篇: Java常用类:ThreadLocal
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值