Java——异常和时间日期

异常体系 Throwable

错误Error

比较严重,依靠代码无法处理,比如内存溢出等。

异常Exception

异常类,程序本身可以处理的问题。异常就是程序出现了不正常的情况。在执行过程中出现的非正常情况,最终导致jvm的非正常停止。

RuntimeException 运行时异常

Java程序在运行时出现的异常。

NullPointerException 空指针异常

空指针异常,又被称为NPE。
为什么会产生npe?原因只有一个,使用了一个null对象的方法。因此定位问题也很简单,注意用了对象.xxx的地方。
解决方式:

  1. 条件判断是否为空
  2. try catch语句抛出异常
public static void main(String[] args) {
   
        Object object = null;
        //抛出处理异常的方式
        //前两者是try-catch抛出异常,更推荐这一种
        //
        try {
   
            System.out.println(object.toString());
        } catch (NullPointerException e){
   
            e.printStackTrace();
            System.out.println("发生空值异常");
        }
        //
        try {
   
            System.out.println(object.toString());
        } catch (NullPointerException e){
   
            throw e;
        }
        //条件判断是否为空
        if (object == null) {
   
            System.out.println("obje不能为空");
        } else {
   
            System.out.println(object.toString());
        }

除RuntimeException之外的 编译时异常、检查异常

编译期必须处理的,否则程序不能通过编译。如果在发生运行时异常之前先发生了编译时异常,那么运行时异常不会抛出。

throws 和 throw

throws

throws,抛出一个异常类,用在方法声明之后,表示这个方法在运行过程中可能会产生一个异常,但是方法内部不知道该怎么处理,于是将这个异常抛出,让使用该方法的人去处理,如果一直不处理那么会一直抛出交给jvm处理。可以写很多个异常类在后面,取决于该方法可能会出现多少个异常。

public void show() throws NullPointerException,IllegalArgumentException,ArrayIndexOutOfBoundsException{
   
        throw new NullPointerException("空指针异常");
    }
    public void ExceptionDemo() throws NullPointerException,IllegalArgumentException,ArrayIndexOutOfBoundsException,IOException{
   

    }

throw

throw 用在方法体内,跟的是异常对象名,表示手动抛出异常对象,由方法体内的语句处理。

public static void main(String[] args) {
   
        try {
   
            FileWriter fileWriter = new FileWriter("x.abc");
        } catch (IOException e){
   
            throw new RuntimeException(e);
        }
    }

try、catch、finally

  1. 三者只有三种组合形式:try-catch、try-catch-finally、try-finally
  2. 使用的好处时运行出现异常后将其抛出,程序继续运行不受影响
  3. 捕获到异常后怎么处理,完全取决于业务逻辑要求

运行逻辑

catch允许同时写很多个,当try里面的代码块出现异常时会根据捕获到的异常的类型到catch里面一个一个对应看与哪一个catch相符合,执行相应的catch,而finally里面的代码块一般情况下表示必须要执行的,且是最后执行。如果有return,那么finally里面的代码是在retur之前执行。如果出现的异常在catch里面找不到,那么这个异常会被继续往上抛,最终会抛给jvm处理,程序停止执行。
如果太多异常不想写那么catch,可以直接捕获所有异常的父类Exception,但是不推荐,无法准确得知出现的是何种异常。不过所有可能的异常被捕获了还有一些未知异常可以使用这个方法。

public class FinallyLogic {
   
    public static void main(String[] args) {
   
        int bb = getAge();
        System.out.println(bb);
    }

    private static int a = 0;

    public static int getAge() {
   
        try {
   
//            System.out.println("221");
            return aa();
        } catch (Exception e) {
   

        } finally {
   
            a = 1;
            System.out.println(a + "------------");
            return a;
        }
    }

    public static int aa() {
   
        a = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值