java异常
开发工具与关键技术:java
作者:陈希雄
撰写时间:2019/5/7
是指程序在运行时出现的不正常情况。其实就是程序中出现的问题。 这个问题按照面向对象思想进行描述,并封装成了对象。因为问题的产生有产生的原因、有 问题的名称、有问题的描述等多个属性信息存在。当出现多属性信息最方便的方式就是将这 些信息进行封装。异常就是 java 按照面向对象的思想将问题进行对象封装。这样就方便于 操作问题以及处理问题。
出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。而且这 些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位 置,所以可以不断的向上抽取。形成了异常体系。
总结:简单点说就是“不正常”。
异常的体系 Throwable
Error:程序无法处理。
Exception: 在运行时运行出现的一些情况,可以通过 try,catch,finally 处理
异常处理两种方式:
1、捕获异常:trycatch 直接处理可能出现的异常!
2、声明异常:throws 声明告诉调用者可能的异常,暴露问题,调用者自己 处理!
异常处理格式
异常处理的5 个关键字
try,catch, finally throw,throws
异常处理格式 try{ //可能出异常的代码 }catch(异常类 对象){ //处理该异常类型的语句 } [finally] { //一定会执行的代码 //catch 块使用 System.exit(1);除外 }
备注:当 try 语句块出现异常,程序会自动跳到 catch 语句块去找匹配的异常类型,并执行 异常处理语句,finally 语句块是异常的统一出口。
多异常处理:若多个 catch 块中的异常出现继承关系,父类异常 catch 块放在最后; 捕获异常:先捕获小异常再捕获大异常。
例如:
try {
try {
} catch (IOException e) {
// TODO: handle exception
}
} catch (Exception e) {
// TODO: handle exception
}
异常的分类
异常分类: 编译时被检查异常; —>Checked 异常 在程序中必须使用 try…catch 处理; 编译时不被检测的异常; —>Runtime 异常 可以不使用 try…catch 处理,但一旦出现异常就将由 JVM 处理
Runtime 异常
RuntimeException(运行时异常)是指因设计或实现方式不当而导致的问题.
特点: 这种异常Java编译器不会检查它,也就说程序中出现这类异常的时候,即使不处理也没有 问题,但是一旦出现异常,程序将异常终止,若采用异常处理,则会被相应的程序执行处理.
Checked 异常
除了 RuntimeException 以及子类,其他的 Exception 及其子类都是受检查异常,我们也可 以称为非 RuntimeException 异常. 特点: Java 编译器会检查它,也就说程序中一旦出现这类异常,要么是没有 try-catch 语句捕获, 或throws 语句没有声明抛出它,编译就不会通过,也就说这种异常,程序要求必须处理.
声明异常
方法一旦使用 throws 声明抛出方法内可能出现的异常类型, 该方法就可以不再过问该 异常了; 一个方法调用另一个使用 throws 声明抛出的方法,自己要么 try…catch , 要么也 throws;
格式: public 返回值类型 方法名(参数列表…) throws 异常类 A,异常类 B…{
}
throw
自行抛出一个异常对象,抛出异常类的对象;(自定义异常)
Sys
try {
throw new IOException("");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
throws
public static String Test0301s(String str) throws IOException {
throws &throw
throws 用于在方法上声明该方法不需要处理的异常类型。 throw 用于抛出具体异常类的对象。
throws 与 throw的区别: thorws 用在方法上,后面跟异常类名,可以是多个异常类。 throw 用在方法内,后面跟异常对象,只能是一个。
Finally
异常的统一出口: 不管 try块程序是否异常,也不管哪个 catch 执行,finally 块总会执行。 try语句块或会执行的 catch 语句块使用了 JVM 系统退出语句例外;//System.exit(1); try 块必须和 catch 块或和 finally 同在,不能单独存在,二者必须出现一个。 不要在finally 中使用return 或 throw 语句,否则将会导致 try、catch 中的 return 或 throw 失 效。
总结:finally 代码块只在一种情况下不执行:System.exit(0);
public class Demo19 {
public static void main(String[] args) {
try{
System.out.println(17/0);
}catch(Exception e){
//e.printStackTrace(); System.out.println(“程序错误,请修正!”);
}finally{ System.out.println(“这是finally代码块!”);
} } }