手动抛出异常_(七)异常处理
(七)异常处理
异常
异常的体系结构
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);}
}
手动抛出异常_(七)异常处理相关推荐
- response.end后抛了异常_(七)异常处理
(七)异常处理 异常 异常的体系结构 java.lang.Throwable|-----java.lang.Error:一般不便携针对性的代码进行处理|-----java.lang.Exception ...
- java 手动抛异常_Java 异常处理 之 手动抛出异常
一.手动抛出异常 throw 在编写程序时,我们必须要考虑程序出现问题的情况.比如,在定义方法时,方法需要接受参数.那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法 ...
- C/C++学习之路_七: 内存管理
C/C++学习之路_七: 内存管理 目录 作用域 内存布局 内存分区代码分析 1. 作用域 C语言变量的作用域分为: 代码块作用域(代码块是{}之间的一段代码) 函数作用域 文件作用域 1. 局部变量 ...
- python用raise手动抛出异常
python用raise手动抛出异常 文章目录: raise: 就是手动抛出异常 格式: 格式:raise [exceptionType[,argument][,traceback]] 举例子1: d ...
- python自定义全局异常_flask中主动抛出异常及统一异常处理代码示例
本文主要介绍的是flask中主动抛出异常及统一异常处理的相关内容,具体如下. 在开发时,后台出现异常 ,但不想把异常显示给用户或者要统一处理异常时,可以使用abort主动抛出异常,再捕获异常返回美化后 ...
- Java+selenium之WebDriver的抛出异常分析(七)
Java+selenium之WebDriver的抛出异常分析(七) 参考文章: (1)Java+selenium之WebDriver的抛出异常分析(七) (2)https://www.cnblogs. ...
- python主动抛出异常_raise手动抛出异常的3种写法
今天学习下手动抛出异常,有人可能奇怪写程序就为了正常运行,为何还要手动抛出异常呢?这要在实际项目中根据业务需求来,如果程序本身运行是没问题的,但是某个环节不符合业务需求(比如账户的存款额不够给员工发工 ...
- 手动抛出异常回滚事务,且返回数据给前端
一.简介 有时候会遇到需要手动抛出异常来回滚事务的情况,一般抛出异常后显示的是500服务器错误,如果想要返回json数据给前端的话,就可以用自定义异常类+全局异常捕捉. 二.自定义异常类 这里只定义了 ...
- java 手动抛异常_Java如何在没有throws签名的函数中手动抛出异常
如果想在方法中抛出异常,像下面这样直接throw是不行的.public void test() { throw new Exception(); } 这时编译器会给我们一个错误: Error:(101 ...
最新文章
- ELK:kibana使用的lucene查询语法
- Andoroid之BottomNavigationView右上角添加红点布局和自动跳转到底部具体第几个Tab
- Android实现圆形圆角图片
- CSS 语言伪类选择器
- SQLite 3.30.0 发布,世界上使用量最大的数据库引擎
- mysql with-embedded-server_终于成功实验程序实现Embedded MySQL Server启动(C/C++)
- python装饰器带参数函数_python带参数装饰器的两种写法
- poj 1734 Sightseeing trip(floyd 拓展 求最小环)
- ScrollView嵌套listview高度适应
- 十三届蓝桥杯国赛 内存空间 python 满分答案
- 18年12月英语六级第二套听力单词
- Epicor ERP 学习笔记
- [免费专栏] Android安全之某游戏APK逆向分析
- 使用.htaccess 开启gzip 缓存文件 网页 提高速度 和 .htaccess文件用法集锦
- Tanzu系列:第8部分 - 创建tkg集群
- 骨传导耳机到底怎么样,五款好用的骨传导耳机推荐
- 5个高清图片素材网站,免费商用,赶紧收藏~
- register解析
- 加载图片出错时,加载其他图片
- 程序员注意了!使用IDEA一定要绿色护眼模式
热门文章
- 安装centos6.7和deepin15的折腾记录
- 湖北文理学院数学与计算机科学学院,数学与计算机科学学院计算机协会十一月总结会议...
- mysql启动redis_docker一系列mysql,redis,centos啥的启动参数记个笔记
- http-server 简介 复制的
- 如何解决ORA-28002 the password will expire within 7 days问题(密码快过期)
- 0.3 preface
- python中一切皆是对象,对象都是在堆上存放的,一切都是指针
- iphone开热点电脑总是搜不到问题的解决办法(百试百灵)
- linux多进程编程(一)
- 页面每次添加都显示最后一次访问记录spring scope=prototype 学习笔记