Java --- 异常处理

目录

一、什么是异常

二、异常抛出机制

三、如何对待异常 

四、 Java异常体系 

4.1、Throwable

4.2、Error  

 4.2、Exception

4.2.1、编译时异常 

4.2.2、运行时期异常 

五、异常处理

5.1、捕获异常(try-catch) 

5.1.2、catch中异常处理方式

 5.2、finally使用

5.3、声明抛出异常类型(throws)

六、手动抛出异常

 七、自定义异常


一、什么是异常

指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。异常指的并不是语法错误和逻辑错误。语法错了,编译不通过,不会产生字节码文件,根本不能运行。代码逻辑错误,只是没有得到想要的结果。

二、异常抛出机制

Java中把不同的异常用不同的类表示,一旦发生某种异常,就创建该异常类型的对象,并且抛出(throw)。然后程序员可以捕获(catch)到这个异常对象,并处理;如果没有捕获(catch)这个异常对象,那么这个异常对象将会导致程序终止。 

三、如何对待异常 

对于程序出现的异常,一般有两种解决方法:一是遇到错误就终止程序的运行。另一种方法是程序员在编写程序时,就充分考虑到各种可能发生的异常和错误,极力预防和避免。实在无法避免的,要编写相应的代码进行异常的检测、以及异常的处理,保证代码的健壮性

四、 Java异常体系 

4.1、Throwable

java.lang.Throwable类是Java程序执行过程中发生的异常事件对应的类的根父类 

4.2、Error  

Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。

public class ErrorTest {public static void main(String[] args) {//StackOverflowError:栈溢出错误main(args);}
}

public class ErrorTest {public static void main(String[] args) {//StackOverflowError:栈溢出错误//main(args);//OutOfMemoryError:堆空间溢出byte[] bytes = new byte[1024 * 1024 * 100];//100MB}
}

 4.2、Exception

其它因编程错误或偶然的外在因素导致的一般性问题,需要使用针对性的代码进行处理,使程序继续运行。否则一旦发生异常,程序也会挂掉。

4.2.1、编译时异常 

即checked异常、受检异常):在代码编译阶段,编译器就能明确警示当前代码可能发生(不是一定发生)xx异常,并明确督促程序员提前编写处理它的代码。如果程序员没有编写对应的异常处理代码,则编译器就会直接判定编译失败,从而不能生成字节码文件。通常,这类异常的发生不是由程序员的代码引起的,或者不是靠加简单判断就可以避免的,例如:FileNotFoundException(文件找不到异常)。

@Testpublic void test1(){//ClassNotFoundException//Class.forName("java.lang.String");}

4.2.2、运行时期异常 

 即runtime异常、unchecked异常、非受检异常):在代码编译阶段,编译器完全不做任何检查,无论该异常是否会发生,编译器都不给出任何提示。只有等代码运行起来并确实发生了xx异常,它才能被发现。通常,这类异常是由程序员的代码编写不当引起的,只要稍加判断,或者细心检查就可以避免。

public class ExceptionTest {@Testpublic void test1(){//ArrayIndexOutOfBoundsExceptionint[] arr = new int[5];System.out.println(arr[5]);}@Testpublic void test2(){//NullPointerExceptionString name = null;System.out.println(name.toString());}@Testpublic void test3(){//ClassCastExceptionObject o = new String();Date date = (Date) o;}@Testpublic void test4(){//NumberFormatExceptionString str = "abc";int i = Integer.parseInt(str);}@Testpublic void test5(){//InputMismatchExceptionScanner scanner = new Scanner(System.in);int num = scanner.nextInt();System.out.println(num);}@Testpublic void test6(){//ArithmeticExceptionint num = 3;System.out.println(num / 0);}
}

五、异常处理

5.1、捕获异常(try-catch) 

    @Testpublic void test1(){try {int num = 3;System.out.println(num / 0);} catch (ArithmeticException e) {System.out.println("处理算数异常");}catch (NullPointerException e){System.out.println("处理空指针异常");}catch (RuntimeException e){System.out.println("处理运行时异常");}System.out.println("异常处理完成,程序继续执行");}

注意:catch结构中的异常类型出现父子关系,父类必须在子类下面,否则报错

5.1.2、catch中异常处理方式

三种:1、自己编写输出语句。2、printStackTrace():打印异常的详细信息。3、getMessage():获取发生异常的原因。

@Testpublic void test2(){try {int num = 3;System.out.println(num / 0);} catch (ArithmeticException e) {e.printStackTrace();}catch (NullPointerException e){System.out.println("处理空指针异常");}catch (RuntimeException e){System.out.println(e.getMessage());}System.out.println("异常处理完成,程序继续执行");}

 5.2、finally使用

 @Testpublic void test1(){try {int num = 3;System.out.println(num / 0);}finally {System.out.println("异常处理完成,程序继续执行");}}

 一定要放在finally中主要代码:使用的流或其它需要关闭的资源,防止内存泄漏。

5.3、声明抛出异常类型(throws)

@Testpublic void test2() throws ArithmeticException{int num = 3;System.out.println(num / 0);System.out.println("异常处理完成,程序继续执行");}

六、手动抛出异常

@Testpublic void test3() {int num1 = 3;int num2 = 0;if (num2 > 0){System.out.println(num1 / num2);}else {throw new ArithmeticException("除数必须大于0");}}

 七、自定义异常

class MyException extends Exception {static final long serialVersionUID = 23423423435L;private int idnumber;public MyException(String message, int id) {super(message);this.idnumber = id;}public int getId() {return idnumber;}
}

 

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

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

相关文章

你对SPA单页面的理解,它的优缺点分别是什么?如何实现SPA应用呢?

一、什么是SPA SPA(single-page application),翻译过来就是单页应用SPA是一种网络应用程序或网站的模型,它通过动态重写当前页面来与用户交互,这种方法避免了页面之间切换打断用户体验在单页应用中,所有必…

TCP的三次握手 四次挥手以及TCP的11种状态

三次握手流程: 客户端给服务端发送数据时,数据包中带有一个头,这个头就是前几十个字节,就是下面这张图。从源端口号,目的端口号,一直到序列号,直到Options。第一个包会将这前十几个字节中的SYN置…

12. 完整模型训练套路

12.1 CIFAR 10 model 网络模型 ① 下面用 CIFAR 10 model网络来完成分类问题,网络模型如下图所示。 12.2 DataLoader加载数据集 import torchvision from torch import nn from torch.utils.data import DataLoader# 准备数据集 train_data torchvision.dataset…

C#,《小白学程序》第二课:数组与排序

1 文本格式 /// <summary> /// 《小白学程序》第二课&#xff1a;数组与排序 /// </summary> /// <param name"sender"></param> /// <param name"e"></param> private void button2_Click(object sender, EventArgs …

RT-Thread内核学习

内核框架 内核是操作系统最基础也是最重要的部分&#xff0c;内核处于硬件层之上&#xff0c;内核部分包括内核库、实时内核实现。 内核库是为了保证内核能够独立运行的一套小型的类似C库的函数实现子集。这部分根据编译器不同自带C库的情况也会不同。 当使用GNU GCC编译器时&…

Vue.js中,router和route

<div class"search">{{$route.params.things}}<van-nav-bar fixed title"商品列表" left-arrow click-left"$router.go(-1)" /><van-searchreadonlyshape"round"background"#ffffff"value"手机"sh…

Unity Mac踩坑日记

1、读取外部文件夹使用IO&#xff0c;读取StreamingAsset或者Unity定义文件夹或者服务器文件使用www或者UnityRequest 2、mac下使用www 需要添加前缀&#xff1a;"file://" 3、Mac下的Rider很好用&#xff0c;断点调试也很方便 4、改变文件编码格式&#xff0c;使…

kotlin如何接收前端传递过来的数据

Kotlin 可以使用 Spring Boot 等框架来接收前端传递过来的数据。 在 Spring Boot 中&#xff0c;你可以使用 RequestBody 注解来将前端传递的 JSON 格式数据转换为相应的 Kotlin 对象。 示例代码&#xff1a; RestController RequestMapping("/api") class UserCo…

Redis原理剖析

一、Redis简介 Redis是一个开源的&#xff0c;基于网络的&#xff0c;高性能的key-value数据库&#xff0c;弥补了memcached这类key-value存储的不足&#xff0c;在部分场合可以对关系数据库起到很好的补充作用&#xff0c;满足实时的高并发需求。 Redis跟memcached类似&#…

C++数据结构学习——栈

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、栈二、C语言实现1.声明代码2.实现增删查改代码3.测试代码 总结 前言 栈&#xff08;Stack&#xff09;是计算机科学中一种常见的数据结构&#xff0c;它是…

菜鸟教程《Python 3 教程》笔记(6):列表

菜鸟教程《Python 3 教程》笔记&#xff08;6&#xff09; 6 列表6.1 删除列表元素6.2 列表函数和方法6.2.1 max()、min()6.2.2 reverse()6.2.3 sort() 6 列表 出处&#xff1a; 菜鸟教程 - Python3 列表 6.1 删除列表元素 >>> list [Google, Runoob, 1997, 2000]…

前端需要理解的性能优化知识

优化的目的是展示更快、交互响应快、页面无卡顿情况。 1 性能指标 2 分析方法 使用 ChromeDevTool 作为性能分析工具来观察页面性能情况。其中Network观察网络资源加载耗时及顺序&#xff0c;Performace观察页面渲染表现及JS执行情况&#xff0c;Lighthouse对网站进行整体评分…

01、前端使用 thymeleaf 后,视图页面找不到---Cannot resolve MVC View ‘xxxxx前端页面‘

Cannot resolve MVC View ‘xxxxx前端页面’ 没有找到对应的mvc的前端页面。 代码&#xff1a;前端这里引入了 thymeleaf 模板 解决&#xff1a; 需要添加 thymeleaf 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>s…

QT通过ODBC连接GBase 8s数据库(Windows)示例

示例环境&#xff1a; 操作系统&#xff1a;Windows 10 64位数据库及CSDK版本&#xff1a;GBase 8s V8.8_3.0.0_1 64位QT&#xff1a;5.12.0 64位 1&#xff0c;CSDK安装及ODBC配置 1.1&#xff0c;免安装版CSDK 下载免安装版的CSDK驱动&#xff0c;地址&#xff1a;https:…

对于库存扣减问题的一些思考

最近在做公司WMS库存模块的需求&#xff0c;所以网上查阅了一些库存扣减相关的文章学习了一下。 方案 我们先来看看都有哪些扣减方案&#xff0c;各自优缺点给 方案一&#xff1a;查出库存&#xff0c;然后减去扣减数量&#xff0c;再更新回数据库 select stock_num from t…

利用 IDEA IDE 的轻量编辑模式快速查看和编辑工程外的文本文件

作为程序员, 我们都知道 IDE 的很好用的, 它的文本编辑器功能也非常的强大, 用起来非常便捷. 在长年累月的使用中, 我们也变得对其非常熟悉, 以致于使用起其它简单地轻量级的文本编辑器来, 比如什么记事本, Notepad, UltraEdit 等等呀, 觉得既不方便又不熟悉. 关键是很多的操作…

Vue-4: 组件通信学习

Vue-4 文章目录 Vue-401-scoped组件的样式冲突scoped原理 02-data是一个函数代码 03-组件通信组件关系分类&#xff1a;父子关系组件的使用 04-props详解01-prop作用特点 02-props 校验03-prop & data 单向数据流 05-小黑记事本&#xff08;组件版&#xff09;核心步骤添加…

Linux:基础指令

目录 Linux的基础指令 1.ls指令 2.pwd指令 3.cd指令 4.touch指令 5.mkdir指令 6.rmdir指令和rm指令 7.man指令&#xff08;重要&#xff09; 8.cp指令&#xff08;重要&#xff09; 9.mv指令&#xff08;重要&#xff09; 10.cat指令 11.nano指令 12.more指令 13.…

Go 1.21新增的 maps 包详解

maps 包提供了几个非常有用的用于操作 map 类型&#xff08;任何类型的 map&#xff09;的函数&#xff0c;本文接下来详细介绍下这几个函数。 maps.Clone 定义如下&#xff1a; func Clone[M ~map[K]V, K comparable, V any](m M) M 返回 m 的一个副本&#xff0c;因为新的…

PHP8的匿名函数-PHP8知识详解

php 8引入了匿名函数&#xff08;Anonymous Functions&#xff09;&#xff0c;它是一种创建短生命周期的函数&#xff0c;不需要命名&#xff0c;并且可以在其作用域内直接使用。以下是在PHP 8中使用匿名函数的知识要点&#xff1a; 1、创建匿名函数&#xff0c;语法格式如下&…