异常处理

JAVA严格的异常处理机制和类型检查机制

异常处理
手贱异常
非手贱异常

异常链处理

异常是在程序出错的时候能知道程序哪里出错了

如果程序异常在底层报出以后 在过程中丢了 没有暴露出来 这个是不能容忍的

需要保证异常在一级一级的抛出的时候能保证异常没有丢失

异常:阻止当前方法或作用域顺利执行的问题
异常处理的意义和作用
java所有异常的根是 Throwable 类
Throwable 类有两个自类 Error类和Exception类
Error类 主要有 虚拟机错误(VirtualMachineError) 线程死锁(ThreadDeath)
Exception类:编码、环境、用户操作输入出现问题
分为 非检查异常 和 检查异常

处理异常
try-catch 以及 try-catch-finally

        Scanner input = new Scanner(System.in);
        try{int one = input.nextInt();
                int two = input.nextInt();
                System.out.println(one/two);}
        catch(InputMismatchException e){
            System.out.println("输入的数字必须为正整数");} 
        catch(ArithmeticException e){
            System.out.println("除数不能为0");}
        catch(Exception e){
            System.out.println("其他异常");}

异常抛出必须先小后大

测试一个 try catch 方法
e.printStackTrace();
这个方法是:在命令行打印异常信息在程序中出错的位置及原因。

package Java;
public class ex1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ex1 a = new ex1();
        int b = a.test();
        System.out.print("test方法运行完毕,返回值为"+b);
        
    }
    /**
     * divider(除数)
     * result(结果)
     * try-catch捕获while循环
     * 每次循环,divider减一 result = result+100/divider
     * 如果 捕获异常 打印输出“抛出异常了!!!” 返回 -1
     * 否则 返回 rusult
     * @return
     */
    public int test() {
        int divider = 10;
        int result = 100;
        try {
        while (divider > -1) {          
            divider --;
            result = result+100/divider;
            System.out.println(result);
        }
        }catch(Exception e) {
            e.printStackTrace();
            System.out.println("抛出异常了!!!");
            result = -1;
        }
        return result;
    }

}

try-catch-finally
在try捕获到异常执行了catch之后在返回main之前先执行了finally;
1、try
2、有异常执行catch
3、执行finally
4、返回main函数

package Java;
public class ex1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ex1 ex = new ex1();
        int result = ex.test();
        System.out.print("test方法运行完毕,返回值为"+result);
    }
    /**
     * divider(除数)
     * result(结果)
     * try-catch捕获while循环
     * 每次循环,divider减一 result = result+100/divider
     * 如果 捕获异常 打印输出“抛出异常了!!!” 返回  result = 999
     * 否则 返回 rusult
     * finally:打印输出“这是finally!!!哈哈!!”,同时打印输出 result值
     * @return
     */
    public int test() {
        int divider = 10;
        int result = 100;
        try {
        while (divider > -1) {          
            divider --;
            result = result+100/divider;
            System.out.println(result);
        }
        }catch(Exception e) {
            e.printStackTrace();
            System.out.println("抛出异常了!!!");
            result = 999;
            return result;
        }
        finally {
            System.out.println("这是finally!!!哈哈!!" + result);
        }   
        return result;
    }
}

如果在try-catch-finally语句之内没有return语句则会调用之外的语句

package Java;
public class ex1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ex1 ex = new ex1();
        int result = ex.test();
        System.out.print("test方法运行完毕,返回值为"+result);
    }
    /**
     * divider(除数)
     * result(结果)
     * try-catch捕获while循环
     * 每次循环,divider减一 result = result+100/divider
     * 如果 捕获异常 打印输出“抛出异常了!!!” 
     * 否则 返回 rusult
     * finally:打印输出“这是finally!!!哈哈!!”,同时打印输出 result值
     * 最后返回1111作为结果
     * @return
     */
    public int test() {
        int divider = 10;
        int result = 100;
        try {
        while (divider > -1) {          
            divider --;
            result = result+100/divider;
        }
        }catch(Exception e) {
            e.printStackTrace();
            System.out.println("抛出异常了!!!");
        }
        finally {
            System.out.println("这是finally!!!哈哈!!" + result);
        }
        System.out.println("这里是try-catch-finally之外的最后一句");
        result = 1111;
        return result;
    }
}

java中的异常抛出

throw

throws - 声明将要抛出何种类型的异常(声明)
public void 方法名(参数列表)
throws 异常列表{
//调用会派出异常的方法或者:
throw new Exception();
}

自定义异常
class 自定义异常类 extends 异常类型{
}

package Java;

public class ex extends Exception{
    public ex() {
        super();
    }
    public ex(String message) {
        super(message);
    }   
}   

异常链

package Java;
public class ex3 {
/**
 * test1():抛出"第一个异常"异常
 * test2():调用test1();捕获“第一个异常”异常,并且包装成运行时异常,继续抛出
 * main方法中,调用test2()尝试捕获test2()方法中的异常
 * @param args
 * @throws ex 
 */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ex3 ex3 = new ex3();
        try{
            ex3.test2();
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }

    public void test1() throws ex {
        throw new ex("第一个异常");
    }
    public void test2() {
        try {
            test1();
        } catch (ex e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        RuntimeException newExc = new RuntimeException("第二个异常");
        newExc.initCause(e);
        throw newExc;
        }
    }
}
image.png
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,135评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,317评论 3 397
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,596评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,481评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,492评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,153评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,737评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,657评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,193评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,276评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,420评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,093评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,783评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,262评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,787评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,427评论 2 359

推荐阅读更多精彩内容

  • Java异常类型 所有异常类型都是Throwable的子类,Throwable把异常分成两个不同分支的子类Erro...
    予别她阅读 932评论 0 2
  • 本文部分来自于:代码钢琴家blog address:www.cnblogs.com/lulipro/p/75042...
    八目朱勇铭阅读 1,319评论 0 4
  • 初识异常(Exception) 比如我们在取数组里面的某个值得时候,经常会出现定义的取值范围超过了数组的大小,那么...
    iDaniel阅读 1,871评论 1 2
  • 在忧伤中迷惘着 鲍勃·迪伦 一天清晨阳光灿烂 我躺在床上 想她是否已改变 她的头发仍是红色的吗 她的父母说我们一起...
    迈克HCG阅读 694评论 0 1
  • 卜官运 取用:卜官,以官鬼为用。今世坐寅木官鬼,取为用神,简单至极。 吉凶:内卦兄弟生子孙,子孙克世爻官鬼,看似不...
    易如人生阅读 242评论 0 0