java——异常

目录

一、异常是什么

二、异常的分类

1、运行时异常

2、编译时异常

三、异常处理

1、虚拟机默认处理异常

 2、捕获

3、抛出

自定义异常

1、定义异常类

2、写继承关系(Exception或者RuntimeException)

3、空参构造

4、带参构造(带String)


一、异常是什么

程序可能出现的问题,程序在执行过程中发生了不正常的情况

二、异常的分类

1、运行时异常

也叫未受控异常,RuntimeException本身和子类

2、编译时异常

也叫受控异常,直接继承Exception,需要直接处理

注意:所有异常都是在运行阶段发生的。因为只有程序运行阶段才可以new对象。

package csdn.Exception;
public class ExceptionDome1 {
    public static void main(String[] args){
        String time="2023年5月21日";
        //编译时异常(必须要手动处理,否则代码报错)
        System.out.println(by(4,3));
        System.out.println(by(4,0));
        //ArithmeticException算数运算异常
        //运行时异常
    }
    public static int by(int a,int b){
        return a/b;

    }
}

三、异常处理

1、虚拟机默认处理异常

将异常信息以红色字体打印在控制台,并结束程序

 2、捕获

try…catch 自己处理,一般用于调用处,能让代码继续往下运行

格式:

try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}
package csdn.Exception;

public class ExceptionDome4 {
    public static void main(String[] args){
        int[] arr={1,2,3};
        try{
            System.out.println(arr[0]);
            //无异常
            System.out.println(arr[3]);
            //此处出现异常,程序就会在这里创建一个ArrayIndexOutOfBoundsException对象
            //new ArrayIndexOutOfBoundsException();
            //拿着这个对象到catch的小括号中对比,看括号中的变量是否可以接收这个对象
            //如果能被接收,表示该异常被捕获了,执行catch里的代码
            //当catch中的代码执行完毕,执行后面的代码
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println("出现了越界!!!");
            e.printStackTrace();
            //把异常的错误信息打印在控制台,不会停止程序进行
        }
        System.out.println("处理后,后续代码能执行");
    }
}

注意:

1、catch小括号中的类型可以是具体的异常类型,也可以是该异常类型的父类类型

2、catch写多个的时候,从上到下,必须遵守从小到大

3、如果try中没有问题,程序将try中所有代码执行,不会执行catch中的代码

4、try中有多个问题,可以写多个catch与之对应,注意父类写在下面

3、抛出

throw throws 在方法声明处使用throws关键字抛出,谁调用就抛给谁,让该方法结束运行并告诉调用者出现了问题

格式:

修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{

                 throw new 异常类名();

                  }

package csdn.Exception;

public class ExceptionDome5 {
    public static void main(String[] args){
        int[] arr={};
        int max=Max(arr);
        System.out.println(max);
    }
    public static int Max(int[] arr)/*运行时异常,这里可写可不写throws NullPointerException*/{
        if(arr==null){
            //创建异常对象,将这个异常交给方法调用着处理
            throw new NullPointerException();
        }
        int max=arr[0];
        for(int i=1;i<arr.length;i++){
            if(arr[i]>max){
                max=arr[i];
            }
        }
        return max;
    }
}

自定义异常

1、定义异常类

2、写继承关系(Exception或者RuntimeException

3、空参构造

4、带参构造(带String)

例如(定义一个NameException异常类)

package csdn.Exception;
//定义异常类
//继承关系
public class NameException extends RuntimeException{
    //运行时:RuntimeException 由于参数错误导致的问题
    //编译时:Exception  核心:提醒检查本地信息
    public NameException() {
    } //空参构造
    public NameException(String message) {
        super(message);
    }//带参构造
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值