异常

继承体系

  • Throwable 错误和异常的根类
    • Error:是严重的问题,不应该试图去捕获
    • Exception:应该试图去捕获
      • RuntimeException 运行时异常

Exception分为两类:
一类称为编译时异常(受检异常)Exception中除了RuntimeException以外的异常;
另一类称为运行时异常(非受检异常)RuntimeException及其子类。

异常执行过程

当程序执行到某一行时,产生错误,首先尝试内部解决,如果内部能解决就解决,不能解决就向上找调用者, 调用者也是先尝试自己解决不能解决继续向上找,以此类推直至找到jvm,jvm将异常名、异常信息、异常出现位置这些信息返回到控制台。

异常处理

捕获异常

真正的通过代码等方式处理问题

格式

try{
    可能会出现异常的代码
}catch(异常类型 异常对象名称){
    处理异常的代码
// 如果没有需求,finally 可以不写
}finally{
    一定会执行的语句
    释放资源操作的代码
}

try可以和多个catch进行组合,catch小括号中的异常名,从上向下看类型逐渐增大,如果是平级的谁在上谁在下无所谓。
无论有无异常,finally都会执行,即使遇到return语句也会执行;只有遇到System.exit(0);时不会执行。

try{
    可能会出现异常的代码
// 也可以这样写,但是不建议,尽量把每个异常单独抛出
}catch(异常类型1 | 异常类型2 异常对象名称){
    处理异常的代码
    // 即使执行return,finally 也会执行
    return;
}catch(异常声明){
    处理异常的代码
    // 只有这种情况才不会执行 finally
    System.exit(0);
}finally{
    一定会执行的语句
    释放资源操作的代码
}

try和finally组合

try {
    可能发生异常的代码   
} finally {
    一定要执行的代码
}

这种结构并不能捕获异常。目的就是想要finally中的代码执行,由于finally不能单独使用,因此需和try组合使用

声明异常

并不是真正的处理,是交给他人处理

throws

用在方法上,告知方法的调用者,该方法可能有问题,使用时需要处理。

格式:

方法名 throws 异常名1,异常名2,异常名3,……

示例:
public void test() throws NullPointerException,IndexOutOfBoundsException{
    
}

如果声明的运行时异常,则调用时可以处理也可以不处理
如果声明的是非运行时异常,则调用时必须处理,
处理方式两种:
       1.捕获
       2.继续向上声明throws

throw

用在方法内,主动抛出一个异常对象
如果抛出的是运行时异常,处理或者不处理都可以
如果抛出的是编译时异常,则必须处理,捕获或者是throws都可以,但是一般都选择使用throws,调用该方法时必须做出处理。

格式

throw new NullPointerException();

自定义异常类

定义类继承Exception或者继承RuntimeException
调用父类的构造方法(可选)

示例

import java.util.Scanner;

public class exceptionDemo {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double r = in.nextDouble();
        // 处理 getArea 可能存在的异常
        try {
            getArea(r);
        } catch (Exception e) {
            System.out.println(e);
        }
        in.close();
    }
    
    // 定义方法,求的圆面积
    public static void getArea(double r) throws RadiusLessThanZeroException {
        if (r <= 0) {
            // 抛出编译时异常,选择不处理,上抛,在方法后添加throws
            throw new RadiusLessThanZeroException("半径必须大于零");
        } else {
            System.out.println(Math.PI * Math.pow(r, 2));
        }
    }
    
}

// 自定义异常类 半径小于等于0异常
class RadiusLessThanZeroException extends Exception {
    public RadiusLessThanZeroException() {
        
    }
    public RadiusLessThanZeroException(String msg) {
        super(msg);
    }
}

异常在继承中的问题

重写方法时

  1. 父类方法没有throws子类重写时可以加也可以不加,如果加throws,throws后边只能跟运行时异常
  2. 父类方法有throws,并且是Exception,那么子类重写时,可以加throws,也可以不加throws,如果加throws,throws后声明的异常与父类相同或者是父类异常的子集都可以
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容