什么是异常?为什么要抛出异常?throws和throw的区别
文章目录
- 前言
- 1. 异常是什么?
- 1.1 概述:异常就是程序出现了不正常的情况
- 1.2 体系结构
- 1.3 编译时异常和运行时异常的区别
- 1.4 Throwable成员方法:返回异常信息方法
- 2. 怎么处理异常?
- 2.1 JVM默认处理异常的方式
- 2.2 try - catch方式处理异常
- 2.3 throws方式处理异常
- 3. 为什么要抛出异常?什么时候要抛出异常?
- 4. throws和throw的区别
前言
在我们刚开始学习java时候,总是会有一点点困惑。什么是异常?怎么处理异常?为什么要抛出异常?什么时候要抛出异常?这些问题总是有点困惑,下面带大家总结一下,说的不好的地方请大家指教。
1. 异常是什么?
1.1 概述:异常就是程序出现了不正常的情况
1.2 体系结构
1.3 编译时异常和运行时异常的区别
- 编译时异常
- 都是Exception类及其子类
- 必须显示处理,否则程序就会发生错误,无法通过编译
- 运行时异常
- 都是RuntimeException类及其子类
- 无需显示处理,也可以和编译时异常一样处理
1.4 Throwable成员方法:返回异常信息方法
2. 怎么处理异常?
2.1 JVM默认处理异常的方式
- 如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:
- 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台
- 程序停止执行
2.2 try - catch方式处理异常
- 定义格式
try {可能出现异常的代码;
} catch(异常类名 变量名) {异常的处理代码;
}
- 执行流程
- 程序从 try 里面的代码开始执行
- 出现异常,就会跳转到对应的 catch 里面去执行
- 执行完毕之后,程序还可以继续往下执行
- 示例代码
public class ExceptionDemo01 { 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]); System.out.println("这里能够访问到吗"); } catch (ArrayIndexOutOfBoundsException e) { // System.out.println("你访问的数组索引不存在,请回去修改为正确的索引"); e.printStackTrace(); } }
}
2.3 throws方式处理异常
- 格式
public void 方法() throws 异常类名 { }
- 示例代码
/*throws 异常类名;这个格式是跟在方法的括号后面的*/
public class ExceptionDemo {public static void main(String[] args) {System.out.println("开始");
// method();try {method2();}catch (ParseException e) {e.printStackTrace();}System.out.println("结束");}//编译时异常public static void method2() throws ParseException {String s = "2048-08-09";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date d = sdf.parse(s);System.out.println(d);}//运行时异常public static void method() throws ArrayIndexOutOfBoundsException {int[] arr = {1, 2, 3};System.out.println(arr[3]);}}
3. 为什么要抛出异常?什么时候要抛出异常?
- 为什么要捕获异常?
编译时程序有可能会出现异常,如果出现异常,程序就会中断,但是你不想程序中断的话,就可以选择
捕获异常,做出处理,让程序可以运行下去。
例子:比如程序中有3行代码,第2行有异常。
- 如果不处理第1行代码的异常,那么第3行代码就执行不了;
- 如果处理的第2行代码的异常后,程序就可以继续执行第3行代码。
- 抛出异常和捕获异常的区别?
抛出异常:如果程序出现了异常,没有办法将具体的异常打印出来,不做任何处理;程序中断。
捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的日志,程序不中断。
- 编译异常和运行异常的区别?什么时候要抛出异常?
- 编译时异常必须要进行处理,两种处理方案:try…catch …或者 throws,如果采用throws 这种方案, 将来谁调用谁处理 ,处理用到try…catch…捕获或者抛出一层层往上抛,最终抛给虚拟机
- 运行时异常可以不处理,出现问题后,需要我们回来修改代码
4. throws和throw的区别
throws
- 用在方法声明后面,跟的是异常类名
- 表示抛出异常,由该方法的调用者来处理
- 表示出现异常的一种可能性,并不一定会发生这些异常
throw
- 用在方法体内,跟的是异常对象名
- 表示抛出异常,由方法体内的语句处理
- 执行 throw 一定抛出了某种异常
总结:
- throw 是语句抛出一个异常;throws 是方法抛出一个异常;
- throw语法:throw <异常对象>
- throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]
public class ThrowTest {public static void main(String[] args) {try {// 调用声明抛出 Checked 异常的方法,要么显式捕获该异常// 要么在 main 方法中再次声明抛出throwChecked(-3);} catch (Exception e) {System.out.println(e.getMessage());}// 调用声明抛出 Runtime 异常的方法既可以显式捕获该异常// 也可不理会该异常throwRuntime(3);}public static void throwChecked(int a) throws Exception{if (a > 0){//自行抛出 Exception 异常//该代码必须处于 try 块里,或处于带 throws 声明的方法中throw new Exception("a 的值大于 0,不符合要求");}}public static void throwRuntime(int a){if( a > 0) {// 自行抛出 RuntimeException 异常,既可以显式捕获该异常// 也可完全不理会该异常,把该异常交给该方法调用者处理throw new RuntimeException("a 的值大于 0,不符合要求");}}
}
什么是异常?为什么要抛出异常?throws和throw的区别相关推荐
- java中的抛出异常throws与throw
throws与throw throws是方法可能抛出异常的声明.(用在声明方法时,表示该方法可能要抛出异常) 语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{. ...
- 22.Java之异常处理(异常介绍,异常体系图一览,运行时异常,编译异常,try-catch方式处理异常,throws异常处理,自定义异常,throws 和 throw 的区别)
22.1.异常介绍 Java语言中,将程序执行中发生的不正常情况称为 "异常" (开发过程中的语法错误和逻辑错误不是异常) 执行过程中所发生的异常事件分为两大类: Error:Ja ...
- 异常处理中throws和throw的区别?
异常处理中throws和throw的区别? 参考文章: (1)异常处理中throws和throw的区别? (2)https://www.cnblogs.com/suger-4/p/12192418.h ...
- java 异常处理的关键字_java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类...
packagecn.kecheng;importjava.util.Scanner;/**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中通过异常 ...
- -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常...
异常 异常:异常就是Java程序在运行过程中出现的错误. 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象. 其实就是Java对不正常情况进行描述后的对象 ...
- Java中throws和throw的区别讲解
当然,你需要明白异常在Java中式以一个对象来看待. 并且所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,但是一般情况下Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示 ...
- Throws和Throw的区别?
在初学Java异常时,总是被throws和throw搞晕,今天来理一下它们之间的关系. 1.throws 方法名后面跟上 throws Exception 证明这个方法里的语句可能会发生异常,注意是可 ...
- Throws和throw的区别,超级简单明了!
Throwable和Exception的区别 1.Throwable是Exception 的父类,而且Throwable处理的是更为底层的异常,而后者处理的是较为常见的异常,比如我们熟悉的IOExce ...
- throws 、throw的区别?
throws throw的区别? 1.作用不同: throw 用于程序员自行产生并抛出异常, throws 用于声明该方法内抛出了异常: 2.使用的位置不同: throw 位于方法体内部,可以作为单独 ...
最新文章
- 通信系统之数字复接技术
- html不支持png%3e,关于Adobe Flash CS3无法导入png格式图片的修复方法(真正解决问题)...
- python的优缺点有哪些-那么多人选择Python,它的优缺点有哪些?
- Spring注解的使用步骤,@Component注解创建的对象名称,常用注解Component、Repository、Service以及Controller的区别
- 格式说明_ISO11784/85 FDX-B动物芯片格式写码说明
- mysql内置加密函数_MySQL数据库内置加密函数总结
- mysql dump hbase_导出mysqldump数据
- java包含_【Java】判断字符串是否包含子字符串
- TensorFlow strides 参数讨论
- mysql数据库105页_MySQL数据库的常见操作
- 雅虎 (YAHOO)相册下载工具 Beta1 发布
- 人工神经网络matlab啊6,基于MATLAB6.x的BP人工神经网络的土壤环境质量评价方法研究...
- 9.1 Servlet容器实例
- 数据分析面试【统计学】-----假设检验知识点归纳
- 12306订票候补是个坑_12306候补购票好几天了都没兑现成功是不是凉凉了?
- 16k Star!一个开源的命令行视频播放器
- mac 10.13.6 升级至10.14.6再升级至12.4
- 【博学谷学习记录】超强总结,用心分享|js语法基础(一)
- 第五章 全连接神经网络
- android ----- goldfish内核编译
热门文章
- Django 的保姆级快速搭建
- 使用DQL命令查询数据一
- php tp5生成条形码,thinkPHP框架实现生成条形码的方法
- HTML和JSS介绍
- 25000linux集群危机怎么样,我是如何在2小时内组建5000+集群服务器僵尸网络的
- JavaEE学习日志(六十二): jQuery遍历,jQuery事件,省市联动,左右互选
- Excel如何快速将单元格文本倒序
- 36个创意广告海报欣赏 | Goodfav 杂志
- 简单说说WPS热点怎么关闭
- ftp改为sftp_如何在 Linux 系统中如何更改 SFTP 端口