黑马程序员_异常及处理
来源:互联网 发布:php 编译 加密 编辑:程序博客网 时间:2024/06/06 02:21
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
异常
Throwable:可抛出的。
|--Error:错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。如:运行的类不存在或者内存溢出等。
|--Exception:异常,可以有针对性的处理方式 . 可以通过try,catch,finally处理
无论是错误还是异常,它们都有具体的子类体现每一个问题,它们的子类都有一个共性,就是都以父类名才作为子类的后缀名。
这个体系中的所有类和对象都具备一个独有的特点;就是可抛性。
可抛性的体现:就是这个体系中的类和对象都可以被throws和throw两个关键字所操作。
异常处理
try{//可能出异常的代码} catch(异常类 对象){//处理该异常类型的语句}finally {//一定会执行的代码//catch块使用System.exit(0);除外}
异常处理原则:功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。
特殊情况:try对应多个catch时,如果有父类的catch语句块,一定要放在下面。
throw 和throws关键字的区别:
throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。
throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。
通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。
异常分两种:
1:编译时被检查的异常,只要是Exception及其子类都是编译时被检测的异常。
2:运行时异常,其中Exception有一个特殊的子类RuntimeException,以及RuntimeException的子类是运行异常,也就说这个异常是编译时不被检查的异常。
编译时被检查的异常和运行时异常的区别:
编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。
声明的原因:是需要调用者对该异常进行处理。
运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。
定义异常处理时,什么时候定义try,什么时候定义throws呢?
功能内部如果出现异常,如果内部可以处理,就用try;
如果功能内部处理不了,就必须声明出来,让调用者处理。
当异常出现后,在子父类进行覆盖时,有了一些新的特点:
1:当子类覆盖父类的方法时,如果父类的方法抛出了异常,那么子类的方法要么不抛出异常要么抛出父类异常或者该异常的子类,不能抛出其他异常。
2:如果父类抛出了多个异常,那么子类在覆盖时只能抛出父类的异常的子集。
注意:
如果父类或者接口中的方法没有抛出过异常,那么子类是不可以抛出异常的,如果子类的覆盖的方法中出现了异常,只能try不能throws。
如果这个异常子类无法处理,已经影响了子类方法的具体运算,这时可以在子类方法中,通过throw抛出RuntimeException异常或者其子类,这样,子类的方法上是不需要throws声明的。
public class ExceptionDemo {public static void main(String[] args) {Demo d = new Demo();try {sop(d.div(5,0)); //除0异常}catch (Exception e) { // (异常类 变量) System.out.println("除数为零,请重新输入"); //处理异常的代码;(处理方式)// 一定要定义具体处理方式,不要简单定义一句 e.printStackTrace()}finally{ //一定会执行的语;通常用来关闭资源}}public static void sop(Object obj) {System.out.println(obj);}}class Demo{int div(int a, int b) throws Exception{ //在函数上声明异常。 //便于提高安全性,让调用出进行处理。不处理编译失败。return a/b;}}
自定义异常
如何定义异常信息呢?
因为父类中已经把异常信息的操作都完成了。
所以子类只要在构造时,将异常信息传递给父类通过super语句。
那么就可以直接通过getMessage方法获取自定义的异常信息。
/* * 自定义处理异常 * */class FuShuException extends Exception{ //自定义异常 继承Exception后 具备可抛性public FuShuException(String m) { super(m); //调用父类构造函数}}class Demo1{ int div(int a, int b) throws FuShuException {if (b<=0) throw new FuShuException("请不要输入负数以及零"); return a/b;}}public class ExceptionDemo1 {public static void main(String[] args) {Demo1 d = new Demo1();try {sop(d.div(9,0)); //调用函数 }catch (FuShuException e) { sop(e.getMessage());sop(e.toString());}}public static void sop(Object obj) {System.out.println(obj);}}
public class ExceptionDemo {public static void main(String[] args) {Demo d = new Demo();try {sop(d.div(5,0)); //除0异常}catch (Exception e) { // (异常类 变量) System.out.println("除数为零,请重新输入"); //处理异常的代码;(处理方式)// 一定要定义具体处理方式,不要简单定义一句 e.printStackTrace()}finally{ //一定会执行的语;通常用来关闭资源}}public static void sop(Object obj) {System.out.println(obj);}}class Demo{int div(int a, int b) throws Exception{ //在函数上声明异常。 //便于提高安全性,让调用出进行处理。不处理编译失败。return a/b;}}
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
- 黑马程序员_异常及处理
- 黑马程序员_异常及处理
- 黑马程序员_ 异常处理
- 黑马程序员_异常处理
- 黑马程序员_异常处理
- 黑马程序员_异常处理.
- 黑马程序员_异常处理
- 黑马程序员_异常try,catch处理
- 黑马程序员_异常处理学习笔记
- 黑马程序员_Java基础_异常处理
- 黑马程序员 _学习笔记 异常处理
- 黑马程序员_异常处理篇
- 黑马程序员_Java基础_异常处理
- 黑马程序员_笔记十_异常的捕获及处理
- 黑马程序员_异常架构和异常处理
- 黑马程序员_异常
- 黑马程序员_异常
- 黑马程序员_异常
- nginx上传文件大小
- 利用dmesg和addr2line来重现bug
- 项目Go与ffmpeg-20131017-git-0bf8580结合过程
- CentOS-6.3安装使用MongoDB
- netbeans android 配置
- 黑马程序员_异常及处理
- cocos2dx三种定时器的使用以及停止schedule,scheduleUpdate,scheduleOnce
- 黑马程序员_1_内部类访问规则(1)
- JAVA反射机制的认识 超有爱的超屌的
- iOS学习:调用相机,选择图片上传,带预览功能
- Linux下线程池的创建
- VS2012下boost 配置与使用
- Cocos2d-x PluginX (二)增加新的Plugin
- LeetCode Best Time to Buy and Sell Stock I,II,III