文章目录

  • 前言
  • 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 编译时异常和运行时异常的区别

  1. 编译时异常
  • 都是Exception类及其子类
  • 必须显示处理,否则程序就会发生错误,无法通过编译
  1. 运行时异常
  • 都是RuntimeException类及其子类
  • 无需显示处理,也可以和编译时异常一样处理

1.4 Throwable成员方法:返回异常信息方法

2. 怎么处理异常?

2.1 JVM默认处理异常的方式

  1. 如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:
  • 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台
  • 程序停止执行

2.2 try - catch方式处理异常

  • 定义格式
try {可能出现异常的代码;
} catch(异常类名 变量名) {异常的处理代码;
}
  • 执行流程
  1. 程序从 try 里面的代码开始执行
  2. 出现异常,就会跳转到对应的 catch 里面去执行
  3. 执行完毕之后,程序还可以继续往下执行
  • 示例代码
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行代码。
  • 抛出异常和捕获异常的区别?
  1. 抛出异常:如果程序出现了异常,没有办法将具体的异常打印出来,不做任何处理;程序中断。

  2. 捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的日志,程序不中断。

  • 编译异常和运行异常的区别?什么时候要抛出异常?
  1. 编译时异常必须要进行处理,两种处理方案:try…catch …或者 throws,如果采用throws 这种方案, 将来谁调用谁处理 ,处理用到try…catch…捕获或者抛出一层层往上抛,最终抛给虚拟机
  2. 运行时异常可以不处理,出现问题后,需要我们回来修改代码

4. throws和throw的区别

throws

  • 用在方法声明后面,跟的是异常类名
  • 表示抛出异常,由该方法的调用者来处理
  • 表示出现异常的一种可能性,并不一定会发生这些异常

throw

  • 用在方法体内,跟的是异常对象名
  • 表示抛出异常,由方法体内的语句处理
  • 执行 throw 一定抛出了某种异常

总结:

  1. throw 是语句抛出一个异常;throws 是方法抛出一个异常;
  2. throw语法:throw <异常对象>
  3. 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的区别相关推荐

  1. java中的抛出异常throws与throw

    throws与throw throws是方法可能抛出异常的声明.(用在声明方法时,表示该方法可能要抛出异常) 语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{. ...

  2. 22.Java之异常处理(异常介绍,异常体系图一览,运行时异常,编译异常,try-catch方式处理异常,throws异常处理,自定义异常,throws 和 throw 的区别)

    22.1.异常介绍 Java语言中,将程序执行中发生的不正常情况称为 "异常" (开发过程中的语法错误和逻辑错误不是异常) 执行过程中所发生的异常事件分为两大类: Error:Ja ...

  3. 异常处理中throws和throw的区别?

    异常处理中throws和throw的区别? 参考文章: (1)异常处理中throws和throw的区别? (2)https://www.cnblogs.com/suger-4/p/12192418.h ...

  4. java 异常处理的关键字_java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类...

    packagecn.kecheng;importjava.util.Scanner;/**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中通过异常 ...

  5. -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常...

    异常 异常:异常就是Java程序在运行过程中出现的错误. 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象. 其实就是Java对不正常情况进行描述后的对象 ...

  6. Java中throws和throw的区别讲解

    当然,你需要明白异常在Java中式以一个对象来看待. 并且所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,但是一般情况下Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示 ...

  7. Throws和Throw的区别?

    在初学Java异常时,总是被throws和throw搞晕,今天来理一下它们之间的关系. 1.throws 方法名后面跟上 throws Exception 证明这个方法里的语句可能会发生异常,注意是可 ...

  8. Throws和throw的区别,超级简单明了!

    Throwable和Exception的区别 1.Throwable是Exception 的父类,而且Throwable处理的是更为底层的异常,而后者处理的是较为常见的异常,比如我们熟悉的IOExce ...

  9. throws 、throw的区别?

    throws throw的区别? 1.作用不同: throw 用于程序员自行产生并抛出异常, throws 用于声明该方法内抛出了异常: 2.使用的位置不同: throw 位于方法体内部,可以作为单独 ...

最新文章

  1. 通信系统之数字复接技术
  2. html不支持png%3e,关于Adobe Flash CS3无法导入png格式图片的修复方法(真正解决问题)...
  3. python的优缺点有哪些-那么多人选择Python,它的优缺点有哪些?
  4. Spring注解的使用步骤,@Component注解创建的对象名称,常用注解Component、Repository、Service以及Controller的区别
  5. 格式说明_ISO11784/85 FDX-B动物芯片格式写码说明
  6. mysql内置加密函数_MySQL数据库内置加密函数总结
  7. mysql dump hbase_导出mysqldump数据
  8. java包含_【Java】判断字符串是否包含子字符串
  9. TensorFlow strides 参数讨论
  10. mysql数据库105页_MySQL数据库的常见操作
  11. 雅虎 (YAHOO)相册下载工具 Beta1 发布
  12. 人工神经网络matlab啊6,基于MATLAB6.x的BP人工神经网络的土壤环境质量评价方法研究...
  13. 9.1 Servlet容器实例
  14. 数据分析面试【统计学】-----假设检验知识点归纳
  15. 12306订票候补是个坑_12306候补购票好几天了都没兑现成功是不是凉凉了?
  16. 16k Star!一个开源的命令行视频播放器
  17. mac 10.13.6 升级至10.14.6再升级至12.4
  18. 【博学谷学习记录】超强总结,用心分享|js语法基础(一)
  19. 第五章 全连接神经网络
  20. android ----- goldfish内核编译

热门文章

  1. Django 的保姆级快速搭建
  2. 使用DQL命令查询数据一
  3. php tp5生成条形码,thinkPHP框架实现生成条形码的方法
  4. HTML和JSS介绍
  5. 25000linux集群危机怎么样,我是如何在2小时内组建5000+集群服务器僵尸网络的
  6. JavaEE学习日志(六十二): jQuery遍历,jQuery事件,省市联动,左右互选
  7. Excel如何快速将单元格文本倒序
  8. 36个创意广告海报欣赏 | Goodfav 杂志
  9. 简单说说WPS热点怎么关闭
  10. ftp改为sftp_如何在 Linux 系统中如何更改 SFTP 端口