| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 【JAVA SE】java中的异常 -> 正文阅读 |
|
[移动开发]【JAVA SE】java中的异常 |
目录 什么是异常?异常在我们写代码是特别常见,因为程序员大部分时间都在修复bug,在java中通过throwable顶层类又可以分为两个,一个是Error(错误),一个是Exception(异常)。 Error(错误)?: Error与异常不同的是,错误并不能处理,而是程序员造成的问题,比如语法错误那就要程序员检查自己的语法,比如结果错误(StackOverflowError和OutOfMemoryError Exception(异常)?: 这个可以通过一些方式来处理,比如我们后面要讲的throws(声明异常),try{}catch{}(处理异常)这都是我们处理异常的方式,而异常又分为受查异常(编译时异常)和非受查异常(运行时异常RuntimeException)。 编译时异常:程序不能通过编译,就是编译时异常,比如:clone时必须要通过throws来声明异常 运行时异常:指的是程序能通过编译,但是运行时出现异常。比如:NullPointerException、 以上的异常我们都能进行处理解决,但是错误需要程序员自己检查代码。 异常的处理我们有两种方式来来进行处理: 一种是事前防御型:
事前防御型就是每一步都要检查是否出现了错误,这样的缺点就是代码显得很混乱,效率低下; 一种是事后认错型:
这种做法就是将所有代码可能出现的异常全部放在try里,如果发现异常在进行捕获,这种就是先进行操作遇到问题在进行处理。 我们常常使用第二种trycatch这样使代码简洁,清晰,效率更高。 异常的抛出如果哪段代码不符合你的预期,这段代码我们就要抛出异常,java中我们通过关键字throw来抛出异常。 语法是? throw new 异常(你要抛出的异常)
看这段代码:比如我们10这个数字不符合我们程序的预期,所以要抛出异常,我们就可以这样跑出:?throw new RuntimeException("a==10不符合预期,抛出这个异常"); 处理异常我们通常有两种方式来处理异常,一种是通过throws声明异常,一种是通过try{}catch{}通过try检查代码块里是否有异常,如果有异常catch就进行捕获,如果没有异常就正常下面的代码。 throws声明异常语法:throws 异常,异常,异常......(可声明多个异常)
大家都知道这里访问100下标是数组越界异常: ?接下来通过throws来声明异常: ?还是会报错。 当我们也给主函数声明异常: ?答案依然会报错。 所以从这里我们得出了一个结论:通过throws只是告诉编译器,这个方法可能会发生这个异常,只是声明,但是并没有进行处理异常。我们还可以发现,如果某一个方法出现了异常,那就会看这个方法有没有处理异常,如果没有处理就去看一看上层调用者有没有处理异常。这里就是func只是声明了异常,并没有进行处理异常,然后去上层调用者有没有处理异常(也就是main方法)还是没有处理异常,最后就交给JVM来处理进行终止程序。声明的异常必须是 Exception 或者 Exception 的子类。 那怎么进行处理异常呢??? 那就要通过我们接下来讲解的try{}catch来进行处理异常。 捕获异常try{}catch(){}:在Java我们利用try{}catch{}来处理异常; 语法:
我们先来讲一下try{}catch(){}
我们使用try{}catch(){}就可以对异常进行处理,既可以在方法中处理异常也可以在main方法中处理异常,同时这里throws虽然没有什么用处,但是可以清晰的告诉程序员,这个方法未来可能会发生这个异常,所以还是有必要的。
当捕获异常成功的时候,后面的业务代码正常执行,如果没有捕获那就不会执行。
?当try里检查到异常,catch就会捕获,计算这个异常后面还有异常也不会执行。
throws只是声明异常,并没有处理异常,我们要通过try{}catch(){}来处理异常。
?当catch捕获的异常类型与发生异常类型不符合,就不会被捕获,就继续往外抛异常知道JVM收到后终止程序
?当发生多种异常的时候,那就要多种catch来捕获,多种异常,多次捕获。
?Exception是所有类的父类不能在前面捕获,而是应该放在最末尾进行收尾工作。
catch 进行类型匹配的时候, 不光会匹配相同类型的异常对象, 也会捕捉目标异常类型的子类对象
我们还可以利用printStackTrace来打印错误信息。 ?finally:finally经常与try{}catch(){}进行一起使用,finally主要是进行资源的清理,的扫尾工作,且finally一定会被执行。 ?——————————————————————————————————————————
?答案并不是我们想的return-1,执行结束,而是return9,我们这里可以理解为finally的9将catch里的-1覆盖。所以finally里面的代码是一定会执行的。 异常的处理流程我的理解: 第一步检查try里面的代码里是否有异常,如果有异常catch就进行捕获,如果没有异常接着往下执行,这里catch如果没有捕获到就看一看上层调用者有没有处理,有处理就进行处理,没有处理就交给JVM终止程序。如果catch捕获到了,下面正常的业务代码正常执行。最后无论catch是否捕获到了异常,finally里面的代码都会执行。 官方:
自定义异常在我们做很大型的项目的时候,我们就会发现,我们遇到的异常,在Java中的内置异常并没有,所以我们就需要自己定义一个异常,来维护我们实际中遇到的异常。 java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时需要维护符合我们实际情况的异常结构 在Java中自己声明异常,不是说你写了个异常的名字就是一个异常,而是在你自己定义的异常需要取继承原有的内置异常。 我们通过一个登陆的代码来讲解自定义异常:
自定义异常:
这就是我们定义的两个异常。 通过继承Exception来定义两个异常。 一般我们自定义异常要继承Exception或者是RunTimeException,定义其他的也可以。
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 0:06:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |