黑马程序员——第五篇_异常
2015-07-23 19:36
447 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
异常分两种:
1:编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。
2:运行时异常,其中Exception有一个特殊的子类RuntimeException,以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。
编译时被检查的异常和运行时异常的区别:
编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
声明的原因:是需要调用者对该异常进行处理。
运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。
如何标示呢?通过throws关键字完成,格式:throws 异常类名,异常类名...
这样标示后,调用者,在使用该功能时,就必须要处理,否则编译失败。
处理方式有两种:1、捕捉;2、抛出。
对于捕捉:java有针对性的语句块进行处理。
异常处理原则:功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。
异常的转换思想:当出现的异常是调用者处理不了的,就需要将此异常转换为一个调用者可以处理的异常抛出。
try catch finally的几种结合方式:
--------------------------------------------------------
try { 需要被检测的代码;}
catch(异常类 变量名){ 异常处理代码;}
fianlly{ 一定会执行的代码;}
--------------------------------------------------------
--------------------------------------------------------
catch (Exception e) { //e用于接收try检测到的异常对象。
System.out.println("message:" e.getMessage());//获取的是异常的信息。
System.out.println("toString:" e.toString());//获取的是异常的名字异常的信息。
e.printStackTrace();//打印异常在堆栈中信息;异常名称异常信息 异常的位置。
}
---------------------------------------------------------
特殊情况:try对应多个catch时,如果有父类的catch语句块,一定要放在下面。
记住:finally 很有用,主要用户关闭资源。无论是否发生异常,资源都必须进行关闭。System.exit(0); //退出jvm,只有这种情况finally不执行。
当异常出现后,在子父类进行覆盖时,有了一些新的特点:
1:当子类覆盖父类的方法时,如果父类的方法抛出了异常,那么子类的方法要么不抛出异常要么抛出父类异常或者该异常的子类,不能抛出其他异常。
2:如果父类抛出了多个异常,那么子类在覆盖时只能抛出父类的异常的子集。
注意:
如果父类或者接口中的方法没有抛出过异常,那么子类是不可以抛出异常的,如果子类的覆盖的方法中出现了异常,只能try不能throws。
如果这个异常子类无法处理,已经影响了子类方法的具体运算,这时可以在子类方法中,通过throw抛出RuntimeException异常或者其子类,这样,子类的方法上是不需要throws声明的。
throw 和throws关键字的区别:
throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。
throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。
通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。
定义异常处理时,什么时候定义try,什么时候定义throws呢?
功能内部如果出现异常,如果内部可以处理,就用try;
如果功能内部处理不了,就必须声明出来,让调用者处理。
自定义异常:当开发时,项目中出现了java中没有定义过的问题时,这时就需要我们按照java异常建立思想,将项目的中的特有问题也进行对象的封装。这个异常,称为自定义异常。
对于除法运算,0作为除数是不可以的。java中对这种问题用ArithmeticException类进行描述。对于这个功能,在我们项目中,除数除了不可以为0外,还不可以为负数。可是负数的部分java并没有针对描述。所以我们就需要自定义这个异常。
自定义异常的步骤:
1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性。
2:通过throw 或者throws进行操作。
类型强制转换异常:ClassCastException
方法未找到异常:NoSuchMethodException
没有这个元素异常:NullPointerException
算术异常类:ArithmeticExecption
数据库异常:SQLException
输入输出异常:IOException
字符串转换为数字异常:NumberFormatException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
违背安全原则异常:SecturityException
更多.. 见API
------------------------------------------------------
class ExceptionDemo{
public static void main(String[] args) {
// byte[] buf = new byte[1024*1024*700];//java.lang.OutOfMemoryError内存溢出错误
}
}
异常分两种:
1:编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。
2:运行时异常,其中Exception有一个特殊的子类RuntimeException,以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。
编译时被检查的异常和运行时异常的区别:
编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
声明的原因:是需要调用者对该异常进行处理。
运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。
异常处理:
在开发时,如果定义功能时,发现该功能会出现一些问题,应该将问题在定义功能时标示出来,这样调用者就可以在使用这个功能的时候,预先给出处理方式。如何标示呢?通过throws关键字完成,格式:throws 异常类名,异常类名...
这样标示后,调用者,在使用该功能时,就必须要处理,否则编译失败。
处理方式有两种:1、捕捉;2、抛出。
对于捕捉:java有针对性的语句块进行处理。
异常处理原则:功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。
异常的转换思想:当出现的异常是调用者处理不了的,就需要将此异常转换为一个调用者可以处理的异常抛出。
try catch finally的几种结合方式:
--------------------------------------------------------
try { 需要被检测的代码;}
catch(异常类 变量名){ 异常处理代码;}
fianlly{ 一定会执行的代码;}
--------------------------------------------------------
--------------------------------------------------------
catch (Exception e) { //e用于接收try检测到的异常对象。
System.out.println("message:" e.getMessage());//获取的是异常的信息。
System.out.println("toString:" e.toString());//获取的是异常的名字异常的信息。
e.printStackTrace();//打印异常在堆栈中信息;异常名称异常信息 异常的位置。
}
---------------------------------------------------------
特殊情况:try对应多个catch时,如果有父类的catch语句块,一定要放在下面。
记住:finally 很有用,主要用户关闭资源。无论是否发生异常,资源都必须进行关闭。System.exit(0); //退出jvm,只有这种情况finally不执行。
当异常出现后,在子父类进行覆盖时,有了一些新的特点:
1:当子类覆盖父类的方法时,如果父类的方法抛出了异常,那么子类的方法要么不抛出异常要么抛出父类异常或者该异常的子类,不能抛出其他异常。
2:如果父类抛出了多个异常,那么子类在覆盖时只能抛出父类的异常的子集。
注意:
如果父类或者接口中的方法没有抛出过异常,那么子类是不可以抛出异常的,如果子类的覆盖的方法中出现了异常,只能try不能throws。
如果这个异常子类无法处理,已经影响了子类方法的具体运算,这时可以在子类方法中,通过throw抛出RuntimeException异常或者其子类,这样,子类的方法上是不需要throws声明的。
throw 和throws关键字的区别:
throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。
throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。
通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。
定义异常处理时,什么时候定义try,什么时候定义throws呢?
功能内部如果出现异常,如果内部可以处理,就用try;
如果功能内部处理不了,就必须声明出来,让调用者处理。
自定义异常:当开发时,项目中出现了java中没有定义过的问题时,这时就需要我们按照java异常建立思想,将项目的中的特有问题也进行对象的封装。这个异常,称为自定义异常。
对于除法运算,0作为除数是不可以的。java中对这种问题用ArithmeticException类进行描述。对于这个功能,在我们项目中,除数除了不可以为0外,还不可以为负数。可是负数的部分java并没有针对描述。所以我们就需要自定义这个异常。
自定义异常的步骤:
1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性。
2:通过throw 或者throws进行操作。
常见异常:
空指针异常类:NullPointerException类型强制转换异常:ClassCastException
方法未找到异常:NoSuchMethodException
没有这个元素异常:NullPointerException
算术异常类:ArithmeticExecption
数据库异常:SQLException
输入输出异常:IOException
字符串转换为数字异常:NumberFormatException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
违背安全原则异常:SecturityException
更多.. 见API
------------------------------------------------------
class ExceptionDemo{
public static void main(String[] args) {
// byte[] buf = new byte[1024*1024*700];//java.lang.OutOfMemoryError内存溢出错误
}
}
相关文章推荐
- 黑马程序员——第四篇_正则表达式
- 黑马程序员——第三篇_知识点整理
- 转自:浅谈软件开发人员的职业规划
- 面试题连接收集
- 转自:熊译:我看软件工程师的职业规划。
- 115个Java面试题和答案——终极列表
- ***JAVA多线程和并发基础面试问答
- 黑马程序员——Java多态总结
- 职场发展中气度的养成(节选自最代码7月第2周回顾)
- 女程序员之路
- 一颗合格的螺丝钉——程序员漫谈(一)
- 程序员必读的六本书
- 黑马程序员——多线程(一)
- 二叉树中的那些常见的面试题(转)
- 剑指offer-面试题11.数值的整数次方
- 让你在求职中脱颖而出的小技巧
- 程序员装逼速成手册
- 面试题7:用两个栈实现队列和用两个队列实现栈
- 面试题:“你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?”
- android技术 面试题 笔试题精华重点