异常处理机制(1.自己处理;2.JVM处理。)

Java异常概念:

一种用于处理程序错误的机制。程序运行出现意外情况时,JVM生成一个Exception对象来通知程序。

Java异常分类:

 程序员能够处理的均是Exceotion

一、手动处理(直接try-catch-finally)

        //自己处理异常,然后代码继续执行
        try {
            int a = 10/0;//生成异常对象 new ArithmeticException("/by zero")
        }catch (Exception e){ //e接收异常对象Exception e = new ArithmeticException("/by zero") 
            //System.out.println(e.getMessage());//1.获取异常信息(参数)
            // System.out.println(e);//2.获取异常类名和信息
            e.printStackTrace();//3.(最实用)获取异常类名和异常信息,及异常出现的位置
        }finally {//必然执行的语句
            System.out.println("处理完毕");
        }

        System.out.println("代码运行完毕");

运行结果:

java.lang.ArithmeticException: / by zero
	at Main.main(Main.java:26)
处理完毕
最后执行完毕

注意问题:

1、只有在try出现问题的时候才会执行catch重点内容。

2、try中出现异常代码会紧接着创建异常对象跳到catch处理,try中后面代码不再执行

3、catch处理完毕之后,后续代码继续执行。

二、抛出异常(throw)

1.抛出运行时异常(RuntimeException)

class Person{
    private int age;
    //抛出运行时异常,可以不处理,程序会终止
    public void setAge(int age) {
        if(age>0 && age<=150){
            this.age = age;
        }else {
            /*//1.直接打印出来
            System.out.println("非法年龄输入");*/
            //2.手动抛出一个运行时异常,终止程序运行
            throw new RuntimeException("年龄非法");
        }
    }
}
public class Main {
    public static void main(String[] args) {

        Person p = new Person();
        p.setAge(-10);//输入非法数据

    }
}

运行结果:

Exception in thread "main" java.lang.RuntimeException: 年龄非法
	at Person.setAge(Main.java:14)
	at Main.main(Main.java:22)

2.抛出编译时异常,要么必须处理,要么继续抛出给上一层

1)连续抛出,直至抛给JVM

class Person {
    private int age;
    //抛出编译时异常,要么必须处理,要么继续抛出给上一层
    public void setAge(int age) throws Exception{//第2次抛出方法调用者(main方法)
        if(age>0 && age<=150){
            this.age = age;
        }else {
            //手动抛出一个编译时异常
            throw new Exception("年龄非法");//第1次抛出给方法setAge
        }
    }
}
public class Main {
    public static void main(String[] args) throws Exception{//第3次抛出给JVM(JVM会做最终处理)

        Person p = new Person();
        p.setAge(-10);

    }
}

运行结果:

Exception in thread "main" java.lang.Exception: 年龄非法
	at Person.setAge(Main.java:12)
	at Main.main(Main.java:20)

2)在某一层处理(try-catch-finally)

class Person {
    private int age;
    //抛出编译时异常,要么必须处理,要么继续抛出给上一层
    public void setAge(int age) throws Exception{//第2次抛出方法调用者(main方法)
        if(age>0 && age<=150){
            this.age = age;
        }else {
            //手动抛出一个编译时异常
            throw new Exception("年龄非法");//第1次抛出给方法setAge
        }
    }
}
public class Main {
    public static void main(String[] args){

        Person p = new Person();
        //直接捕获并处理异常,不再向上抛出
        try {
            p.setAge(-10);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println("编译时异常处理完毕");
        }

    }
}

运行结果:

java.lang.Exception: 年龄非法
	at Person.setAge(Main.java:12)
	at Main.main(Main.java:22)
编译时异常处理完毕

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值