异常.md

异常

异常处理过程分析

  1. 一旦发生异常,则系统会自动生成一个异常类的实例化对象
  2. 此时如果存在了try 语句, 则会自动找到匹配的catch 语句执行,如果没有异常处理,则程序将推出,并由系统报告错误
  3. 所有的catch 根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理

使用 try{}catch(Exception e){} 捕获异常

finally 关键字

在进行异常的处理之后,在异常处理格式中还有一个finally 语句,那么此语句将作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码(先于return 语句执行,只要return 在try 中)

try {

        }catch(Exception e){
            System.out.println("df");
        }finally {
            System.out.println("finally");
        }
        System.out.println("ddd");
/*
output:
finally
ddd
*/

throwable 是一个类, 实现了Serializable , 子类: Error,Exception, 是java 语言中所有错误或异常的超类

Error: 严重问题, 系统内部的错误,不管这个问题

Exception: 分两类 编译期异常 (受检异常) RuntimeException (非受检异常)

finally 先于catch() 子句执行

finally块在以下几种情况下不会执行
  1. finally 块中发生了异常
  2. 程序所在线程死亡
  3. 在前面的代码中用了System.exit()
  4. 关闭了CPU

throw 和 throws

在方法的声明上使用,表示方法中不处理异常,而交给调用处处理。实际上对于Java 程序来讲,如果没有加入任何的异常处理,默认由JVM进行异常的处理操作,throw 关键字表示在程序中手动抛出一个异常,因为从异常处理机制来看,所有的异常一旦产生之后,实际上抛出的就是一个异常类的实例化对象,那么此对象也可以由throw直接抛出

语法规则

  1. try 语句不能单独存在,可以和catch finally 组成,catch 可以有多个,finally 只能有一个。 这三个关键字均不能单独使用。
  2. 作用域独立而不能相互访问
  3. 多个catch 块时候, Java 虚拟机会匹配其中一个异常类或其子类,就执行这个catch 块,而不会再执行别的catch 块。

自定义异常

通常都是通过继承一个异常类实现

自定义异常实现是,提供构造方法

异常对象本身是没有实际功能,只是一个有意义的标识。

public class MyException extends Exception{
    public MyException(){
        super();
    }
    public MyException(){
        super(message);
    }
}

public class UserService{
    public User login(String username, String password )throws MyException{
        if(!"admin".equals(username)){
            throw new MyException("用户名错误!");
        }
        
        if(!"12345".equals(password)){
            throw new MyException("密码错误!");
        }
        
        User user = new User("admin", "12345",18,"男");
        return user;
    }
}

assert 关键字, 表示断言

当程序执行到某个固定位置的时候,程序中某个变量的取值肯定是预期的结果,那么这种操作可以使用断言完成。断言的操作语法: assert 表达式;

DEBUG

单步跳入: 进入本行代码中执行

单步跳出: 执行本行代码,跳到下一行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值