木舟0基础学习Java的第十六天(异常,分类,自定义异常,注意事项)

异常

异常概述:异常是Java程序运行过程中出现的错误

异常分类:API查找Throwable

1.Error(服务器宕机,数据库崩溃等)

2.Exception C(异常的继承体系)API查RuntimeException

运行时异常:一般是程序员的错误异常可以让我们发现错误并修改

编译时异常:Exception下除了RuntimeException其他都是编译时异常 在写代码时就要处理掉 不然编译不通过

异常处理的两种方式

1.try catch(抓取)

   try catch finally

2.throws(抛出)  //直接抛给Jvm java虚拟机执行 缺点:程序会终止

try...catch处理异常的基本格式 try…catch…finally

通过 try{}carch(){} 把问题处理后程序会继续执行

 public static void main(String[] args) {
        try{
            int a=10;
            System.out.println(a/0);
        }catch(ArithmeticException e){
            //ArithmeticException类 中重写了Object中的toString()
            e=new ArithmeticException("不能除0");
            System.out.println(e);
        }finally{
            //这里的代码不管有没有抓取异常都会执行
        }
            //通过 try{}carch(){} 把问题处理后程序会继续执行
        System.out.println("出现异常行以下的程序-----------------------------------------");
    }

开发常用:

异常 名字.printStackTrace();

//打印堆栈信息 输出异常名字和问题的原因 以及问题出现在某个类中某一行

例:java.lang.ArrayIndexOutOfBoundsException: 7
    at com.muzhou.lesson.exception.Demo02.main(Demo02.java:8) //异常代码位置

类中抛异常案例:

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) throws Exception {
        if(age>0&&age<=120){
            this.age = age;
        }else{
            //抛出异常
           /* try{
                throw new Exception();
            }catch( Exception e){
                e=new Exception("年龄非法");
                System.out.println(e);
            }*/
            throw new Exception();//不处理异常 再次往方法上抛出 使用场景:在数据库
        }

    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
      Person p=new Person();
        p.setName("张三");
        try{
            p.setAge(130);//调用者被告知这个方法中有异常抛出 传值调用要注意 让调用者来处理
        }catch(Exception e){
            e.printStackTrace();
        }
       System.out.println(p);
    }
    public void setAge(int age)  {
        if(age>0&&age<=120){
            this.age = age;
        }else{
            throw new RuntimeException("年龄非法");//运行异常 不需要手动处理 由jvm默认的异常处理机制处理
        }
    }
throw和throws的区别

throw:在功能方法内部出现某种情况 程序不能继续运行 需要跳转时 就用throw把异常对象抛出

1.用在方法体内 跟的是异常对象

2.只能抛出一个异常对象名

3.表示抛出异常 由方法体内的语句处理

throws:

1.用在方法声明后面 跟的是异常类名

2.可以根多个异常类名 用逗号隔开

3.表示抛出异常 由该方法的调用者处理

自定义异常:

自定义异常是给了异常名字 可以更好的识别异常解决问题

自定义异常继承Exception 继承自RuntimeException

public class AgeException extends Exception{
    //自定义编译异常
    public AgeException() {
        super();
    }
    public AgeException(String s) {
        super(s);
    }
}
public class AgeRuntimeException extends RuntimeException{
    //自定义运行时异常
    public AgeRuntimeException() {
        super();
    }
    public AgeRuntimeException(String s) {
        super(s);
    }
}

注意:

子类继承父类 不能抛出>父类的异常 只能抛出<=父类的异常

父类没有抛异常 子类不允许抛异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值