Java异常知识点

目录

Java 异常概念

异常体系

常见的异常

常见的编译时异常

运行时异常

异常处理

try:

catch (Exceptiontype e):

finally:

throws 和 throw


Java 异常概念

Java程序在执行过程中所发生的异常(运行时一切不正常情况)事件可分 为两类:

1.Error : Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。
2.Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如: 访问数组下标越界  试图读取不存在的文件 网络连接中断

异常体系

在这里插入图片描述

 

常见的异常

编译时期异常:(受查异常)在编译时期,就会检查,如果没有处理异常,则编译失败。(如输入输出、类型转换异常)

常见的编译时异常

1.FileNotFoundException
当试图打开指定路径名表示的文件失败时,抛出此异常。
2.ClassNotFoundException
找不到具有指定名称的类的定义。
3.SQLException
提供有关数据库访问错误或其他错误的信息的异常。
4.NoSuchFieldException
有时候使用反射进行Field相关操作的时候会出现这样异常
5.NoSuchMethodException
找不到具体的方法
6.ParseException

运行时异常

在编译时期,不会报错,在运行时期会报错.。(如数学异常)
常见的运行时异常

1.NullPointerException
当应用程序试图在需要对象的地方使用 null 时,抛出该异常(空指针)
2.ArithmeticException
当出现异常的运算条件时,抛出此异常。
3.ClassCastException
是类型转换错误,通常是进行强制类型转换时候出的错误。
4.ArrayIndexOutOfBoundsException
用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引(就是数组越界)
5.StringIndexOutOfBoundsException
指示某排序索引(例如数组、字符串或者向量的排序)超出范围是抛出。

异常处理

java异常处理的方式:

try:

捕获异常的第一步是用try{…}语句块选定捕获异常的范围, 将可能出现异常的代码放在try语句块中。在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配。 一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常处理,一旦处理完成就跳出当前的try-catch结构(在没有写finally的情况下)。继续执行其后的代码。在try结构中声明的变量,出了try结构之后,就不能被调用。

catch (Exceptiontype e):

在catch语句块中是对异常对象进行处理的代码。 每个try语句块可以伴随一个或多个catch语句, 用于处理可能产生的不同类型的异常对象。catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓,如果异常类型满足子父类的关系,则要求子类一定要声明在父类的上面,否则报错。

finally:

捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。
不论在try代码块中是否发生了异常事件, catch语句是否执行, catch语句是否有异常, catch语句中是否有return,finally块中的语句都会被执行。
finaly中声明的是一定会被执行的代码,即使catch中出现了异常,try中有return语句,catch中有return语句等情况。

finally语句和catch语句是任选的。
像数据库连接,输入输出流,网络编程socket等资源,JVM是不能自动回收的,我们需要手动的进行资源的释放。此时的资源的释放,就需要声明在finally中。

finally 执行的时机是在方法返回之前(try 或者 catch 中如果有 return 会在这个 return 之前执行 finally). 但是如果finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return.

public class Demo{
    public static void main(String[] args) {
        System.out.println(func());
    }
    public static String func() {
        try {
            return "try" ;
        } finally {
            return "finally";
        }
    }
}

结果

 throws 和 throw

throws:定义一个方法的时候可以使用throws关键字声明,表示此方法不处理异常,而交给方法调用进行处理.

throws在方法参数列表后声明此方法可能会出现异常.

Exception体系向下又分为:编译器异常(检查异常):没有继承RuntimeException.

throw用于方法体中,用来抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常,要么使用throws声明异常

throws用于方法声明处,用来声明该方法可能发生的异常类型,可以是多个异常类型,用来强制调用该方法时处理这些异常抽象方法也可以使用throws

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值