Java中的异常处理
来源:互联网 发布:查询mysql数据库ip 编辑:程序博客网 时间:2024/05/18 02:51
异常
指程序在运行时出现的不正常情况(问题),因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个属性信息存在。当出现多属性信息最方便的方式就是将这些信息进行封装。异常就是 java 按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。
体系
Throwable类(子类:Error和Exception)是 Java 语言中所有错误或异常的超类。
- 异常的继承体系:
- Throwable
- Error
- Exception
- RuntimeException
- Throwable
- 方法:
- String getMessage():获取异常信息,返回字符串。
- String toString():获取异常类名和异常信息,返回字符串。
- void printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void。
- void printStackTrace(PrintStream s):将此 throwable 及其追踪输出到指定的 PrintWriter,通常用该方法将异常内容保存在日志文件中,以便查阅。
Error
- 通常指 JVM 出现重大问题如:运行的类不存在或者内存溢出等。不需要编写针对代码对其处理,程序无法处理。
Exception
异常处理两种方式:
- 捕获异常:try catch 直接处理可能出现的异常;
- 声明异常:throws 声明告诉调用者可能的异常,暴露问题,调用者自己处理。
异常的分类:
编译时被检查异常 —> 编译异常(只要是Exception和其子类都是,除了特殊子类RuntimeException体系)
- 解决方法:在程序中必须使用 try…catch 处理。
异常处理格式
try {
//可能出异常的代码
}
catch(异常类 对象) {
//处理该异常类型的语句
}
[finally] {
//一定会执行的代码(通常用来关闭资源。比如:数据库资源,IO资源等)
//catch 块中使用了”System.exit(0);” 语句除外
}注:Java7:将多个异常写到了同一个 catch 代码块
catch (NumberFormatException| ArithmeticException e ) {e.printStackTrace();}
- try语句使用注意:
- try是一个独立的代码块,在其中定义的变量只在该变量块中有效,如果在try以外继续使用,需要在try外建立引用,在try中对其进行初始化。IO,Socket就会遇到。
- 函数未抛出异常,try中抛出异常,其后面的语句将执行不到。编译将报错;函数抛出异常后,try后面的语句未执行,不会报错,代码示例如下:
class ExceptionPractise { public static void func()//throws Exception { try { throw new Exception(); //System.out.println("A"); } catch (Exception e) { System.out.println("B"); } } public static void main(String[] args) { try { func(); } catch (Exception e) { System.out.println("C"); } System.out.println("D"); } } /* 说明:1.若有System.out.println("A");语句编译会失败,因为抛出异常后,该句执行不到 2.不存在System.out.println("A");语句,则打印B和D 3.若有System.out.println("A");语句,且加上throws Exception,则打印B和D */
编译时不被检测的异常 —> 运行异常(Exception中的RuntimeException和其子类)
- 这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行调整。
- RuntimeException是那些可能在Java虚拟机正常运行期间抛出的异常的超类,可能在执行方法期间抛出但未被捕获的RuntimeException的任何子类都无需在throws子句中进行声明
自定义异常:可以自定义出的问题称为自定义异常。
特点:
- 自定义类继承Exception或者RuntimeException,通过构造函数定义异常信息
- 通过throw将自定义异常抛出
示例:当要定义自定义异常的信息时,可以使用父类已经定义好的功能,将异常信息传递给父类的构造函数。
class MyException extends Exception { MyException(String message) { super(message); }}
throws和throw的区别
- throws
- 用在方法声明后面,跟的是异常类名
- 可以跟多个异常类名,用逗号隔开
- 表示抛出异常,由该方法的调用者来处理
- throw
- 用在方法体内,跟的是异常对象名
- 只能抛出一个异常对象名
- 表示抛出异常,由方法体内的语句处理
异常处理原则:
异常处理的原则:
- 函数内容如果抛出需要检测的异常,那么函数上必须要声明。否则,必须在函数内用try/catch捕捉,否则编译失败。
- 如果调用到了声明异常的函数,要么try/catch,要么throws,否则编译失败。
- 什么时候catch,什么时候throws呢?功能内容可以解决,用catch。解决不了,用throws告诉调用者,由调用者解决。
- 一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性处理。内部有几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。
异常在子类覆盖中的体现:
- 子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类
- 如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子类
- 如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
- 如果子类方法发生了异常,就必须要进行try处理,绝对不能抛。
0 0
- Java中的异常处理
- JAVA中的异常处理
- Java中的异常处理
- JAVA中的异常处理
- java中的异常处理
- Java中的异常处理
- java中的异常处理
- Java中的异常处理
- java中的异常处理
- Java中的异常处理
- java中的异常处理
- java中的异常处理
- Java中的异常处理
- Java中的异常处理
- Java中的异常处理
- java中的异常处理
- Java中的异常处理
- JAVA中的异常处理
- git 时遇到fatal:multiple stage entries for merged file处理办法
- CSS选择符优先级
- 仅需三步,让您的员工绩效都得A!
- typecheck(type,x) 作用
- 和喜欢的女生聊天 15 分钟以后就找不到话题了怎么办?
- Java中的异常处理
- 51nod 1008 N的阶乘 mod P
- 将IplImage转换为Mat
- 升级Android6.0 后app无法扫描ble设备
- Android 下拉刷新框架实现
- 好框架
- __try,__except,__finally,__leave异常模型机制
- OpenGL着色器的使用总结
- 黑马程序员——java基础--集合