(七)异常处理

异常

异常的体系结构

java.lang.Throwable|-----java.lang.Error:一般不便携针对性的代码进行处理|-----java.lang.Exception:可以进行异常的处理|-----编译时异常(checked|-----IOException|-----FileNotFoundException|-----ClassNotFoundException|-----运行时异常(unchecked,RuntimeException)|-----NullPointerException|-----ArrayIndexOutOfBoundsException|-----ClassCastException|-----NumberFormatException|-----InputMismatchException|-----ArithmeticException

异常体系结构

从程序执行过程,看编译时异常和运行时异常

  • 编译时异常:执行javac.exe命名时,可能出现的异常
  • 运行时异常:执行java.exe时,可能出现的异常

常见的异常类型,请举例说明

//************************以下是运行时异常****************************//ArithmeticException@Testpublic void test6(){int a =1;int b = 0;System.out.println(a/b);}//InputMismatchException@Testpublic void test5(){Scanner scanner = new Scanner(System.in);int score = scanner.nextInt();System.out.println(score);scanner.close();}//NumberFormatException@Testpublic void test4(){String str = "123";str = "abc";int num = Integer.parseInt(str);}//ClassCastException@Testpublic void test3(){Object obj  = new Date();String str = (String)obj;}//IndexOutOfBoundsException@Testpublic void test2(){//ArrayIndexOutOfBoundsException
//      int[] arr = new int[10];
//      System.out.println(arr[10]);String str = "abc";System.out.println(str.charAt(3));}//NullPointerException@Testpublic void test1(){//int[] arr = null;//System.out.println(arr[3]);String str = "abc";str = null;System.out.println(str.charAt(0));}
//************************以下是运行时异常****************************
//@Test
/*public void test7(){File file = new File("hello.txt");FileInputStream fis = new FileInputStream(file);int data = fis.read();while(data!=-1){System.out.println((char)data);data = fis.read();}fis.close();*///}


异常的处理

java异常处理的抓抛模型

  • 过程一:”抛“:程序再正常执行过程中,一旦出现异常,就会在异常代码处生成一个对应异常的对象。并将此对象抛出,其后的代码就不再执行
  • 关于异常对象的产生:1、系统自动生成的异常对象; 2、手动的生成一个异常对象,并抛出(throw
  • 过程二:“抓”:可以理解为异常处理方式1.try catch finally 2.throws

异常处理方式一:try-catch-finally

  • 使用说明
try{//可能出现异常的代码
}catch(异常类型1 变量名1){//处理异常的方式1
}catch(异常类型2 变量名2){//处理异常的方式2
}catch(异常类型3 变量名3){//处理异常的方式3
}
....
finally{//一定会执行的代码
}/*说明:
1.finally是可以择不一定要选的
2.使用try将可能穿异常的代码报文起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配
3.一旦try中的异常对象匹配到某个catch时,就进入catch进行异常处理,一旦处理完成,就跳出当前的try-catch结构(没写finally结构,继续执行其后的代码
4、catch中的异常类型若没子父类关系,则谁声明在上,谁声明在下没关系,若满足子父类关系,则要求子类一定要声明在父类的上面。否则报错
5、常用的异常对象处理方式:1.String getMessage()  2.printStackTrace()
6.在try结构中声明的变量,在出了try结构以后,就不能再被调用
7.try-catch-finally的结构可以嵌套
*/

  • 如何看待代码中的编译时异常和运行时异常?

体会1:使用try-catch-finally处理编译异常时,使得程序编译时不再报错,但是运行时仍可能报错,相当于我们使用try-catch-finally将一个编译时可能出现的错误,延迟到运行时出现 体会2:开发中,由于运行时异常比较常见,所以我们通常就不针对运行时异常编写try-catch-finally了。针对于编译时异常,我们说一定要考虑异常的处理。

  • finally的再说明

finally是可有可无的 finally声明的是一定会被执行的代码。即使catch中又出现了异常了,try中return语句,catch中return语句等情况 想数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动回收的,我们需要自己手动释放,此时的资源释放,就需要声明在finally中。

  • 面试题

final、finally、finalize三者的区别?

类似的: throw throws Collection Collections String StringBuffer StringBuilder ArrayList LinkedList HashMap LinkedHashMap 重写和重载

  • 结构不相似的: 抽象类 接口 ==、equals() sleep()、wait()

异常处理方式二

"throws+异常类型“写在方法的声明处。指明此方法执行时,可能回抛出的异常类型。 一旦方法体执行时,出现异常,仍会在异常代码出生成一个异常对象,此对象满足throws 后异常类型时,就会被抛出。异常代码后续的代码,就不会被执行

对比两种处理方式

try-catch-finally:真正的将异常处理掉了 throws只是将异常抛给了方法的调用者。并没真正的将异常处理掉

体会开发中应该如何选择两种处理方式?

如果父类中被重写的方法没throws方式处理异常,则子类重写的方法也不能够使用throws,意味着如果子类重写的方法中异常,必须使用try-catch-finally的方式去处理 执行的方法中,先后又调用了另外几个方法,这几个方法是递进关系执行的,我们建议这几个方法使用throws方法进行处理。而执行的方法a可以考虑使用try-catch-finally进行处理。

方法重写的规则之一: 子类重写的方法抛出异常类型不大于父类重写的方法抛出的异常

手动抛出异常对象

使用说明

  • 在程序执行中,除了自动抛出异常对象的情况外,我们还需要手动的throw一个异常类的对象

面试题

throw和throws的区别: throw 标识抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。 throws 属于异常处理的一种方式,声明在方法的声明处。

典型例题

class Student{int id;public void regist(int id) throws Exception {if (id>0){this.id = id;}else{//手动抛出一个异常对象//throw new RuntimeException("您输入的数据非法!");//throw new Exception("您输入的数据非法!");throw new MyException("不能输入负数");}}@Overridepublic String toString() {return "Student{" +"id=" + id +'}';}
}

自定义异常类

如何自定义一个异常类?

/*1.继承于现的异常结构:RuntimeException、Exception
2.提供serialVersionUID
3.提供重载构造器*/
public class MyException extends RuntimeException{static final long serialVersionUID = -7034897190745766939L;public MyException(){}public MyException(String msg){super(msg);}
}

手动抛出异常_(七)异常处理相关推荐

  1. response.end后抛了异常_(七)异常处理

    (七)异常处理 异常 异常的体系结构 java.lang.Throwable|-----java.lang.Error:一般不便携针对性的代码进行处理|-----java.lang.Exception ...

  2. java 手动抛异常_Java 异常处理 之 手动抛出异常

    一.手动抛出异常 throw 在编写程序时,我们必须要考虑程序出现问题的情况.比如,在定义方法时,方法需要接受参数.那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法 ...

  3. C/C++学习之路_七: 内存管理

    C/C++学习之路_七: 内存管理 目录 作用域 内存布局 内存分区代码分析 1. 作用域 C语言变量的作用域分为: 代码块作用域(代码块是{}之间的一段代码) 函数作用域 文件作用域 1. 局部变量 ...

  4. python用raise手动抛出异常

    python用raise手动抛出异常 文章目录: raise: 就是手动抛出异常 格式: 格式:raise [exceptionType[,argument][,traceback]] 举例子1: d ...

  5. python自定义全局异常_flask中主动抛出异常及统一异常处理代码示例

    本文主要介绍的是flask中主动抛出异常及统一异常处理的相关内容,具体如下. 在开发时,后台出现异常 ,但不想把异常显示给用户或者要统一处理异常时,可以使用abort主动抛出异常,再捕获异常返回美化后 ...

  6. Java+selenium之WebDriver的抛出异常分析(七)

    Java+selenium之WebDriver的抛出异常分析(七) 参考文章: (1)Java+selenium之WebDriver的抛出异常分析(七) (2)https://www.cnblogs. ...

  7. python主动抛出异常_raise手动抛出异常的3种写法

    今天学习下手动抛出异常,有人可能奇怪写程序就为了正常运行,为何还要手动抛出异常呢?这要在实际项目中根据业务需求来,如果程序本身运行是没问题的,但是某个环节不符合业务需求(比如账户的存款额不够给员工发工 ...

  8. 手动抛出异常回滚事务,且返回数据给前端

    一.简介 有时候会遇到需要手动抛出异常来回滚事务的情况,一般抛出异常后显示的是500服务器错误,如果想要返回json数据给前端的话,就可以用自定义异常类+全局异常捕捉. 二.自定义异常类 这里只定义了 ...

  9. java 手动抛异常_Java如何在没有throws签名的函数中手动抛出异常

    如果想在方法中抛出异常,像下面这样直接throw是不行的.public void test() { throw new Exception(); } 这时编译器会给我们一个错误: Error:(101 ...

最新文章

  1. ELK:kibana使用的lucene查询语法
  2. Andoroid之BottomNavigationView右上角添加红点布局和自动跳转到底部具体第几个Tab
  3. Android实现圆形圆角图片
  4. CSS 语言伪类选择器
  5. SQLite 3.30.0 发布,世界上使用量最大的数据库引擎
  6. mysql with-embedded-server_终于成功实验程序实现Embedded MySQL Server启动(C/C++)
  7. python装饰器带参数函数_python带参数装饰器的两种写法
  8. poj 1734 Sightseeing trip(floyd 拓展 求最小环)
  9. ScrollView嵌套listview高度适应
  10. 十三届蓝桥杯国赛 内存空间 python 满分答案
  11. 18年12月英语六级第二套听力单词
  12. Epicor ERP 学习笔记
  13. [免费专栏] Android安全之某游戏APK逆向分析
  14. 使用.htaccess 开启gzip 缓存文件 网页 提高速度 和 .htaccess文件用法集锦
  15. Tanzu系列:第8部分 - 创建tkg集群
  16. 骨传导耳机到底怎么样,五款好用的骨传导耳机推荐
  17. 5个高清图片素材网站,免费商用,赶紧收藏~
  18. register解析
  19. 加载图片出错时,加载其他图片
  20. 程序员注意了!使用IDEA一定要绿色护眼模式

热门文章

  1. 安装centos6.7和deepin15的折腾记录
  2. 湖北文理学院数学与计算机科学学院,数学与计算机科学学院计算机协会十一月总结会议...
  3. mysql启动redis_docker一系列mysql,redis,centos啥的启动参数记个笔记
  4. http-server 简介 复制的
  5. 如何解决ORA-28002 the password will expire within 7 days问题(密码快过期)
  6. 0.3 preface
  7. python中一切皆是对象,对象都是在堆上存放的,一切都是指针
  8. iphone开热点电脑总是搜不到问题的解决办法(百试百灵)
  9. linux多进程编程(一)
  10. 页面每次添加都显示最后一次访问记录spring scope=prototype 学习笔记