黑马程序员——Java练习笔记——异常
来源:互联网 发布:expect详解sql 编辑:程序博客网 时间:2024/06/05 23:08
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
异常:就是程序在运行时出现不正常情况。
1.异常由来:问题也是现实生活中一个具体的事物,也可以通过Java的类的形式进行描述,并封装成对象。
对于问题的划分:一种是严重的问题,一种非严重的问题。
对于严重的问题,Java通过Error类进行描述,对于Error一般不编写针对性的代码对其进行处理。
对于非严重的问题,java通过Exception类进行描述,对于Exception可以使用针对性的处理方式进行处理。
无论是Error或者Exception都具有一些共性内容,如不正常情况的信息,引发原因等。
2,异常的处理
java 提供了特有的语句进行处理。try{ 需要被检测的代码;}catch(异常类 变量){ 处理异常的代码;(处理方式)}finally{ 一定会执行的语句;}
3.对多异常的处理。
① 声明异常时,建议声明更为具体的异常。这样处理的可以更具体。
② 对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。
如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
建议在进行catch处理时,catch中一定要定义具体处理方式,不要简单定义一句 e.printStackTrace(),也不要简单的就书写一条输出语句。
示例代码:
class ExceptionDemo1 { public static void main(String[] args) { Demo d = new Demo(); try { int x = d.div(5,0); System.out.println("x=" +x); } catch(ArithmeticException e) { System.out.println(e.toString()); System.out.println("被零除了!!"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.toString()); System.out.println("角标越界啦!!"); } catch (Exception e) { System.out.println("haha"+e.toString()); } }}class Demo{ int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException { int[] arr = new int[a]; System.out.println(arr[5]); return a/b; }}
结果:
如果父类catch代码
catch (Exception e) { System.out.println("haha"+e.toString()); }
在子类catch前面的话,就会捕捉不到子类的catch代码。
4.自定义异常
对于角标为负数的情况,准备用负数角标异常来表示。负数角标这种异常在java中并没有定义过。那就按照java异常的创建思想,面向对象,将负数角标进行自定义描述,并封装成对象。这种自定义的问题描述称为自定义异常。
注意:
如果让一个类成为异常类,必须要继承异常体系,因为只有成为异常体系的子类才有资格具备可抛性,才可以被两个关键字所操作,throws、throw。自定义类继承Exception或者其子类,通过构造函数定义异常信息。
5.throws和throw的区别:
throws用于标识函数暴露出的异常类,并且可以抛出多个,用逗号分隔。
throw用于抛出异常对象。
thorws用在函数上,后面跟异常类名。
throw用在函数内,后面跟异常对象。
定义功能方法时,需要把出现的问题暴露出来让调用者去处理,那么就通过throws在函数上标识。
在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。
6.异常的分类:
a,编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系。
这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式。
这样的问题都可以针对性的处理。
b,编译时不检测异常(运行时异常):就是Exception中的RuntimeException和其子类。
这种问题的发生,无法让功能继续,运算无法运行,更多是因为调用的原因导致的或者引发了内部状态的改变导致的。
那么这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行调整。
所以自定义异常时,要么继承Exception,要么继承RuntimeException。
示例代码:
class ExceptionDemo2 { public static void main(String[] args) { int[] arr = new int[3]; Demo.method(arr,-30); }}class Demo{ public static int method(int[] arr,int index) { if (index<0) { throw new FuShuException("数组角标是负数了,错了!!!"); } return arr[index]; }}class FuShuException extends RuntimeException{ FuShuException(String msg) { super(msg); }}
结果:
7.异常处理的原则:
a,函数内容如果抛出需要检测的异常,那么函数上必须要声明。
否则,必须在函数内用try/catch捕捉,否则编译失败。
b,如果调用到了声明异常的函数,那么try/catch,要么throws,否则编译失败。
c,什么时候catch,什么时候throws呢?
功能内容可以解决,用catch。
解决不了,用throws告诉调用者,由调用者解决。
d,一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性处理。内部有几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。
- 黑马程序员——Java练习笔记——异常
- 【黑马程序员】 java笔记——异常
- 黑马程序员—java基础_异常多态练习
- 黑马程序员—java异常
- 黑马程序员——Java练习笔记——环境变量
- 黑马程序员——Java练习笔记——数组
- 黑马程序员——Java练习笔记——继承
- 黑马程序员——Java练习笔记——final
- 黑马程序员——Java练习笔记——多态
- 黑马程序员——Java练习笔记——多线程
- 黑马程序员——Java练习笔记——反射
- 黑马程序员——Java--IO流练习笔记
- 黑马程序员——FileStream练习笔记
- 黑马程序员——java基础——异常笔记
- 黑马程序员——Java要点笔记——异常
- 黑马程序员 JAVA学习笔记 ——— 异常
- 黑马程序员——Java异常处理学习笔记
- 黑马程序员——学习笔记07.Java异常机制
- 欢迎使用CSDN-markdown编辑器
- 文件的上传与下载
- 下辈子,都不会再见了
- JNI/NDK开发指南(十一)——JNI异常处理
- windows系统实现mysql数据库数据库主从复制
- 黑马程序员——Java练习笔记——异常
- 在 windows 环境下编译 Objective-C 程序
- poj 2299 Ultra-QuickSort 【线段树 or 线段树+lazy or 树状数组 or 归并排序】 求逆序对
- 第三章第41题
- Aerospike C客户端手册———错误处理
- A new way to xss with java applet
- 五月太湖迷笛志愿者体验
- struts2中防止多次提交表单的token标签
- Aerospike C客户端手册———共享内存