【Java】异常

异常

编译时异常(受查异常)

  1. 最简单的是通过throws进行处理,这样会将处理异常的任务交给方法调用方
  2. 另一种是使用try{}catch{}进行捕获处理
  3. 代表异常:克隆异常(CloneNotSupportedException
  4. 实例:
// 实现Cloneable接口
class A implements Cloneable{
    public int val;
    A(int val) {
        this.val = val;
    }
	// 重写clone()方法!
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public class Main {
	// 编译时异常需要再抛出交给JVM处理
    public static void main(String[] args) throws CloneNotSupportedException {

        A a = new A(1);
        A b = (A) a.clone();
        System.out.println(b);
    }
}

运行时异常

  1. 需要打印栈上的异常信
  2. 息,定位出错位置:printStackTrace()方法
  3. 空指针异常、算数异常、类不存在异常、输入类型不匹配异常等……
  4. 实例:
		Scanner scanner = new Scanner(System.in);
        try {
            int a = scanner.nextInt();
            int result = 10 / a;
        } catch (ArithmeticException e) {
            System.out.println("算术异常");
        } catch (InputMismatchException e) {
            System.out.println("输入类型不匹配");
        } catch (Exception e) {
            System.out.println("异常!");
        } finally {
            scanner.close();
        }

自定义异常

  1. 继承RuntimeException(编译时异常)Exception(非受查异常)
  2. 实例

// Login类
class Login {
    String userName;

    public Login(String userName) {
        this.userName = "qyy";
    }
    // 使用throws进行处理,将处理异常任务抛给调用方
    public void check(String userName) throws UsernameException {
        if (!userName.equals("qyy")) {
            // 抛出异常,但没解决
            throw new UsernameException("用户名错误");
        }
    }
}

主函数调用:

在这里插入图片描述

错误

错误是比较严重的,需要程序员干预才能解决,一般是栈溢出、堆溢出

finally{}

  1. 能够保证抛出异常后仍然执行
  2. 一般进行资源的回收
  3. 就算finally之前有return也会执行,但是不建议在finally中进行return

几点注意

  1. 捕获异常时应该将父类的异常放在最后(异常捕捉会捕捉自己子类的异常)
  2. 异常的处理方法如果在本层不合适,那就会一直向上传递(向调用方传递),如果一直没有,那就交给JVM进行处理,会异常终止
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值