java笔记之异常

本文深入探讨了Java中的异常处理机制,包括异常的分类、常用方法如getMessage()、printStackTrace()和toString()等,并通过示例代码展示了如何使用try-catch-finally结构来处理不同类型的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常的祖宗Throwable

  • 常用方法
    • getMessage();获得异常信息,Throwable的属性,构造函数初始化的信息
    • printStackTrace();打印异常栈轨迹
    • toString();输出异常的类名和信息
      • public String toString() {
        String s = getClass().getName();
        String message = getLocalizedMessage();
        return (message != null) ? (s + ": " + message) : s;
        }
  • 代码
Throwable throwable = new Throwable("错了");
System.out.println(throwable.getMessage());
System.out.println(throwable.toString());
throwable.printStackTrace();
结果:
错了
java.lang.Throwable: 错了
java.lang.Throwable: 错了
    at java7_0.Demo4.main(Demo4.java:8)

异常的分类

  1. Error错误:一般不是由代码解决的问题
  2. Exception异常:一般是程序的问题
    运行时异常:在程序运行时报出的问题(非受检异常)
    通过可以通过if,else等判断后限制后保证程序的健壮
    同样也可以用try{}catch(){}代码块捕获,让程序继续进行下去
    非运行时异常:在程序编译时报错的问题
    必须通过try{}catch(){}代码块捕获

异常注意事项

  • 多个异常处理:父类异常(范围大的异常要放在后面),不然编译不会通过,多个catch只会做一个,报错最先捕获的异常,在发生异常的地方从上到下寻找能够匹配的异常类型,然后不会在做catch的语句,直接跳出try语句,往后面执行

    package java7_0;
    
    class Father1{
    
    }
    
    class Son1 extends Father1{
    
    }
    
    public class Demo5 {
    
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
    
                System.out.println();
                int[] arr = { 1, 2 };
                arr = null;
                Father1 f = new Father1();
                div(1, 0, arr, f);
                System.out.println("over");
        }
    
        private static void div(int i, int j, int[] arr, Father1 f) {
            // TODO 自动生成的方法存根
            try{
                Son1 s = (Son1) f;
                System.out.println(i / j);
                System.out.println(arr[1]); 
    
    
            }catch(ClassCastException e){
                e.printStackTrace();
                System.out.println("类型不符");
    
            }catch (NullPointerException e) {
                // TODO: handle exception
                e.printStackTrace();
                System.out.println("空指针异常");
            }catch (ArrayIndexOutOfBoundsException e) {
                // TODO: handle exception
                e.printStackTrace();
                System.out.println("数组越界");
            }catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                System.out.println("其他异常");
            }
            System.out.println("结束");
        }
    
        private static void div(int i, int j) {
            // TODO 自动生成的方法存根
            System.out.println(i/j);
    
        }
    
    }
    结果:
    java.lang.ClassCastException: java7_0.Father1 cannot be cast to java7_0.Son1
    at java7_0.Demo5.div(Demo5.java:29)
    at java7_0.Demo5.main(Demo5.java:20)
    类型不符
    结束
    over
    

    同时也说明编译看左边,运行看右边。编译不报错,运行报错可见ClassCastException为运行时异常

  • finally:不管什么时都要执行的,return都不行,只有一种情况,那就是在try或者catch中调用System.exit(0);

  • catch的另一作用可以让catch中做默认的事情,当程序没接收到用户的配置的时候可以使用默认配置,比如用户输入的配置文件不存在,在catch中就可以使用默认配置文件
  • throws的作用在函数后面声明有异常,用逗号隔开,在函数体重通过throw new Exception()抛出异常,函数调用者需要处理这个异常。要么try{}cacth(){},要么同样继续throws;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值