黑马程序员-java基础-异常总结
来源:互联网 发布:深圳网络安防培训学校 编辑:程序博客网 时间:2024/05/02 06:07
1、异常
概念:就是不正常,是指程序在运行时出现的不正常情况。其实就是程序中出现的问题。这个问题按照面向对象思想进行描述,并封装成了对象。因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个属性信息存在。当出现多属性信息最方便的方式就是将这些信息进行封装。异常就是java按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。
出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系。
异常的体系 Throwable
Error
通常指JVM出现重大问题如:运行的类不存在或者内存溢出等。
不需要编写针对代码对其处理,程序无法处理。
Exception
在运行时运行出现的一些情况,可以通过try,catch,finally处理
异常处理两种方式:
1、捕获异常:try catch直接处理可能出现的异常!
2、声明异常:throws声明告诉调用者可能的异常,暴露问题,调用者自己处理!
2、异常处理格式
关键字:try ,catch,finally throw, throws
异常处理格式
try{
//可能出异常的代码
} catch(异常类 对象){
//处理该异常类型的语句
}
[finally] {
//一定会执行的代码
//catch块使用System.exit(1);除外
}
备注:当try语句块出现异常,程序会自动跳到catch语句块去找匹配的异常类型,并执行异常处理语句,finally语句块是异常的统一出口。
3、多异常处理
声明异常时尽可能声明具体异常类型,方便更好的处理;
方法声明几个异常就对应有几个catch块;
若多个catch块中的异常出现继承关系,父类异常catch块放在最后;
在catch语句块使用Exception类作为异常类型时:
所有子类实例都可以使用父类接收(向上转型),即所有的异常对象都可以使用Exception接收;
注意:在JAVA处理多个异常的时候,捕获小范围的异常必须放在大范围异常之前。
java7 - 同时捕获多个异常类型
Java7之前:
- try {
- int a = Integer.parseInt("1");
- int b = Integer.parseInt("0");
- int c = a / b;
- System.out.println(c);
- } catch (NumberFormatException e)
- {
- e.printStackTrace();
- } catch(ArithmeticException e)
- {
- e.printStackTrace();
- }
Java7:将多个异常写到了同一个catch代码块
- try {
- Integer a = Integer.parseInt("1");
- Integer b = Integer.parseInt("0");
- Integer c = a / b;
- System.out.println(c);
- } catch (NumberFormatException
- | ArithmeticException e ) {
- e.printStackTrace();
- }
4、异常的分类
异常分类:
编译时被检查异常; ---> Checked异常(在程序中必须使用try...catch处理);
编译时不被检测的异常;---> Runtime异常(可以不使用try...catch处理,但一旦出现异常就将由JVM处理)。
Runtime异常
RuntimeException(运行时异常)是指因设计或实现方式不当而导致的问题.
说白了,就是程序员造成的,程序员小心谨慎是完全可以避免的异常.比如,事先判断对象是否为null就可以避免NullPointerException异常,事先检查除数不为0就可以避免ArithmeticException异常;
特点:这种异常Java编译器不会检查它,也就说程序中出现这类异常的时候,即使不处理也没有问题,但是一旦出现异常,程序将异常终止,若采用异常处理,则会被相应的程序执行处理.
Checked异常
除了RuntimeException以及子类,其他的Exception及其子类都是受检查异常,我们也可以称为非RuntimeException异常.
特点:Java编译器会检查它,也就说程序中一旦出现这类异常,要么是没有try-catch语句捕获,或throws语句没有声明抛出它,编译就不会通过,也就说这种异常,程序要求必须处理.
5、声明异常(throws)
在可能出现异常的方法上声明抛出可能出现异常的类型:
声明的时候尽可能声明具体的异常,方便更好的处理.
当前方法不知道如何处理这种异常,可将该异常交给上一级调用者来处理(非RuntimeException类型的异常)。
方法一旦使用throws声明抛出方法内可能出现的异常类型, 该方法就可以不再过问该异常了;
一个方法调用另一个使用throws声明抛出的方法,自己要么try...catch , 要么也throws。
格式:public 返回值类型 方法名(参数列表...)
throws 异常类A,异常类B... { }
6、throw
自行抛出一个异常对象,抛出异常类的对象;
若throw抛出的是Runtime异常:程序可以显示使用try...catch来捕获并处理,也可以不管,直接交给方法调用者处理;
若throw抛出Checked异常:要么放在try里自己处理,要么放在一个throws声明的方法里面,交给调用者处理。
示例代码:
- public static void main(String[] args) {
- try {
- fn1(1);
- } catch (Exception e) { e.printStackTrace(); }
- fn2(2);
- }
- public static void fn1(int a) throws Exception{
- if(a >0) { throw new Exception("fn1 -- a值不合法"); }
- }
- public static void fn2(int a) {
- if(a >0) { throw new RuntimeException("a值不合法"); }
- }
throws 和throw: throws用于在方法上声明该方法不需要处理的异常类型;throw用于抛出具体异常类的对象。
throws与throw的区别:thorws用在方法上,后面跟异常类名,可以是多个异常类;throw用在方法内,后面跟异常对象,只能是一个。
总结:
不管try块程序是否异常,也不管哪个catch执行,finally块总会执行。
try语句块或会执行的catch语句块使用了JVM系统退出语句例外;//System.exit(1);
try块必须和 catch块或和finally同在,不能单独存在,二者必须出现一个。
不要在finally中使用return 或throw语句,否则将会导致try、catch中的return或throw失效。
finally代码块只有一种情况不执行:System.exit(0).
- 黑马程序员:Java基础总结----异常
- 黑马程序员-Java基础-异常处理总结
- 黑马程序员------Java基础之异常总结
- 黑马程序员--java基础 --异常总结
- 黑马程序员-java基础-异常总结
- 黑马程序员-java基础 异常
- 黑马程序员JAVA基础-异常
- 黑马程序员--Java基础--异常
- 黑马程序员-->Java基础-->异常
- 黑马程序员--java基础--异常
- 黑马程序员--------------java基础----------------异常
- 黑马程序员 Java基础 异常
- 黑马程序员-----Java基础-----异常
- 黑马程序员《java基础总结(五)》(异常、包)
- 黑马程序员—Java基础---异常体系学习总结
- 黑马程序员—java基础之异常总结
- 黑马程序员-----七、java基础异常知识点总结
- 黑马程序员-----java异常总结*
- java -- 写时间的时候遇到一个问题,大家有没有遇到过
- handsontable插件事件
- 弹幕实现
- HDOJ 1005 Number Sequence 循环数列求值 C语言实现
- iOS7 - UIActionSheet 按钮不响应点击事件的解决方法
- 黑马程序员-java基础-异常总结
- 在Unity里点击按钮打开一个浏览器页面 点击关闭 关闭这个页面
- android JAR混淆
- Android 使用shareSDK进行第三方登录失败解决方法(微信,微博,qq)
- iOS - 工具函数
- JPA基本API描述
- Spark MLlib Deep Learning Neural Net(深度学习-神经网络)1.1
- js和jsp的执行顺序
- GeoServer和MapServer的对比[转]