首页 > 编程语言 >Java基础---异常

Java基础---异常

时间:2024-10-21 16:18:28浏览次数:3  
标签:Exception Java 错误 处理 --- catch 异常

1. 概述

Java异常处理是Java语言的一个重要特性,它可以帮助我们更好地管理程序中的错误和异常情况。本文档将详细介绍Java中的异常处理机制,包括异常的概念、分类、捕获和处理方法。

2. 异常概念

异常(Exception)是在程序执行过程中发生的不正常情况,它会打断程序的正常流程。Java语言将异常分为两类:错误(Error)和异常(Exception)。

2.1 错误(Error)

错误是程序无法恢复的严重问题,通常是由Java虚拟机(JVM)引起的。错误发生时,JVM会终止程序的执行。常见的错误有:OutOfMemoryError(内存溢出)、StackOverflowError(栈溢出)等。

2.2 异常(Exception)

异常是程序在运行过程中可能发生的问题,可以分为以下两种:

  1. 检查型异常(Checked Exception):这类异常在编译时必须进行处理,否则编译不通过。例如:IOException、SQLException等。
  2. 非检查型异常(Unchecked Exception):这类异常包括运行时异常(RuntimeException)和错误(Error)。编译时不需要处理,运行时可能出现。例如:NullPointerException、ArrayIndexOutOfBoundsException等。

3. 异常处理机制

Java提供了try、catch、finally、throw和throws五个关键字来处理异常。

3.1 try语句块

try语句块用于包含可能发生异常的代码。语法如下:

try {
    // 可能发生异常的代码
} catch (ExceptionType1 e1) {
    // 处理异常的代码
} catch (ExceptionType2 e2) {
    // 处理异常的代码
} finally {
    // 无论是否发生异常都会执行的代码
}

3.2 catch语句块

catch语句块用于捕获并处理try语句块中发生的异常。可以根据需要捕获多个异常,每个catch块处理一种异常。语法如下:

catch (ExceptionType e) {
    // 处理异常的代码
}

3.3 finally语句块

finally语句块用于执行无论是否发生异常都会执行的代码,例如关闭资源。语法如下:

finally {
    // 无论是否发生异常都会执行的代码
}

3.4 throw关键字

throw关键字用于手动抛出一个异常。语法如下:

throw new ExceptionType("异常信息");

3.5 throws关键字

throws关键字用于声明方法可能抛出的异常。语法如下:

public void method() throws ExceptionType {
    // 方法体
}

4. 异常处理实战

以下是一个简单的异常处理示例:

public class ExceptionDemo {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("结果:" + result);
        } catch (ArithmeticException e) {
            System.out.println("捕获到算术异常:" + e.getMessage());
        } finally {
            System.out.println("执行finally语句块");
        }
    }

    public static int divide(int a, int b) {
        if (b == 0) {
            throw new ArithmeticException("除数不能为0");
        }
        return a / b;
    }
}

 

Exception 和 Error 有什么区别?

在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个重要的子类:

  • Exception :程序本身可以处理的异常,可以通过 catch 来进行捕获。Exception 又可以分为 Checked Exception (受检查异常,必须处理) 和 Unchecked Exception (不受检查异常,可以不处理)。
  • ErrorError 属于程序无法处理的错误 ,不建议通过catch捕获 。例如 Java 虚拟机运行错误(Virtual MachineError)、虚拟机内存不够错误(OutOfMemoryError)、类定义错误(NoClassDefFoundError)等 。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。

Checked Exception 和 Unchecked Exception 有什么区别?

Checked Exception 即 受检查异常 ,Java 代码在编译过程中,如果受检查异常没有被 catch或者throws 关键字处理的话,就没办法通过编译。

除了RuntimeException及其子类以外,其他的Exception类及其子类都属于受检查异常 。常见的受检查异常有:IO 相关的异常、ClassNotFoundExceptionSQLException...。

Unchecked Exception不受检查异常 ,Java 代码在编译过程中 ,我们即使不处理不受检查异常也可以正常通过编译。

RuntimeException 及其子类都统称为非受检查异常,常见的有(建议记下来,日常开发中会经常用到):

  • NullPointerException(空指针错误)
  • IllegalArgumentException(参数错误比如方法入参类型错误)
  • NumberFormatException(字符串转换为数字格式错误,IllegalArgumentException的子类)
  • ArrayIndexOutOfBoundsException(数组越界错误)
  • ClassCastException(类型转换错误)
  • ArithmeticException(算术错误)
  • SecurityException (安全错误比如权限不够)
  • UnsupportedOperationException(不支持的操作错误比如重复创建同一用户)
  • ……

 

 

标签:Exception,Java,错误,处理,---,catch,异常
From: https://blog.csdn.net/2401_86844317/article/details/142996437

相关文章

  • Java中的基础知识点---Object
    Object类的常见方法有哪些?Object类是一个特殊的类,是所有类的父类,主要提供了以下11个方法:/** *native方法,用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写。 */publicfinalnativeClass<?>getClass()/** *native方法,用于返回......
  • 开发-Hadoop-配置Hadoop
    最终效果   首先你得有一个Centos7的环境我直接用VirtualBox虚拟了一个Centos7(mini包)   #连接ssh#替换yum库curl-o/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repoyummakecache#升级renguanyuvim/etc/sudoers#如果是......
  • Java列表list
    List列表创建列表//List的ArrayList实现List<String>list1=newArrayList<>();//List的LinkedList实现List<String>list2=newLinkedList<>();常用方法importjava.util.List;importjava.util.LinkedList;classMain{publicstatic......
  • 【Javaee】网络编程-UDP基础
     前言UDP是一个高效、快速、简单的传输协议,适合于需要低延迟和实时性的应用本篇将介绍UDP相关的api,并使用UDP构建回显服务器程序。一.UDP与TCP特点UDP:无连接,不可靠,面向数据报,全双工。TCP:有连接,可靠,面向字节流,全双工。何为连接?此处所说的连接是抽象的连接,并不是实际......
  • 渗透测试-百日筑基—穷举篇(持续更新)
    渗透测试-百日筑基-day5暴力破解常见篇概述   穷举就是枚举的意思,也是口令爆破。在互联网的今天,需要使用某种的服务,大多数都需要口令登录,这个口令就是密码,密码的强度分为,弱口令、中度口令、强度口令。如果登录的服务为弱口令,那会存在很大的安全隐患,黑客通过穷举弱口令对......
  • Excel-Ctrl+Enter键的妙用
    一、Ctrl+Enter键的妙用 1.1 Ctrl+Enter键在多连续区域输入相同内容比如我要在一块区域内输入相同的数据,我首先选中这块区域,然后在第一个表格内输入数据-输入之后-(不要按回车键)按Ctrl+Enter键,即可全部表格输入同一数据  1.2 Ctrl+Enter键在非连续区域输入相同内容 先......
  • 代码随想录算法训练营Day39 | 卡玛网-46.携带研究材料、416. 分割等和子集
    目录卡玛网-46.携带研究材料416.分割等和子集卡玛网-46.携带研究材料题目卡玛网46.携带研究材料(第六期模拟笔试)题目描述:小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包......
  • 17track物流查询平台 last-event-id 参数逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • 【java】实现字节数组转int(采用IEEE 754标准)
    /***字节数组转int*采用IEEE754标准**@parambytes*@returnfloat*/publicintbytesToInt(byte[]bytes){//获取字节数组转化成的2进制字符串StringbinaryStr=bytesToBinaryStr(bytes);//......
  • 【最新Java必过毕设选题】基于微信小程序自助购药小程序全套(程序+万字(源码+万字LW+答
    作品简介 Hi,各位同学好呀!今天向大家分享一个最新完成的高质量毕业设计项目作品基于ssm+uniapp的XXX微信小程序项目评分(最低0分,满分5分)难度系数:3分工作量:5分创新点:3分界面美化:5分使用技术小程序框架:uniapp小程序开发软件:HBuilderX小程序运行软件:微信开发者......