Throwable and try/catch

本文介绍了Java中的异常处理机制,包括Throwable、Error和Exception的区别,异常的分类(检查异常和非检查异常),try/catch的作用,以及如何处理NullPointerException。此外,还讲解了throw和throws的用法,并展示了如何自定义高端的异常类。
摘要由CSDN通过智能技术生成

一、异常

Java提供优秀的解决办法:异常处理机制

Java标准裤内建了一些通用的异常,这些类以Throwable为顶层父类。

Throwable又派生出Error类和Exception类。

错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。
请添加图片描述

总体上我们根据Javac对异常的处理要求,将异常类分为2类。

非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try…catch…finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。

检查异常(checked exception):除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。

需要明确的是:检查和非检查是对于javac来说的,这样就很好理解和区分了。



二、异常举例及常见bug解决方案

错误定位方法:
请添加图片描述
当出现异常时可以根据提示查看对应异常类的API文档

根据提示信息可以找到出现异常的代码所属包及具体位置



三、RuntimeException

请添加图片描述
展开out包,存在.class字节码文件,证明代码已经经过编译了

这说明code语法并未出错且编译通过了,但代码在运行时出错,因此这种错误被称为运行时异常(RuntimeException)



四、try/catch的作用

使用 try 和 catch 关键字可以捕获异常。

try/catch 代码块放在异常可能发生的地方,try/catch代码块中的代码称为保护代码。

Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。

如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。

package com.google.study.throwable;

import java.io.*;
public class ExcepTest{
   

    public static void main(String args[]){
   
        try{
   
            int a[] = new int[2];
            System.out.println("Access element three :" + a[3]);
        } catch(ArrayIndexOutOfBoundsException e){
   
            System.out.println("Exception thrown  :" + e);
        } finally{
   
            System.out.println("异常捕获完成!");
        }
    }
}

请添加图片描述



五、NullPointerException空指针异常

Object的一个子类Objects中存在requireNonN

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值