黑马程序员_异常
2015-06-07 23:28
204 查看
------- android培训、java培训、期待与您交流! ----------
|--对于Error一般不编写针对性的代码对其进行处理;
|--非严重的问题:java通过Exception类进行描述;
|--对于Exception可以使用针对性的处理方式进行处理;
|--两种问题都有共性的内容;-->它们两者就不断的向上抽取,抽取的父类是Throwable;
|--就是不正常的信息,引发原因等;
|--Throwable
|--Error
|--Exception
|--打印异常信息;
|--String toString()
|--打印异常信息的字符串表现形式:异常名称:异常信息
|--void printStackTrace()
|--打印堆栈中的跟踪信息;异常名称,异常信息,异常出现的位置
|--其实jvm默认的异常处理机制,就是在调用printStackTrace()方法;
|--但是一般不往外抛,捕捉才是硬道理;
|--对方声明几个异常,就对应有几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
|--当函数中只要已有异常发生,那么这个函数就已经结束了,换句话说就是不在继续执行其他的程序了;
|--异常不能同时发生;
|--看上面的功能中有几个异常,那么就对应的有几个catch;
|--如果发生了功能以外了异常,那么父类的catch块放在最下面;
|--建议在进行catch处理时,catch中一定要定义具体的处理方式,也不要简单的写一句输出语句;
|--如果真的发生问题了,把这个信息会有一个硬盘文件把这个异常信息记录下来,这个文件称为异常日志文件;
|--throws使用在函数上,并且后面跟的异常类,可以跟多个,用逗号隔开
|--throw使用在函数内;后面跟的是异常对象;
|--在自定义异常时:如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException;
代码体现:
|--一般情况下,函数内出现异常,函数上需要声明;
|--如果在函数上声明 了该异常,调用者可以不用进行处理,编译一样通过;
|--之所以不用在函数上声明,是因为不需要让调用者处理,当该异常发生了,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,有程序员对代码进行修正;
在运行时,出现了无法继续运算的情况,希望停止程序后,有程序员对代码进行修正;
|--编译时不被检测的异常(运行时异常,RuntimeException或者RuntimeException的子类);
|--Java在设计异常体系时,将容易出现的异常情况都封装成了对象。
|--Exception 和 Error的子类名大都是以父类名作为后缀。
|--捕获异常:先捕获小异常再捕获大异常。
|--异常处理后,程序不会因为出现异常而退出。
|--finally代码块只在一种情况下不执行:System.exit(0);
异常
第一部分
1、异常概念
异常就是不正常,是指程序在运行时出现的不正常情况;2、异常的由来
问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象;其实就是java对不正常情况进行描述后的对象体现;3、异常问题的划分
|--严重的问题:java通过Error类进行描述;|--对于Error一般不编写针对性的代码对其进行处理;
|--非严重的问题:java通过Exception类进行描述;
|--对于Exception可以使用针对性的处理方式进行处理;
|--两种问题都有共性的内容;-->它们两者就不断的向上抽取,抽取的父类是Throwable;
|--就是不正常的信息,引发原因等;
|--Throwable
|--Error
|--Exception
4、异常的处理
java提供了特有的语句进行处理;<span style="font-size:14px;">try { 需要被检测的代码; } catch () { 处理异常的代码;(处理方式) } finally { 一定会执行的语句; }</span>
5、对异常对象操作
|--String getMessage()|--打印异常信息;
|--String toString()
|--打印异常信息的字符串表现形式:异常名称:异常信息
|--void printStackTrace()
|--打印堆栈中的跟踪信息;异常名称,异常信息,异常出现的位置
|--其实jvm默认的异常处理机制,就是在调用printStackTrace()方法;
6、对异常的第二种处理
|--就是在功能上加一个标识,意思就是说,在功能上通过throws的关键字来声明了该功能有可能会出现问题;|--但是一般不往外抛,捕捉才是硬道理;
7、对多个异常的处理
|--声明异常时,建议声明更为具体的异常,这样处理的更加具体;|--对方声明几个异常,就对应有几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
8、异常注意事项
|--当异常被捕捉了以后,会处理好异常后,下面的语句还会继续执行;|--当函数中只要已有异常发生,那么这个函数就已经结束了,换句话说就是不在继续执行其他的程序了;
|--异常不能同时发生;
|--看上面的功能中有几个异常,那么就对应的有几个catch;
|--如果发生了功能以外了异常,那么父类的catch块放在最下面;
|--建议在进行catch处理时,catch中一定要定义具体的处理方式,也不要简单的写一句输出语句;
|--如果真的发生问题了,把这个信息会有一个硬盘文件把这个异常信息记录下来,这个文件称为异常日志文件;
第二部分
1、自定义异常
|--由于在项目中会出现特有的问题,而这些问题并未被java所描述并封装对象,所以对于这些特有的问题可以按照java的对问题封装的思想,将特有的问题进行自定义的异常封装;|--在自定义异常是必须要继承Exception;
|--原因:异常体系有个特点:因为异常类和异常对象都需要被抛出,它们都具备可抛性,这个可抛性是Throwable这个体系中的独有特点,只要这个体系中的类和对象才可以被throws和throw操作,只有Throwable体系中的成员,草可以被throws和throw操作;
|--throws和throw的区别:|--throws使用在函数上,并且后面跟的异常类,可以跟多个,用逗号隔开
|--throw使用在函数内;后面跟的是异常对象;
|--在自定义异常时:如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException;
2、需求
在本程序中,对于除数是负数,也视为是错误的是无法进行运算的,那么就需要对这个问题进行自定义的描述;代码体现:
//要先进入Exception体系中 class FuShuException extends Exception { private int value; FuShuException(String msg,int value)//父类已经做完了,那么子类就直接拿过来用就可以了 { super(msg); this.value = value; } public int getValue() { return value; } } class Demo { int div(int a,int b)throws FuShuException//手动通过throw关键字抛出一个自定义异常对象 { if(b<0) throw new FuShuException("出现除数为负数了----/by fushu",b); return a/b; } } class ExceptionDemo3 { public static void main(String[] args) { Demo d = new Demo(); try { int x = d.div(4,-2); System.out.println("X="+x); } catch (FuShuException e) { System.out.println(e.toString()); System.out.println("错误的负数是:"+e.getValue()); System.out.println("除数出现负数了!"); } } }
3、运行的结果
4、注意
|--当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作,要么在内部try catch处理,要么在函数上声明让调用者处理;;|--一般情况下,函数内出现异常,函数上需要声明;
5、如何自定义异常信息
因为父类中已经把异常信息的操作已经完成了,因此子类只要在构造时,将异常信息传递给父类通过super语句,那么就可以直接通过getMessage方法获取自定义的异常信息;第三部分
1、RuntimeException:运行是异常
|--RuntimeException:这是异常子类是一个非常特殊的,如果在这个RuntimeException或者RuntimeException的子类在函数内抛出了,那么函数上就不要声明了;|--如果在函数上声明 了该异常,调用者可以不用进行处理,编译一样通过;
|--之所以不用在函数上声明,是因为不需要让调用者处理,当该异常发生了,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,有程序员对代码进行修正;
2、代码体现
//如果该异常的发生,无法在继续进行运算, //就让自定义异常继承RuntimeException; class FuShuException extends RuntimeException { // private String msg; FuShuException(String msg) { super(msg); } } class Demo { int div(int a,int b) { if(b<0) throw new FuShuException("除数出现负数了"); if(b==0) throw new ArithmeticException("除数为零了"); return a/b; } } class ExceptionDemo4 { public static void main(String[] args) { Demo d = new Demo(); int x = d.div(4,0); System.out.println("X="+x); } }
3、运行结果
在运行时,出现了无法继续运算的情况,希望停止程序后,有程序员对代码进行修正;
4、对于异常分为两种
|--编译时被检测的异常;|--编译时不被检测的异常(运行时异常,RuntimeException或者RuntimeException的子类);
第四部分:
我的总结
|--Java异常其实是对不正常情况的一种描述,并将其封装成对象;|--Java在设计异常体系时,将容易出现的异常情况都封装成了对象。
|--Exception 和 Error的子类名大都是以父类名作为后缀。
|--捕获异常:先捕获小异常再捕获大异常。
|--异常处理后,程序不会因为出现异常而退出。
|--finally代码块只在一种情况下不执行:System.exit(0);
相关文章推荐
- 程序员网址推荐
- 黑马程序员---守护线程的用法
- 程序员
- 面试题:Java中对象序列化接口(Serializable)的意义
- 黑马程序员-JAVA基础之面向对象
- 《程序员的自我修养》读书笔记2
- 如何提升你的能力?给年轻程序员的几条建议
- 黑马程序员——Java基础---多线程
- 黑马程序员_匿名内部类
- 语法面试等题目汇总
- 面试题6:重建二叉树
- 数据说话:怎样的程序员最抢手?
- 黑马程序员_Foundation框架小结
- 黑马程序员---IO流-异常
- 黑马程序员—面向对象
- 面试题5:从尾到头打印链表
- Java程序员面试失败的5大原因
- Java程序员面试失败的5大原因
- 面试题:谈谈你对hibernate的理解
- 面试失败的原因有哪些?